Mplayer nur für den Framebuffer

Die ganzen gestrigen Ausführungen, wie man mit Debian Binärpakete aus dem Quellcode baut, dienten eigentlich nur einem Zweck. Ich wollte K.Mandlas „Mplayer for the framebuffer only“ Tipps einmal ausprobieren.

Wie macht man Mplayer noch schneller und ressourcenschonender? Man entschlackt ihn, indem man beim Kompilieren verschiedene Feature deaktiviert. Zum Übersetzen habe ich die gestern vorgestellte pbuilder Methode genutzt.

Ziel war es, die Unterstützung für Videoausgabe ausschließlich auf das Framebuffer Device fbdev zu beschränken. In debian/rules mussten die CONFIGURE_FLAGS und der Code zum Bauen der Mplayer GUI und der nicht grafischen Version angepasst werden.

Welche Optionen es gibt, erfährt man durch ./configure --help. Mit dem Befehl debchange -nmu changelog im debian Verzeichnis des Quellpakets kann das changelog angepasst werden.

Nach jeder Veränderung in debian/rules musste ich das Quellpaket mit dpkg-source -b Name_des_Verzeichnisses neu bauen, damit die gemachten Änderungen von pbuilder auch erkannt wurden. Wer Tipps und Hintergrundinformationen dazu hat und ob es auch andere Möglichkeiten gibt, kann mich gerne darauf stoßen.

Unter den CONFIGURE_FLAGS werden noch verschiedene if-Abfragen ausgeführt. Dabei sollte man vor allem das Bauen der Mplayer GUI Version deaktivieren, wir brauchen nur den Framebuffer, und Mencoder kann auch aus debian/rules verschwinden.

CONFIGURE_FLAGS = 
              --prefix=/usr 
              --confdir=/etc/mplayer 
              --disable-x11 
              --enable-xvmc 
              --enable-menu 
              --disable-arts 
              --enable-largefiles 
              --language=de 
              --disable-libdvdcss-internal 
              --disable-dvdread-internal 
              --disable-libavutil_a 
              --disable-libavcodec_a 
              --disable-libavformat_a 
              --disable-libpostproc_a 
              --disable-libswscale_a 
              --disable-openal 
              --disable-sdl 
              --disable-aa 
              --disable-esd 
              --disable-jack 
              --disable-tv-v4l1 
              --disable-tv-v4l2 
              --disable-runtime-cpudetection 
              --disable-mga 
              --disable-smb 
              --disable-gui 
              --disable-lirc 
              --disable-lircc 
              --disable-liblzo 
              --disable-fribidi 
              --disable-libdv 
              --disable-musepack 
              --disable-speex 
              --disable-cdparanoia 
              --disable-dvdnav 
              --disable-libamr_nb 
              --disable-live 
              --disable-mad 
              --disable-mencoder 
              --disable-gl 
              --disable-pulse 
              --enable-fbdev 
              --disable-3dfx 

Alles in allem hat das bei mir dazu geführt, dass das mplayer .deb Paket von 3 MB auf 1,7 MB geschrumpft ist. Zum Testen gelangte es dann auf den Toshiba Portégé 3110 CT, wo ich Youtube Videos mit Elinks und Mplayer angeschaut habe.

Auch mit einer angepassten Mplayer Version lassen sich h264 Videos nicht ruckelfrei in Vollbild auf einem PII 300 MHZ 64 MB RAM Laptop anschauen. Dennoch mit einer kleinen Modifikation des youtube-dl Skripts, ließen sich zumindest manche h263 Videos mit niedrigster Auflösung betrachten, wozu ich einfach die Option -f 5 anstelle von -f 34 übergeben habe.

Wichtig sind auch die kleinen Mplayer Tweaks und die Tipps in der MPlayer FAQ.

Zu einem Screenshot mit fbgrab reichte es aber, auch wenn dadurch der Laptop kurzzeitig ausgelastet war.

