ffmpeg für Unterflieger

Hier einige Beispiele zur Konvertierung von Video-Dateien mit ffmpeg.

Wozu das? ffmpeg kann alles von allein.

Fast alles. An einigen Stellen hatte es bei mir gedauerte, sich mühsam die richtigen Optionen zusammenzusuchen. Das Folgende ist vielleicht für andere Videokonvertierungslaien hilfreich, denen es ebenso erging.

Es wird hier kein Wert auf besondere Optimierung, sei es der Qualität, der Geschwindigkeit oder des Speicherplatzverbrauchs gelegt. Hautsache das Ergebnis ist einigermaßen anseh- und hörbar.

Die Eingangsdatei und deren Format ist fast beliebig. Symbolisch wird hier immer test.avi verwendet. Das könnte natürlich genauso gut test.mp4, test.flv u.s.w. sein.

Voraussetzungen

Es wurden die ffmpeg-Versionen, die mit den Linux-Distributionen SuSE 10.1 und openSuSE 10.3 geliefert werden, verwendet.

Um die folgenden Anleitungen verwenden zu können sollten Sie wissen, wie sie unter Linux Programm auf der Kommandozeile bedienen. Ebenso wird vorausgesetzt, dass sie mit Dateien, Speicherkarten und den Geräten, auf denen Sie die Videos ansehen wollen vertraut sind. Sie finden hier nur eine Liste der Befehle für die eigentliche Konvertierung.


Hier zunächst die übliche

Beschwörungsformel zur Abwehr böser Geister

Sie verwenden diese Anleitung auf eigene Gefahr unter dieser Lizenz.

Konvertierung für die Sony PSP

Wandlung in das PSP-Format 320x240.

ffmpeg -i test.avi -f psp -r 14.985 -s 320x240 -b 768 -ar 24000 -ab 32 -title "Filmtitel ohne Umlaute" M4V00001.MP4

Das Ergebnis muss nach Sonys Vorgabe M4V00000.MP4 heißen, wobei die Nullen für beliebige Zahlen stehen. Es läuft auf allen Firmwareversionen. Eine Erklärung der verwendeten Optionen gibt die Ausgabe 1/2006 der Zeitschrift LinuxUser.

Wandlung in das PSP-Format 480x272.

Hier ist mir nur ein two-pass-Verfahren bekannt, dass verwendbare Ergebnisse liefert.

Erster Befehl

ffmpeg -i test.avi -f mp4 -title "Filmtitel" -pass 1 -vcodec h264 -level 21 -s 480x272 -r 24000/1001 -b 762k -bt 768k -bufsize 4000k -maxrate 4000k -g 250 -coder 1 /dev/null

Zweiter Befehl

ffmpeg -i test.avi -f mp4 -title "Filmtitel" -pass 2 -vcodec h264 -level 21 -s 480x272 -r 24000/1001 -b 762k -bt 768k -bufsize 4000k -maxrate 4000k -g 250 -coder 1 -acodec aac -ac 2 -ab 96k M4V00001.MP4

Es funktioniert hier auf der PSP slim&light und sollte auf älteren Geräten ab der ofiziellen Firmwareversion 3.30 funktionieren, sowie mit aktueller Hombrew-Firmware.

Konvertierung für Navigationsgeräte

Navgear GP-35.3

Dies ist ein gutes Beispiel dafür, dass ffmpeg tatsächlich fast alles von allein kann.

ffmpeg -i test.avi -s 320x240 -qmax 8 Film.avi

Die Zahl hinter der -qmax–Option gibt ein Qualitätsgrenze des Ergebnisses vor. Je niedriger die Zahl, desto höher die Qualität und desto größer die Filmdatei. Verwendet man stattdessen die -sameq–Option, versucht ffmpeg beim Ergebnis dieselbe Qualität wie das Ausgangsmaterials zu erreichen.

Hinweis

Die Firmware früher Versionen des GP-35 war fehlerhaft, weswegen der Videoplayer nicht in den Vollbildmodus geschaltet werden konnte. Soweit mir bekannt, tauscht der Hersteller diese Geräte innerhalb er Garantiezeit problemlos um.

Navgear GP-43.3

Diese Gerät unterscheidet sich vom GP-43.3. vor allem durch seinen Bildschirm, der eine Auflösung von 480x272 hat.

ffmpeg -i test.avi -s 480x272 -qmax 8 Film.avi

Das Bildschirmformat des GP-35 ist also 4:3, das des GP-43 16:9. Da diese Gerät im Vollbildmodus den Film automatisch skalieren, ohne dass der Benutzer dies vorgeben kann, muss Cropping und Pading verwendet werden um Filme des jeweils anderen Formats verzerrungsfrei darstellen zu können.

Die erzeugten Filme sollten auch auf vielen andern Navigationsgeräten, die Videoplayerfunktionen bieten, wie etwa einige Geräte von TomTom oder Navigon, funktionieren.

Konvertierung für GP2X

ffmpeg -i test.avi -s 320x240 -aspect 1.333 -vcodec mpeg4 -f avi -qmax 8 -vtag xvid Film.avi

