Multimedia Kampfmaschine: ffmpeg

von Paul Arnote (parnote)

Übersetzer Rock_Danny
Korrektur gelesen Angel02_de

Letzten Monat warfen wir einen Blick auf das Leistungsvermögen des Kommandozeilen Werkzeuges Mencoder, und wie es Sie dabei unterstützen kann wenn Sie mit Multimedia Dateien arbeiten. Da ist noch ein weiteres Werkzeug in Ihrem Multimedia Depot namens ffmpeg. FFmpeg ist ähnlich wie Mencoder, aber viele empfinden, dass dessen Kommandozeile sehr viel einfacher zu meistern ist.

Die Dokumentation von ffmpeg ist, bestenfalls, Stückwerk. Da ist die Hauptdokumentation welche sie hier finden http://www.ffmpeg.org/ffmpeg-doc.html. Obwohl die Hauptdokumentation einige Beispiele beinhaltet wie ffmpeg zu nutzen ist, führen andere Beispiele, die Sie während einer typischen Internetsuche finden, in verschiedene Richtungen, und die angegebenen Beispiele der Hauptdokumentation tragen nicht viel dazu bei das komplette Leistungsvermögen von ffmeg aufzuzeigen.

Die aktuelle Version von ffmpeg, und die Version in der PCLinuxOS Repository, ist 0.5. Suchen Sie nach Beispielen für ffmpeg, lassen Sie etwas Vorsicht walten. Die Entwickler von ffmpeg sind bekannt dafür das sie einige Kommandozeilenparameter ändern, wenn eine neue Version von ffmpeg veröffentlicht wird. Parameter die in älteren Versionen von ffmpeg noch großartig funktionierten tun es jetzt vielleicht nicht mehr. Die aktuelle Version wurde im März 2009 veröffentlicht. Auf der Suche nach Beispielen versuchen sie auf das Datum der Webseite zu achten. Vielleicht funktionieren sie, vielleicht auch nicht, Ihr Ergebnis kann anders sein.

Befehle

Der erste Befehl, und man sollte es sich angewöhnen diesen einzugeben, bevor man mit einer Multimediadatei arbeitet, ist -i und repräsentiert die Eingabedatei. Die Eingabe dieses Befehls, gefolgt von einer einzigen Multimediadatei ohne das eine Ausgabedatei angegeben wird, zeigt aufgelistet Informationen über diese Datei an. Diese Liste offenbart wichtige Informationen über das verwendete Video und Audioformat. Das folgende ist die Ausgabe der Dateiinformationen des Trailers New Moon, den ich für meine Frau heruntergeladen und konvertiert habe, damit sie ihn auf ihrem Blackberry Storm sehen konnte.

$ ffmpeg -i new-moon-trailer.mp4
FFmpeg version 0.5, Copyright (c) 2000-2009 Fabrice Bellard, et al.
configuration: --prefix=/usr --enable-shared --libdir=/usr/lib --shlibdir=/usr/lib --incdir=/usr/include --enable-postproc --enable-gpl --enable-pthreads --enable-libtheora --enable-libvorbis --enable-x11grab --disable-debug --enable-swscale --enable-libmp3lame --enable-libfaad --enable-libfaac --enable-libx264 --enable-libxvid --enable-nonfree --enable-libamr_nb --enable-libamr_wb
  libavutil 49.15. 0 / 49.15. 0
  libavcodec 52.20. 0 / 52.20. 0
  libavformat 52.31. 0 / 52.31. 0
  libavdevice 52. 1. 0 / 52. 1. 0
  libswscale 0. 7. 1 / 0. 7. 1
  libpostproc 51. 2. 0 / 51. 2. 0
  built on Jun 2 2009 20:09:15, gcc: 4.1.1 20060724 (prerelease) (4.1.1-4pclos2007)
