ffmpeg

ffmpeg wird in neueren Distributionen ersetzt durch libav-tools.

Der Aufruf erfolgt nun durch avconv

Das Programm winff bietet eine komfortable grafische Oberfläche für ffmpeg.

Informationen über Files und Codecs

  • ffmpeg -i input-file zeigt Informationen über das File an. Besser jedoch ist mediainfo (die Installation und Verwendung gibts in einem extra-Kapitel).
  • ffmpeg -formats zeigt alle für die Kodierung möglichen Audio- und Videoformate an.
  • Um eine simple Liste von Video-Files in einem Verzeichnis zu erstellen, die neben dem Dateinamen Informationen über die Auflösung und den verwendeten Video-Codec beinhaltet, hilft folgende Pipe:
    # for i in *.flv; do ffmpeg -i "$i" 2> Tempfile; egrep -i "flv|video" < Tempfile >> Liste.txt; echo "-----------------------------------------------" >> Liste.txt; done durch die for-Schleife wird eine Liste sämtlicher Files mit der Endung .flv (Flash-Files) im momentanen Verzeichnis erstellt und die einzelnen Dateinamen an ffmpeg weitergereicht. ffmpeg öffnet die Video-Files und gibt so auf dem Standard-Fehlerkanal Informationen über die Auflösung und den verwendeten Codec wieder, welche in der Datei Tempfile gespeichert werden. Da die Ausgabe von ffmpeg noch viel mehr beinhaltet, wird im nächsten Schritt mittels egrep die relevanten Informationen wie der Dateiname (durch den Suchbegriff flv) und die Eckdaten des Videos (durch den Suchbegriff video) herausgefiltert und in die Datei Liste.txt geschrieben. Dabei wird nach jedem File zur besseren Übersicht mittels echo eine Trennlinie in die Datei geschrieben. Alternativ könnte man auch mittles echo $’\n‘ einen Zeilenvorschub auslösen.

Umwandlungsbeispiele

  • ffmpeg -i testfile.flv -vcodec mjpeg -b 7000k -acodec copy testfile.avi kodiert ein Flash-File in ein MJPEG-File mit 7000 Kbit/sec und kopiert das Audio lediglich, also ohne Konvertierung.
    -i = Input-File
    -vcodec = Wahl des zu verwendenden Video-Codecs
    -b = Video-Bitrate (hier 7000 Kbit/sec)
    -acodec = Wahl des Audio-Codecs (hier copy, also unverändert kopieren)
  • ffmpeg -i testfile.flv -an -vcodec bmp testfile.avi wandelt ein Flash-File in unkomprimierte BMP-Bilder, ohne Audio.
    -an = Kein Audio verwenden.
    Leider führt der Vorgang ein AVI-File mit unkomprimierten BMP-Bildern zu erzeugen dazu, daß sich das Bild verschiebt. Den Grund dafür habe ich leider nicht herausgefunden. Möchte man in ein verlustfreies Format wie eben Vollbilder konvertieren, ist folgender Codec daher besser: ffmpeg -i testfile.flv -vcodec huffyuv -acodec pcm_s16le testfile.avi Konvertiert ein Flash-File in das verlustfreie huffyuv-Format (der Huffman-Codec) mit unkomprimiertem Audio (wav). pcm_s16le = signed 16-bit little-endian PCM.

Audio aus Video extrahieren:
ffmpeg -i testfile.flv -vn testfile.wav -vn = Disable video recording, also kein Bild nur der Ton.