Gibt man dem alten Rechner eine Chance mit mpeg1/2 Videos und nutzt nicht gerade den CPU lastigen h264 Codec, sieht das Ganze besser aus. Über das Abspielen auf dem zwei Jahre jüngeren Dell Inspiron 4000 brauche ich nicht viele Worte verlieren. Das klappte auch schon vorher problemlos.

Als Fazit lässt sich sagen das selbst maßgeschneiderte Software nicht immer das Unmögliche schaffen kann, aber angesichts des zwölf Jahre alten Laptops noch brauchbare Ergebnisse liefert. Selber Kompilieren ist auf jeden Fall lehrreich. Debians Mplayer Binärpaket ist aber nicht fühlbar schlechter.

Auf jeden Fall gewinnt ihr ein paar Geek Punkte bei dem bleichen Geek von nebenan hinzu und vom Rest gibt es immerhin Augenrollen 🙄 , Kopfschütteln und sanftes Klopfen auf die Schulter.

Das Leben ist nicht immer fair.

Bildschirmschoner für die Konsole

Ich erwähnte bei der Vorstellung meiner .screenrc, dass sich hinter der Befehlszeile blankerprg ein kleines Bashskript verbirgt, welches eine Reihe von Konsolenprogrammen ausführt, sobald man fünf Minuten bei screen inaktiv geblieben ist.

Die ursprüngliche Idee und die Skripte stammen von KMandla.

In meinem Home Verzeichnis befindet sich der versteckte Ordner .scripts und die ausführbare Datei screensaver.sh. Hierin werden folgende Programme zufällig ausgeführt.

#!/bin/bash

index=0
screensaver[$((index++))]="cmatrix -ab -u 2"
screensaver[$((index++))]="binclock -l -n"
screensaver[$((index++))]="htop"
screensaver[$((index++))]="$HOME/.scripts/hostname.sh"

sh -c "${screensaver[$((RANDOM % index))]}"

Cmatrix fällt sicher am meisten auf und wer jemals einen ähnlich klingenden Film gesehen hat, weiß auch sofort was sich dahinter verbirgt. 😉

Das zweite Programm, binclock, ist eine Binäruhr, deren Nullen in Grün und Einsen in Rot dargestellt werden. Die Option -l sorgt dafür, dass das Programm jede Sekunde ausgeführt wird und -n fügt noch eine weitere, menschlichere, Zeitangabe hinzu.

Nr. 3 ist htop, eine gegenüber top verbesserte Anzeige von Systemprozessen und mein bevorzugtes Programm für jeden Rechner, wenn ich eine Übersicht über alle laufenden Prozesse haben möchte.

Die vierte screensaver-Zeile führt wiederum ein weiteres Skript aus, welches den laufenden Kernel, den Namen des Rechners und das aktuelle Datum anzeigt. Dabei wird der Text mit Hilfe von figlet stark vergrößert, was ziemlich beeindruckend auf der Konsole wirkt. 😉

Hier noch die hostname.sh:

#!/bin/bash
while true
        do
                clear
                for i in {1..10}
                do
                        echo ""
                done
                echo `uname -r -s` | figlet -t -c -f big
                echo "on" $HOSTNAME | figlet -t -c -f small
                date +"%F %T %P" | figlet -t -c -f big
                sleep 15s
        done

Das war es auch schon, was sich hinter der ominösen Zeile blankerprg bei GNU screen verbirgt. Natürlich kann man je nach Geschmack das Ganze um Programme erweitern, reduzieren oder auch komplett ignorieren.

Bei der Arbeit auf der Konsole sorgt es auf jeden Fall für Abwechslung. 🙂

GNU Screen richtig nutzen

Screen ist für mich eines der wichtigsten Konsolenprogramme. Verbindet man sich mit ssh zu einem Rechner, vermisst man schnell die Fähigkeit einer modernen grafischen Oberfläche zwischen verschiedenen Anwendungen und Fenstern einfach hin- und her zu wechseln. Und wie können ausgeführte Programme in der Konsole auch nach dem Logout weiterlaufen? Hier kommt screen ins Spiel.

