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. Hauptsache das Ergebnis ist einigermaßen anseh- und hörbar.

Die Eingangsdatei und deren Format ist fast beliebig. Symbolisch wird hier meist test.avi verwendet. Das könnte natürlich genauso gut test.mp4, test.flv u.s.w. sein. Entsprechend funktioniert die Konvertierung eines Strems, der von einer Videoquelle, z.B. einer Grabber-Karte geliefert wird.

Voraussetzungen

Es wurden die ffmpeg-Versionen, die mit den Linux-Distributionen SuSE 10.1 und openSuSE 10.3 geliefert werden, verwendet. Allgemeines zur Versionsvielfalt von ffmpeg und eine systematischer Einführung hier.

Um die folgenden Anleitungen verwenden zu können sollten Sie wissen, wie sie unter Linux Programme 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. Bei neueren ffmeg-Versionen wird die Option -title nicht mehr unterstützt, sondern es muss die Option -metadata title="Filmtitel ohne Umlaute" verwendet werden.

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-35 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äte 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.

Statt die ersten Minuten zu verwenden kann man mit -ss eine Startzeit angeben ffmpeg -i test.avi -ss 01:30:00 -s 512x352 -f avi -vcodec mjpeg -acodec pcm_mulaw Film.avi Das Beispiel setzt die Startzeit auf eine Stunde und 30 Minuten und konvertiert nur den späteren Teil des Films.

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

Die Qulität der über den Fotokanal abspielbaren Filme ist, trotzdem die Dateien groß werden, niedrig. Wer nicht nur ganz selten kurze Filme abgespielen will, sollte die Verwendung von Homebrew-Software in Betracht ziehen. Bedauerlicherweise unterstützt Nintendo die Bemüngen der Programmierer nicht, sondern behindert sie sogar, so dass man hierzu Sicherheitslücken der Konsole benutzen muss.

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

ffmpeg -i test.avi -f 3gp -s 176x144 -ac 1 -ar 8000 -r 24 film.3gp

Das CECT P168 kann auch mp4 Dateinen abspielen, allerdings nur mit geringer Framerate, wodurch der Film nicht flüssig läuft, sondern ein Diashoweffekt entsteht. Wählt man die Framerate zu hoch, so werden Bild und Ton asynchron. ffmpeg -i test.mp4 -r 6 -s 240x192 -b 768 -ar 24000 -ab 32 Film.mp4
Die Auflösung 240x192 ist geeignet, wenn außer dem Film die Bedienelemente des Videoplayers angezeigt werden sollen. Die volle Auflösung des P168 beträgt 320x240.

Konvertierung für Palm Pre

ffmpeg -i test.avi -s 480x320 film.mp4

Konvertierung für S1MP3-Player, die das AMV-Format abspielen können z.B. die Player von Kingzon

Hierfür wird eine spezielle ffmpeg-Version benötigt.

Konvertierung von 3D in 2D-Formate etwa für Fuji Fine Pix REAL 3D

Aus den 3D-Filmen der Kamera kann ein 2D-Filme extrahiert werden.

ffmpeg -i DSCF0001.AVI -r 14.985 film-2D.avi

Dabei wird standargemäß der erste der beide Videsstremas verwendet und der zweite verworfen.

Input #0, avi, from 'DSCF0001.AVI':
  Stream #0.0: Video: mjpeg, yuvj422p, 1280x720, 24.00 fps(r)
  Stream #0.1: Audio: pcm_s16le, 48000 Hz, stereo, 1536 kb/s
  Stream #0.2: Video: mjpeg, yuvj422p, 1280x720, 24.00 fps(r)
...
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1

Siehe auch die Ausführungen weiter unten zur Zuordnung von Streams mittels -map-Option, um andere Streams zu extrahieren. Die weiteren Optionen richten sich nach dem Gerät, mit dem die Filme angezeigt werden sollen.

Zuschneiden und Anpassen, Bildformat ändern, schwarze Ränder entfernen oder hinzufügen

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 Cropping–Optionen 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:20) 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.

Hier findet sich eine Rechenhilfe, bei der man die Maße der Quelldatei, des Films darin und die Maße der Zieldatei angeben und sich daraus die Parameter für eine optimale Konvertierung mittels ffmpeg errechnen lassen kann.

Problembehandlung

Deinterlacing

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

Audiokanäle mischen

Bei der Konvertierung von Filmen, die 5.1 Surround_Sound und damit also sechs Audiokanäle enthalten in Filme mit Stereoton können mit der Option -ac 2 die Kanäle gemischt werden. Wird die Option nicht angegeben, aber ein Codec verwendet, der in der Ausgabedatei keinen Surround Sound unterstützt, z.B. mp2 so erhält man die Fehlermeldung Encoding 6 channel(s) is not allowed in mp2