Seems stream 0 codec frame rate differs from container frame rate: 48.00 (48/1) -> 24.00 (24/1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'new-moon-trailer.mp4':
  Duration: 00:02:19.88, start: 0.000000, bitrate: 543 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 480x200, 24 tbr, 24 tbn, 48 tbc
    Stream #0.1(und): Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s
At least one output file must be specified

Die erste Zeile zeigt Ihnen an welche Version von ffmpeg benutzt wird (in diesem Fall 0.5). Was direkt danach folgt ist wie Ihre Version von ffmpeg konfiguriert, sowie wann und wie sie erstellt wurde. Wenn ffmpeg kompiliert wird, müssen Optionen, wie welche Codecs unterstützt werden und welche Bibliotheken beinhaltet sind, spezifiziert werden. Diese Informationen sind für Sie nützlich damit Sie wissen welche Codecs Ihnen zur Verfügung stehen. Die letzten 4 Zeilen werden Sie am meisten Interessieren. Die erste dieser Zeilen zeigt Ihnen was über die Laufzeit der Videodatei (2 Minuten, 19.88 Sekunden), den Startpunkt (normalerweise 0.000000) und die durchschnittliche Bitrate der Videodatei. Die nächste Zeile zeigt den verwendeten Videocodec (h264), die Auflösung der Videodatei (420p) und die Größe des Videobildes (480x200). Die 3 Zeile zeigt Ihnen den verwendeten Audiocodec für den Audiopart der Datei (mp3), die Samplingrate (41.000 Hz), ob es Stereo oder Mono ist, und die Sample Bitrate (128 kb/s).

Das konvertieren von einem in das andere Format ist mit ffmpeg relativ einfach. Schauen Sie sich die Beispiele an.

ffmpeg -i jinglebells.mp3 jinglebells.wav
ffmpeg -i new-moon-trailer.flv new-moon-trailer.avi

Das erste konvertiert die Mp3-Datei, jinglebells.mp3 in eine Wav-Datei gleichen Namens. Das zweite konvertiert die FLV-Datei, new-moon-trailer.flv in eine AVI-Datei mit dem Namen new-moon-trailer.avi. Sie müssen sicher sein dass Sie den -i Parameter verwenden. Es zeigt ffmpeg das die direkt folgende Datei die Eingabedatei ist. Ohne den Parameter -i wird ffmpeg versuchen zu konvertieren, und bezeichnet die Ausgabedatei wie die Eingabedatei. Ffmpeg wird, mit den Standardvorgaben, versuchen so “Verlustfrei” wie möglich zu konvertieren.

Von speziellem Interesse ist das 2 Beispiel oben. Auch wenn es funktioniert, das Ergebnis ist weniger als Überzeugend. Wenn keine anderen Parameter angegeben sind wird ffmpeg, mit dem Standardwert, ein Video mit einer Bitrate von 200kbps erstellen. Das Video wird nicht von sehr guter Qualität sein. Glücklicherweise haben wir doch eine weit bessere Kontrolle über das Endprodukt. Wohlgemerkt, wir können keinen Müll einfügen und einen Diamanten auswerfen. Der alte Spruch: “Müll rein, Müll raus” trifft hier wirklich zu. Und, so lange wir nicht üben, um das Endprodukt besser zu steuern, können wir einen Diamanten eingeben und Müll ausgeben.

Lassen Sie uns, mit veränderten Parametern für das Ausgabe-Video, die Konvertierung von oben wiederholen.

ffmpeg -i new-moon-trailer.flv -b 500000 -s 480x200 -vcodec libxvid -ab 128k -ar 44100 -acodec libmp3lame new-moon-trailer.avi

Lassen Sie uns mal Punkt für Punkt durchgehen was wir hier gemacht haben.
Als Eingabedatei (-i) haben wir new-moon-trailer.flv angegeben. weiterhin haben wir ffpeg angewiesen für das Ausgabevideo eine Video-Bitrate von 500 kb/s (-b 500000) zu verwenden, die Größe zu ändern 480x200 (-s 480x200) unter Verwendung des Xvid-Codecs (-vcodec libxvid), die Sound-Bitrate auf 128kb/s (128k) zu setzen, eine Sound-Sample-Rate von 41,000 Hz (-ar 44100) zu nutzen, dafür den Mp3 Audio-Codec (-acodec libmp3lame) zu verwenden und die Ausgabedatei new-moon-trailer.avi zu nennen. Puh, sind Sie jetzt, nach dem Sie das alles gelesen haben, genauso aus der Puste wie ich, der Sie dadurch geführt hat?

Eigentlich ist es ganz einfach nachdem man es in seine einzelnen Bestandteile zerlegt hat. Was man sich merken sollte ist, das alle Optionen oder Parameter sofort auf den Dateinamen Anwendung finden. Dadurch können Sie Optionen für die Eingabedatei als auch die Ausgabedatei festlegen - auch wenn diese sich ,wenn erforderlich, in der selben Kommandozeile wiederholen. Die Reihenfolge in welcher die Optionen auftauchen ist unwichtig, außer das sie der jeweiligen Datei zugeordnet und voran gestellt sind.

Wenn Sie bei der obigen Kommandozeile aufgepasst haben, ist Ihnen vielleicht etwas anderes aufgefallen. Für die Video-Bitrate (-b 500000) habe ich die komplette Zahl eingegeben. Genauso einfach hätte ich für die Bitrate 500k eintragen können. Das gleiche für die Audio-Bitrate (-ab 128k), ich hätte auch einfach die Bitrate als 128000 angeben können. Wie Sie es eingeben ist Austauschbar.

Sicherlich, es gibt WEIT mehr Optionen als diese die wir hier bis jetzt behandelt haben. Je mehr Sie sich mit ffmpeg beschäftigen, desto mehr realisieren Sie wie mächtig und flexibel es ist und wie viele Möglichkeiten es gibt. Mit diesem Wissen lassen Sie uns noch ein paar weitere Beispiele ansehen. Wenn Sie interessiert sind, eine einfache Suche im Internet wird sehr viel mehr Beispiele hervorbringen als ich Ihnen hier möglicherweise vorstellen kann.

Nehmen wir an, Sie haben gerade eine Datei von YouTube oder MetaCafe gespeichert. Sie schauen sich die Informationen/Spezifikationen der Datei an, und entscheiden das der Audio (oder Video) Part schon in dem Format vorhanden ist wie Sie es wollen. Ffmeg macht es leicht “lass es laufen” und überträgt lediglich das Format welches Sie behalten wollen.

ffmpeg -i rock-and-roll-fail.flv -b 500k -vcodec h264 -s 320x240 -acodec copy rock-and-roll-fail.mp4

Das Obige transkodiert die Eingabedatei rock-and-roll-fail.flv, mit einer Bitrate von 500 kb/s, benutzt den h264 Codec, ändert die Größe des Videos auf 320x240, kopiert die Audiospur ohne sie zu transkodieren und macht daraus eine Ausgabedatei mit dem Namen rock-and-roll-fail.mp4.

Ffmpeg weiß auch wie es Ihr Video für die unterschiedlichen, existierenden optischen Medienformate formatiert

ffmpeg -i st-tos-ep-14.avi -target ntsc-vcd st-tos-ep-14.mpg

Der obige Befehl nimmt die Eingabedatei (st-tos-ep-14.avi) und transcodiert diese in ein Format das zu dem NTSC VCD Standard (-target ntsc-vcd) kompatibel ist. Andere gängige Ziele enthalten svcd, ntsc-dvd, pal-vcd, pal-svcd und pal-dvd.

Sie können ffmpeg auch dazu benutzen den Ton aus einer Video-Datei zu extrahieren.

ffmpeg -i 102209-lecture.avi -vn -ar 44100 -ab 192k -acodec libmp3lame 102209-lecture.mp3

Die -vn Option teilt ffmpeg mit den grafischen Teil der Datei weg zu lassen und erstellt die Mp3-Datei mit den zugewiesenen Optionen.

Sie haben einige lustige Videos die Sie gerne nach YouTube hochladen möchten um Sie mit anderen zu teilen? Mit dem folgenden Befehl können Sie es in das Flash Video (FLV) Format konvertieren.

ffmpeg -i your_movie.avi -ab 56k -ar 44100 -b 200k -r 15 -s 320x240 -f flv output_file.flv

Die Option -r 15 setzt die Bildrate des Videos auf 15 Bilder pro Sekunde. Die -f Option erzwingt die Ausgabe ins FLV Dateiformat.

Ihr Freund in der Band hat einen ganzen Ordner mit Windows Media Audio Dateien (WMA) vom Proben mit der Band. Einige davon hätten Sie gerne. Aber, seit Sie ein Verfechter von FOSS und ein Benutzer von Linux sind, sind Sie gar nicht erfreut darüber diese Dateien in einem unfreien Format zu haben. FFmpeg kommt Ihnen dabei zu Hilfe !

ffmpeg -i tues-band-practice.wma -acodec libvorbis tues-band-practice.ogg

Ohne weitere Optionen anzugeben wird die Ausgabe in der Standard Bitrate von 64 kb/s sein. Wir können diese erhöhen, sagen wir auf 192 kb/s, in dem wir dies ffmpeg mitteilen. 

ffmpeg -i tues-band-practice.wma -acodec libvorbis -ab 192k tues-band-practice.ogg

Zusammenfassung

Wie Sie sehen gibt es viele Möglichkeiten mit ffmpeg, und sicherlich viel, viel mehr als wir hier behandelt haben. Ich möchte Sie dazu anhalten diese Möglichkeiten zu entdecken. Gehen Sie die Dokumentation von ffmpeg durch. Öffnen Sie die man Seiten in dem Sie man ffmpeg in der Kommandozeile eingeben. Suchen Sie einfach nach der Konvertierung die Sie machen möchten. Ohne Zweifel sollten Sie sich die ffmpeg Webseite aufrufen, http://www.ffmpeg.com/index.html, und sich mal umschauen. Ich hab noch nicht mal an der Oberfläche gekratzt was möglich ist mit diesem mächtigen Multimedia Werkzeug, und ich hoffe, ich konnte zeigen das es sehr viel einfacher ist als Sie am Anfang gedacht haben.