Beim Start von screen erscheint eine Nachricht und danach scheint es als ob sich nicht viel geändert hätte. Lediglich die Eingabeaufforderung der Shell blinkt einem entgegen.

Hier lässt sich nun z.B. rtorrent starten und der Bildschirm horizontal mit Strg+A und S teilen. Mit Strg+A und TAB springt man zur nächsten Bildschirmregion und kann dort mit Strg+A und c eine neue Shell öffnen und z.B elinks starten. Dies würde dann meinem schon vorgestellten rtorrent Setup entsprechen und sieht wie folgt aus.

Screen lässt sich aber nicht nur horizontal sondern auch vertikal teilen. Um das rtorrent Fenster vertikal zu teilen und htop anzuzeigen, springt man einfach mit Strg+A und TAB in die obere Hälfte zurück. Dann genügt bei Debian und Ubuntu ein Strg+A und | um den Bildschirm erneut zu teilen.

Anschließend wird der Schritt zum Starten einer neuen Anwendung wiederholt, wiederum Strg+A und TAB um zur nächsten Region zu gelangen, Strg+A und c um die Shell zu öffnen und dann htop eingeben.

Das Spiel lässt sich nun beliebig weiter treiben. Mit Strg+A und d bietet screen eine seiner besten Optionen an, nämlich screen abzutrennen und in den Hintergrund zu schicken. Danach befindet man sich wieder auf der ursprünglichen Konsole, alle in screen ausgeführten Programme laufen aber weiter!

Man könnte sich also problemlos ausloggen, zu Bekannten fahren, von dort sich erneut zu seinem Rechner mit ssh verbinden und danach mit dem Kommando screen -r seine Session wieder aufrufen.

Leider ist die Aufteilung der Anwendungen in verschiedene Regionen dann verschwunden und man müsste von neuem die Einteilung vornehmen. Natürlich lässt sich einfach mit Strg+A und SPACE zwischen den „Fenstern“ wechseln. Oder man springt direkt zu einem Fenster indem man Strg+A und 0,1 oder 2 eingibt.

Wäre es nicht besser, man hätte eine Statusleiste, in der die unterschiedlichen Programme mit Namen und Fensterzahl schon angezeigt würden? Wäre es nicht praktischer die Anwendungen schon sofort beim Starten von screen mit auszuführen, ohne den Umweg über das Öffnen einer neuen shell zu gehen?

Der „Trick“ ist die im Home Ordner versteckte Datei .screenrc zu erstellen, welche bei mir so aussieht.

hardstatus alwayslastline "%-w[%n %t]%+w%=%H %c Load: %l"

shelltitle '...'
startup_message off
vbell off
blankerprg /home/apo/.scripts/screensaver.sh
idle 300 blanker

#screen -t centerim 0 /home/apo/.scripts/centerim.sh
#screen -t alpine 1 alpine -d 0
#screen -t mc 2 /home/apo/.scripts/mc.sh
screen -t rtorrent 1 rtorrent
screen -t htop 2 htop
#screen -t wyrd 4 wyrd
screen -t elinks 3 /home/apo/.scripts/elinks.sh
#screen -t hnb 8 hnb
screen -t slurm 4 slurm -i eth0

Aufmerksamen Lesern von KMandlas hervorragendem Linuxblog und Testern seiner Debian Lenny Sandbox Edition fällt hier sicher auf, dass es sich mit geringfügigen Änderungen um seine screenrc handelt. Sie ist übersichtlich und enthält meiner Meinung auch alles was man für die effiziente Benutzung von screen braucht.

Was macht diese Konfigurationsdatei? Zum einen verschwindet die Startnachricht, die man nicht wirklich benötigt. Die visuelle Rückmeldung, wenn sich etwas in den Fenstern getan hat, ist ebenfalls ausgeschaltet. Mit Shelltitle lässt sich der Name einer mit Strg+A und c gestarteten shell festlegen.