Entsprechend kann mit der Option -ac 1 ein Film zu Mono konvertiert werden.

Streams auswählen

Manche Eingabeformate enthälten mehrer Streams, z.B. mehrere Audiostreams für verschiedene Sprachen. Das folgende Beispiele zeigt die Ausgabe von ffmpeg bei einer Datei mit einem Video- und sechs Audiostreams

Input #0, mpeg, from '/nfs4nas/video/test.mpeg2':
  Duration: 01:06:46.43, start: 0.280000, bitrate: 7423 kb/s
    Stream #0.0[0x1e0]: Video: mpeg2video, yuv420p, 720x576 [PAR 64:45 DAR 16:9], 7800 kb/s, 25.00 tb(r)
    Stream #0.1[0x80]: Audio: liba52, 48000 Hz, stereo, s16, 192 kb/s
    Stream #0.2[0x81]: Audio: liba52, 48000 Hz, stereo, s16, 192 kb/s
    Stream #0.3[0x82]: Audio: liba52, 48000 Hz, stereo, s16, 192 kb/s
    Stream #0.4[0x83]: Audio: liba52, 48000 Hz, stereo, s16, 192 kb/s
    Stream #0.5[0x84]: Audio: liba52, 48000 Hz, stereo, s16, 192 kb/s
    Stream #0.6[0x85]: Audio: liba52, 48000 Hz, stereo, s16, 192 kb/s
Output #0, avi, to './Film_mit_einem_Audiostream.avi':
    Stream #0.0: Video: mpeg4, yuv420p, 480x272 [PAR 137:136 DAR 2055:1156], q=2-6, 200 kb/s, 25.00 tb(c)
    Stream #0.1: Audio: mp2, 48000 Hz, stereo, s16, 64 kb/s

Will man nur einzelne Streams auswählen (z.B. weil das Ausgabeformat weniger Streams als das Eingabeformat unterstützt), so kann man das mit der map-Option von ffmpeg erreichen. Beispielsweise kann man aus der obigen Datei den ersten (und hier einzigen) Videostream mit -map 0.0 auswählen sowie den letzten Audiostream mit -map 0.6.

Die Befehlszeile, die einen Film erzeugt, der nur den sechsten Audiostream, also den siebten Stream in der Datei enthält lautet also:

ffmpeg -i test.mpeg2 -map 0.0 -map 0.6 -s 480x272 -aspect 1.7777 -qmax 8 Film_mit_einem_Audiostream.avi

Sonstige Fehlermeldung und Fehlerbehebungen

... does not support sampling rate ...

Eine für das Ausgabeformat ungeeignete Audiosamplingrate, die zu Fehlern wie „ ... sampling rate is not allowed ...” oder „... does not support sampling rate ...” führt kann dadurch behoben werden, dass die Samplingrate für die Ausgabe mit der Option -ar explizit angegeben wird. Die Angabe erfolgt in Hertz z.B. -ar 24000.

unrecognized option '-title'

In neuern ffmpeg Versionen funktioniert die Option -title nicht mehr, sondern liefert die beschreiben Fehlermeldung. Anstatt -title "Filmtitel ohne Umlaute" muss hier -metadata title="Filmtitel ohne Umlaute" verwendet werden.

Video-Streams in einem Schritt einlesen, aufzeichnen und konvertieren

ffmpeg-Befehlszeile um einen 16:9 Film über eine WinTV-Grabber-Karte einzulesen und als Video-Datei für GP-43 zu speichern. Mit Hilfe eines Fernsehprogramms wie xawt oder kwintv muss zuerst der richtige Eingang der Grabber-Karte (z.B. Composite, oder TV) sowie die richtige Bildnorm (PAL) ausgewählt werden

ffmpeg -vd /dev/video0 -ad /dev/dsp -s 480x272 -qmax 8 -aspect 1.7777 Film.avi


Selbstproduziertes

Um einen eigenen Titelvorspann zu produzieren kann eine Folge von Bildern in einen Film umgewandelt werden, wenn diese Bilder anhand der Dateinamen durchnummeriert sind, also etwa Bild1.png, Bild2.png etc.

ffmpeg -f image2 -i bild%d.png -r 20000 -qmax 4 pspot.mp4


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 Denic.

oberlehrer (at) dieserdomaindiedaobensteht

Letzte Aktualisierung: 19. Juli 2011