Der GP2X kann zur Wiedergabe über ein Adapterkabel auch an den S-Video oder Composite-Videoeingang eines PAL-Fernsehgeräts angeschlossen werden. In diesem Fall ist es sinnvoll die Auflösung mit -s 640x480 zu erhöhen.

Konvertierung für Wii

ffmpeg -i test.avi -s 512x352 -f avi -vcodec mjpeg -acodec pcm_mulaw Film.avi

Die Videodatei Film.avi kann man dann auf eine SD-Karte überspielen und über den Fotokanal der Wii abspielen. Das Abspielen von auf CD oder DVD gebrannten Dateien unterstützt die Wii nicht.

Als Audiocodec kann statt pcm_mulaw auch pcm_s16le oder pcm_u8 verwendet werden. Da der verwendete Videocodec mjpeg nicht sehr effektiv ist, werden die Dateien relativ groß. Andererseits hat die Wii anscheinend Probleme große Dateien abzuspielen. Unter Umständen muss daher ein längerer Film in kleine Stück von etwa 15 Minuten Dauer aufgeteilt werden.

Spielt die Wii einen Film nicht ab, so kann man mit ffmpeg -i test.avi -t 300 -s 512x352 -f avi -vcodec mjpeg -acodec pcm_mulaw Film.avi nur die ersten fünf Minute (also 300 Sekunden) des Films codieren, um zu testen, ob diese erfolgreich abgespielt werden können.

Außerdem funktioniert die Wii nur mit SD-Karten bis höchstens 2GB, nicht mir neueren SDHC-Karten, die mehr Kapazität bieten würden.

Konvertierung für Handies, die das 3gp-Format abspielen können z.B. das CECT W168

ffmpeg -i test.avi -f 3gp -s 176x144 -ar 8000 film.3gp

Zuschneiden und Anpassen

Zuschneiden (Cropping)

Manchmal hat der Ausgangsfilm schwarze Balken, die während des Umwandelns entfernt werden sollen. Das trifft z.B. für manche 16:9-Fernsehendungen, die von Onlinetvrecorder ausgeliefert werden, zu. Das folgende Beispiel wandelt einen 16:9 Film, der mit Balken zu einem 4:3 Film mit der Auflösung 512x384 aufgeblasen wurde, zurück.

ffmpeg -i test.avi -croptop 80 -cropbottom 80 -s 480x272 -aspect 1.7777 Film.avi

Anfügen (Padding)

Manche Abspielgeräte bieten keine Möglichkeit, die Bildgröße während des Abspielens zu beeinflussen, z.B. wird bei den o.g. Navigationsgeräten der Film im Vollbildmodus immer auf den ganzen Bildschirm hochskaliert. Einer Verzerrung (Flachköpfe, Eierköpfe ...) kann man vorbeugen, indem man der Videodatei geeignete schwarze Balken mitgibt. Der folgende Befehl konvertiert einen Film im altertümlichen 4:3-Format so, dass er auf dem 16:9-Bildschirm des GP-43.3 einigermaßen unverzerrt dargestellt wird.

ffmpeg -i test.avi -s 352x272 -padleft 64 -padright 64 -aspect 1.7777 Film.avi

Diese Darstellung mit schwarzen Balken links und rechts bezeichnet man als Pillarbox.

Hinweis

Zu beachten ist, dass Padding immer auf das Ergebnis der Konvertierung wirkt, also immer nach dem Einstellen der Auflösung mit der -s–Option wirkt. Im obigen Beispiel hat das Ergebnis daher die horizontale Auflösung  64+352+64=480Cropping hingegen wirkt so nur, wenn die CroppingOptionen nach der -s–Option in der Kommandozeile angegeben werden. Werden sie vorher angegeben hat daher das Ergebnis nach wie vor die mit der -s–Option angegebene Auflösung.

Widescreen (Breitbild, CinemasCope, Breitwand, u.a. Bildschirmformate)

Neben dem altbekannten Fernsehformat mit einem Breite-zu-Höhe-Verhältnis von vier zu drei (4:3=1,3333) und dem neueren 16:9 (1,7777) ist auch das sehr breite Format 2,35 (47:25) sehr verbreitet. Ohne es hier zu sehr ausbreiten zu wollen eine Beispiel für die Konvertierung eines solchen Films zur näherungsweise richtigen Darstellung auf dem GP-43 (also einem 480x272 Display)
ffmpeg -i test.avi -s 480x208 -padtop 32 -padbottom 32 -qmax 8 -aspect=1,7777 Film.avi
und dem GP-35 (also einem 320x240 Display)
ffmpeg -i test.avi -s 320x128 -padtop 64 -padbottom 48 -qmax 8 -aspect=1,3333 Film.avi

Diese Darstellung mit schwarzen Balken oben und unten bezeichnet man als Letterbox.

Deinterlacing

Falls der Ausgangsfilm Interlacing zeigt (Kammartefakte), können diese mit der Option -deinterlace entfernt werden.

Wer nun doch mehr Hintergrundwissen wünscht, findet hier einen Einstiegspunkt.


Impressum: Die Daten gemäß Teledienstgesetz über den Verantwortlichen für diese Seite finden Sie bei der Internic.

first dot contact (at) i n d i a n (dash) s k e p t i c (dot) c o m  

Letzte Aktualisierung: 29. Mai 2008