Die Zeile blankerprg verweist auf ein Bildschirmschoner-Skript, welches nach 5 Minuten ausgeführt wird, sollte man in der Zwischenzeit keine weiteren Aktionen in screen vorgenommen haben. Im Grunde genommen handelt es sich hier mehr um ein Gimmick, welches bei modernen Monitoren nicht notwendig ist. Ich stelle es ein anderes Mal ausführlicher vor.

Die restlichen Zeilen sind Programme, die ich regelmäßig in meiner Screen Session ausführe. Da ich nicht auf jedem Rechner immer die gleichen benötige, sind manche mit der # kommentiert. Der Aufbau ist simpel

screen -t Titel des Fensters Fensterzahl Name des Programms und Startparameter

Somit wird aus einem langweiligen Terminalfenster ein Fenstermanager für die Konsole. Zwischen den einzelnen Fenstern lässt sich danach wie gewohnt mit Strg+A und Space oder Strg+A und Fensterzahl wechseln.

Wer weitere Vorschläge für das Aussehen der Statuszeile bei screen sucht, findet schon bei Google mit dem Begriff hardstatus und screen viele weitere Ideen. Noch einfacher geht es, wenn man direkt byobu ausprobiert, was nichts anderes als ein verbessertes oder besser verschönertes screen ist.

Screen ist nicht nur für Serveradmins sinnvoll. Auch für alte Computer mit sehr wenig RAM bietet sich screen mit vielen nützlichen Konsolenprogrammen an, womit sich E-Mail schreiben, Browsen, Chatten, Bittorrent und vieles mehr realisieren lässt. Viel Spass beim Ausprobieren!

Bei speedy nichts Neues

Ich habe schon lange nichts mehr über speedy geschrieben. Das liegt vor allem daran, dass alles läuft und er genau das tut, was er tun soll. Aber warum immer nur über Computerprobleme bloggen?

Der gute Toshiba Portégé 3110 CT steht nun seit einigen Monaten auf meinem Schreibtisch direkt neben dem TFT-Monitor des DualCore-Rechenknechts. Die meiste Zeit ist das Display eingeklappt und er dient mir so als kleiner Server.

Er verbraucht in diesem Zustand maximal 16-20 Watt. Gegenüber einem SheevaPlug ist das zwar immer noch relativ viel Energie, zumindest wenn man den Energieaufwand zur Herstellung des Plugs ausblendet, dafür ist er vielseitiger und lässt sich neben dem Serverdienst als Jukebox und natürlich auch als portables Netbook nutzen.

Seit meiner Debian-Squeeze-Installation letzten Sommer habe ich das Betriebssystem nicht mehr gewechselt. Kurz gesagt, ich bin total zufrieden wie alles momentan funktioniert. Deswegen habe ich gar kein Interesse ein neues Betriebssystem auszuprobieren. Hinzu kommt, dass es ein Problem mit dem externen CD-ROM Laufwerk zu geben scheint, was dazu führen würde, dass ich entweder auf das Floppy-Laufwerk oder die PEX-Installation zurückgreifen müsste.

Zwölf Jahre alt, nur 64 MB RAM und dennoch habe ich nicht das Gefühl, dass ein moderner Laptop hier einen grundlegenden Unterschied machen würde. Um diverse Distributionen herunterzuladen nutze ich speedy mit meinem Rtorrent-Setup und habe nun ein externes USB-Laufwerk mit jeder Menge Software, die ich demnächst ausprobieren möchte und dann natürlich hier auch kurz vorstelle.

Ansonsten habe ich mir schon oft die Frage gestellt, warum es notwendig sein sollte den Dual Core anzuschalten, nur um ein paar Flac-Dateien anhören zu wollen. Das kann speedy natürlich auch, so dass ich hier meine ursprünglich für Ubuntu eingerichtete Konfiguration für den Music Player Daemon nutze. Noch externe Boxen angeschlossen, die für die Beschallung der Wohnung ausreichen und fertig ist die Laptop-Jukebox.

Gesteuert wird alles über SSH und eine Screen-Session und für mpd hat sich ncmpc als Client ausgezeichnet.

