Hier einige Beispiele zur Konvertierung von Video-Dateien mit ffmpeg.
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.
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.
Sie verwenden diese Anleitung auf eigene Gefahr unter dieser Lizenz.
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.
Hier ist mir nur ein two-pass-Verfahren bekannt, dass verwendbare Ergebnisse liefert.
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
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.
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.
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.
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.
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.
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.
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.
ffmpeg -i test.avi -s 480x320 film.mp4
Hierfür wird eine spezielle ffmpeg-Version benötigt.
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.
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
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.
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=480. Cropping
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.
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.
Falls der Ausgangsfilm Interlacing zeigt (Kammartefakte),
können diese mit der Option -deinterlace entfernt
werden.
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.
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
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.
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.
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
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.
Letzte Aktualisierung: 19. Juli 2011