DVD-Konvertierung
ffmpeg enthält vorgefertigte Templates für die gängigen Formate, wie z.B. vcd (Video-CD), svcd (Super-Video-CD), dvd, dv, dv50, pal-vcd, ntsc-svcd, usw. Man muß also nicht sämtliche Einstellungen für eine DVD wie Auflösung, Bitrate, Video-Codec, Audio-Codec, usw. von Hand einstellen, sondern es genügt die Angabe eines Templates und alle weiteren erforderlichen Einstellungen werden vollautomatisch vorgenommen, z.B.:

  • ffmpeg -i Input.flv -target dvd Output.mpg
  • In manchen Fällen ist es sicherer oder sinnvoller die Art des DVD-Formats (ob PAL oder NTSC) mitanzugeben: ffmpeg -i Input.flv -target pal-dvd Output.mpg wandelt ein Flash-File in das DVD-Format, wobei das Audio sogar in AC3 konvertiert wird. Leider habe ich hier einen kleinen Fehler festgestellt, da ohne Angabe der aspect ratio einfach keine vernünftige Ratio gespeichert wird. In manchen Anzeigeprogrammen steht da was von „Standard“ und in wieder Anderen was von „5/4“. Daher ist es sinnvoller die korrekte Ratio (ob 4:3 oder 16:9) mitanzugeben: ffmpeg -i Input.flv -target pal-dvd -aspect 4:3 Output.mpg möchte man die Bitrate auch noch verändern: ffmpeg -i Input.flv -target pal-dvd -aspect 4:3 -b 3000k Output.mpg Hat man die aspect ratio vergessen, so kann man nachträglich ohne Neukodierung die ratio verändern mittels mpgtx. # mpgtx -j -A2 Input.mpg -o Output.mpg Dabei steht A2 für die Ratio 4:3. Gültige Werte Ax sind 1,2,3,4 für die Proportionen 1:1, 4:3, 16:9 oder 2,2:1.Etwas kniffliger wird es, wenn das Ursprungs-File nicht die korrekte Auflösung hat und man die Größe verändern muss.Hier ein Beispiel mit einem Ursprungs-File das eine Auflösung von 1280×720 (HD) hat und in die DVD-Auflösung von 720×576 konvertiert werden soll und als besondere Schwierigkeit, nicht anamorph! Da das HD-File in der Ratio 16:9 vorliegt müssen wir für die korrekte 4:3 Bildgröße oben und unten schwarze Balken anfügen, man nennt das auch Letterboxed. Würden wir keine Resize-Optionen angeben, würde zwar das File auch in die DVD-Auflösung resized werden, das Bild würde aber verzerrt werden – in dem Fall anamorph gespeichert. Hier nun mit den schwarzen Balken: ffmpeg -i Input.flv -target dvd -padtop 72 -padbottom 72 -s 720x432 Output.mpg

    Wie man erkennen kann, resizen wir auf die Größe 720×432 und fügen dann jeweils oben und unten 72 Pixel hinzu, was zur finalen Auflösung von 720×576 Bildpunkten führt. Zu beachten ist hier die Reihenfolge der Optionen, denn kommt die Resize-Funktion (-s) vor der „target dvd“-Funktion, hat der Resize-Faktor mit der Höhe 432 keine Wirkung und das Bild wird auf eine Größe von 720×720 (DVD-Höhe 576+72+72=720) skaliert! Anders wenn wir kein Template verwenden, dann gibt es keine einzuhaltende Reihenfolge: ffmpeg -i Input.flv -padtop 72 -padbottom 72 -s 720x432 -vcodec huffyuv -acodec pcm_s16le Output.avi
    das könnte auch genauso heißen ffmpeg -i Input.flv -s 720x432 -padtop 72 -padbottom 72 -vcodec huffyuv -acodec pcm_s16le Output.avi und macht keinen Unterschied.

  • Ganze Ordner mit Hilfe einer for-Schleife umwandeln
    Möchte man einen ganzen Ordner auf einmal umwandeln, hilft folgende for-Schleife: for i in *.avi; do ffmpeg -i "$i" -target pal-dvd -aspect 4:3 "`basename "$i" .avi`".mpg; done oder um bei einen ganzen Ordner voller mpg-Files die aspect ratio zu ändern: for i in *.mpg; do mpgtx -j -A2 "$i" -o /anderes/Verzeichnis/"$i"; done