Da Squeeze mit großer Sicherheit für die nächsten drei Jahre weitergepflegt wird, wird es hier also keine großen Veränderungen mehr geben. Bleiben aber noch diverse Anwendungen übrig, die mit speedy eine gute Testplattform gefunden haben.

Was ich aber auf gar keinen Fall machen werde, ist diesen Laptop zu einer Wetteruhr umbauen. Aber sollten sich irgendwo noch weitere alte Laptops finden lassen…vielleicht. 😈

Youtube-Videos mit Elinks und Mplayer anschauen

Wer kennt nicht das Problem. Man möchte schnell mal ein interessantes Video auf Youtube anschauen, aber der Browser braucht wieder eine gefühlte Ewigkeit um es abzuspielen. Die CPU ächzt, das Surfen wird zur Qual, Browser abgestürzt, Moment mal! Sieht man von „ab und zu“ auftretenden Sicherheitslücken in Flash ab und der Tatsache, dass man mit Flash- und Super-Cookies recht leicht das Benutzerverhalten erfassen kann, ohne dass die meisten Nutzer überhaupt etwas davon ahnen, bringt Flash einige wirklich hübsche visuelle Animationen auf den Bildschirm.

Fraglich bleibt nur, wozu man eigentlich Flash benötigt, wenn man nur ein Video im Netz anschauen möchte. Zwar ist HTML5 unterwegs, doch wer schon heute zum Videos anschauen auf Flash verzichten möchte, dem kann mit Hilfe eines simplen Textbrowsers namens Elinks und dem Multimedia-Alleskönner Mplayer geholfen werden.

Die Grundidee ist einfach. Ausführlich vorgestellt wurde sie Anfang des Jahres in Englisch von Urukrama. Gesucht ist eine Anwendung, welche schnell Suchergebnisse von Youtube zurückliefert, die URL des Videos auflöst und per Tastendruck diese an eine weitere Multimediaanwendung zur Darstellung übergibt. Dabei kommen drei verschiedene Programme zum Einsatz.

  1. youtube-dl
  2. Youtube-dl ist ein Skript, welches Videos von youtube direkt von der Kommandozeile herunterladen kann.

  3. elinks
  4. Ein hervorragender Textbrowser mit einer Vielzahl an Optionen.

  5. mplayer
  6. DER Multimediaabspieler unter Linux. Mplayer ohne GUI ist die ressourcenschonendste Möglichkeit Videos anzuschauen.

15.01.2011 Update:
Seit dem 10.12.2010 hat youtube.com neue Sicherheitsvorkehrungen getroffen. Cookies dienen nun der Identifikation des Clients. Die notwendigen Veränderungen habe ich in die Skripte eingetragen. Alles funktioniert wieder wie beabsichtigt 😉

Vielen Dank an diesen Post auf multimedia.cx für die Lösung.

Als Alternative für youtube-dl bietet sich auch clive an.

utube-Skript erstellen

Als erstes muss ein ausführbares Skript erstellt werden, welches mit Hilfe von youtube-dl die youtube Video-URL auflöst und diese an mplayer übergibt, damit es direkt abgespielt werden kann. Das Skript kann z.B. utube heißen und muss mit chmod+x utube ausführbar gemacht werden. Danach wird es nach /usr/local/bin oder /usr/bin kopiert, damit es systemweit auf der Konsole ausgeführt werden kann. Neu seit dem 10.12.2010 ist die Notwendigkeit ein Cookie abzuspeichern, mit welchem man sich beim youtube Server identifiziert.

 

#!/bin/sh

COOKIE_FILE=/var/tmp/youtube-dl-cookies.txt
mplayer -cookies -cookies-file ${COOKIE_FILE} $(youtube-dl -g --cookies ${COOKIE_FILE} $1) > /dev/null 2>&1

Elinks konfigurieren

In Elinks die Taste „O“ drücken und der Optionsmanager öffnet sich. Unter Dokument(e)>URI Deligierung einen neuen Eintrag hinzufügen und ihm z.B. den Namen youtube geben. Als Wert trägt man utube %c ein. Alles sichern und den Optionsmanager schließen.

Anschließend mit der Taste „K“ den Tastenbelegungsmanager öffnen. In der Haupttabelle bis zur Option „Die URI des aktuellen Links an ein externes Programm übergeben“ scrollen. An dieser Stelle lässt sich der Name der Taste definieren, z.B. y, mit der das utube Skript aufgerufen wird, sobald man auf youtube.com einen Videolink ausgewählt hat. Damit sind die Videolinks gemeint, die nach einer Suchanfrage auf youtube erscheinen. Es genügt also mit der Tastatur auf einen dieser Links zu steuern und y zu drücken, wonach das Skript seine Arbeit verrichtet und mplayer sofort mit dem Abspielen beginnt.

Um ein Video abspielen zu können, wenn man sich direkt auf der Videoseite befindet, muss im Tastenbelegungsmanager die Option „Die URI der aktuellen Ansicht an ein externes Programm übergeben“ mit einer Taste oder Tastenkombination belegt sein. Ich habe hier Alt-y gewählt.

Youtube-Videos suchen leicht gemacht

Elinks bietet die Möglichkeit mit Hilfe eines sogenannten smart prefix eine Zeichenfolge durch eine kürzere zu ersetzen. Innerhalb von elinks öffnet sich mit der Taste „G“ die Adresszeile des Textbrowsers. Hier könnte man z.B. youtube.com eingeben und landet dann auf der Seite des Videoportals. Von dort aus lässt sich über das Suchfeld nach Videos suchen, mit der Tastatur auf einen Videolink steuern und mit y das Video abspielen. Einfacher geht es, wenn man direkt in der Adresszeile nach den Videos suchen kann. Die direkte URL für Suchanfragen bei youtube lautet:

http://www.youtube.com/results?search_query=

Die Zeichenkette nach dem = wird von youtube ausgewertet und man erhält eine Liste von Videos zurück. Um nicht jedesmal erneut diese URL eingeben zu müssen, lässt sich diese in elinks zu einem einzelnen Buchstaben, einem smart prefix, umdefinieren.

Dazu muss man im Optionsmanager unter Protokolle>URI Veränderung>Komplexe Präfixe ein neues Zeichen hinzufügen und als Wert die oben genannte Such-URL eintragen und den Parameter %s anfügen. Ich habe hier ebenfalls y gewählt. Drückt man nun in elinks „G“ und gibt

y beethoven mondscheinsonate

ein, erhält man eine Liste mit Videos zu Beethovens berühmter Sonate zurück und kann diese mit der Tastatur auswählen und durch Drücken von y abspielen, ohne den Umweg über youtube.com und das Suchfeld gehen zu müssen.

Youtube-Videos herunterladen

Natürlich funktioniert auch der direkte Download eines Videos. Folgendes Miniskript ebenfalls in /usr/local/bin/ abspeichern und wie oben beschrieben mit dem Optionsmanager in Elinks z.B. unter dem Namen „download“ verfügbar machen. Danach erscheint ein weiterer Menüeintrag „download“ sobald die Taste „y“ bei ausgewähltem youtube Link gedrückt wird.

#!/bin/sh

cd ~/Videos/youtube/
youtube-dl -t $1 > /dev/null 2>&1

Zum Schluss

Es gibt zwar tolle Addons für den Firefox, mit denen sich Videos leicht von youtube herunterladen und dann mit einem Player der Wahl abspielen lassen. Auch bietet z.B. Totem mit Plugins die Möglichkeit Videos direkt aus dieser Multimediaanwendung abzuspielen.

Wer aber eine sehr effiziente und leichtgewichtige Lösung sucht um Youtube Videos auf nahezu jedem Rechner abzuspielen, ohne sie vorher herunterzuladen, sollte youtube-dl, elinks und mplayer eine Chance geben. Die oben genannte Lösung funktionierte sogar auf meinem Toshiba Laptop mit 64 MB RAM und 300 MHz CPU. Wer schafft es außer mplayer youtube Videos im Framebuffer abspielen zu können? 😛

Meine elinks.conf

elinks.conf.tar