Wenn das Smartphone Videos in einem merkwürdigen Format aufzeichnet, mehrere Clips in kompakter Form auf die eigene Website sollen oder das Videoschnittprogramm nur Bildmatsch produziert, dann schlägt die Stunde der Werkzeuge aus dem Ffmpeg-Paket.
Ffmpeg wandelt Video- und Audio-Material in unzählige bekannte und weniger bekannte Formate um. Dabei dürfen Sie an zahlreichen Stellschrauben drehen, etwa die Auflösung verändern oder die Ausgabequalität zugunsten einer kleineren Dateigröße heruntersetzen. Das zum Ffmpeg-Paket [1] gehörende Kommandozeilenwerkzeug lässt sich zudem elegant in eigene Shell-Skripte einbinden.
Auf diese Weise konvertieren Sie etwa alle Urlaubsvideos in einem Rutsch ins WebM-Format und laden sie auf Ihre Website hoch. Sollte ein Mediaplayer ein Video nicht öffnen wollen, ermittelt schnell ein weiteres kleines Werkzeug aus dem Ffmpeg-Paket, in welchem wirren Format das Smartphone die Filme aufgezeichnet hat.
Auch einige Videoschnittprogramme und Videokonverter lassen den fertig geschnittenen Film einfach von Ffmpeg im gewünschten Format ausgeben. In den dabei bereitgestellten Einstellungen finden sich Kenner von Ffmpeg wesentlich schneller zurecht. Der Videokonverter Tragtor setzt sogar zwingend Wissen über Ffmpeg voraus. Mitunter dürfen Sie sogar selbst zusätzliche Parameter an Ffmpeg durchreichen. Das hilft insbesondere dann weiter, wenn die vom Schnittprogramm vorgegebene Bildqualität nicht ausreicht oder Sie ein spezielles exotisches Format benötigen. Das Wissen um die Bedienung von Ffmpeg kann folglich in mehreren Lebenslagen helfen und vor allem zu ansehnlicheren Videos führen.
Informationszentrum
Viele Distributionen bieten Ffmpeg in ihren Repositories an. Produziert der Aufruf ffmpeg auf der Kommandozeile nur einen Fehler, zücken Sie einfach Ihren Paketmanager und installieren Ffmpeg nach. Meist steckt es im Paket ffmpeg.
Wenn Sie nicht wissen, in welchem Format Ihr Smartphone, Ihre Kamera oder Ihr Recorder Videos aufzeichnen, hilft das Kommandozeilenwerkzeug Ffprobe weiter. Es liefert zahlreiche Informationen über eine Video- oder Audio-Datei. Deren Namen übergeben Sie dazu im Parameter -i:
$ ffprobe -i video.mp4
Den oberen Teil der Ausgaben dürfen Sie getrost ignorieren: Dort zeigt das Tool lediglich an, wie es übersetzt wurde. Den Codec, die Laufzeit und weitere Informationen finden Sie unterhalb von Input. Interessant sind vor allem die Angaben in den mit Stream #0 beginnenden Zeilen (Abbildung 1).

Abbildung 1: Dieses mit dem Codec H.264 im sogenannten Baseline-Profil erstellte Video läuft 22 Sekunden (Duration) mit 25 Bildern pro Sekunde (25 fps). Die Tonspur nutzt den AAC-Codec, verwendet 48?000 Hz und liegt in Stereo vor.
Aufgegabelt
Nach internen Meinungsverschiedenheiten spalteten sich 2011 einige Ffmpeg-Entwickler mit ihrem Fork Libav ab. Zu dem wechselten einige namhafte Distributionen, wie etwa Debian und Ubuntu. Mittlerweile erfolgt jedoch wieder eine Rolle rückwärts: Aktuelle Ubuntu-Versionen nutzen wieder standardmäßig Ffmpeg. Netterweise arbeitet Libav weitgehend kompatibel zu Ffmpeg. Sofern in der von Ihnen verwendeten Distribution Libav zum Einsatz kommt, ersetzen Sie in allen Befehlen lediglich ffmpeg durch avconv und ffprobe durch avprobe.
Chamäleon
Ffmpeg wandelt im Handumdrehen jede Video- oder Audio-Datei um. Im Beispiel aus der ersten Zeile von Listing 1 macht es aus einem MP4- ein WebM-Video. Das Werkzeug knöpft sich die Video-Datei hinter -i vor, das konvertierte Video landet in der Datei out.webm. Diesen Befehl können Sie wie auch alle folgenden in Shell-Skripte einbinden. Auf diese Weise konvertieren Sie etwa in einem Rutsch alle MP4-Videos im aktuellen Verzeichnis (Listing 1, Zeile 2).
Listing 1
$ ffmpeg -i video.mp4 out.webm
$ for v in *.mp4; do ffmpeg -i "$v" "${v%.mp4}.webm"; done
$ ffmpeg -i video.mp4 -c:v libvpx -c:a libvorbis out.webm
$ ffmpeg -i video.webm -c:v copy -c:a libvorbis out.webm
In jedem Fall errät Ffmpeg anhand der Dateiendungen, welche Codecs und Dateiformate es verwenden muss. Bei der Konvertierung orientiert es sich zudem an den Vorgaben des Ausgangsvideos oder nutzt im Zweifelsfall Standardeinstellungen (Abbildung 2). Im Beispiel aus der zweiten Zeile von Listing 1 komprimiert Ffmpeg das Video automatisch mit dem Codec VP9 und den Ton mit dem Opus-Codec.
![Abbildung 2: Da hier nicht explizit eine Bitrate vorgegeben wurde, wählt Ffmpeg einfach selbst eine. Die Verarbeitung lässt sich jederzeit mit [Q] abbrechen.](https://www.linux-community.de/wp-content/uploads/2017/10/b02-ffmpeg_encoding_auto-300x211.jpg)
Abbildung 2: Da hier nicht explizit eine Bitrate vorgegeben wurde, wählt Ffmpeg einfach selbst eine. Die Verarbeitung lässt sich jederzeit mit [Q] abbrechen.
Die zu verwendenden Codecs können Sie auch selbst vorgeben. Das ist nützlich, wenn Sie den älteren VP8-Codec bevorzugen und den Ton mit dem Vorbis-Verfahren komprimieren möchten (Listing 1, Zeile 3). Der Parameter -c:v verrät den Video-Codec, analog folgt hinter -c:a der Codec für den Ton. libvpx steht dabei für den VP8-Codec, libvorbis für Vorbis. Der VP9-Codec trägt den Namen libvpx-vp9, Opus kennt Ffmpeg unter der Bezeichnung libopus. Google empfiehlt mittlerweile das Duo aus VP9- und Opus-Codec, wenngleich auf Youtube noch VP8 und Vorbis zum Einsatz kommen.
Welche Codecs Ihre Ffmpeg-Installation kennt, verrät der Aufruf von ffmpeg -encoders (Abbildung 3). Ein V am Zeilenanfang weist auf einen Video-Codec hin, analog kennzeichnet ein A einen Audio-Codec. Vorsicht ist bei Codecs geboten, die zusätzlich ganz links mit einem X markiert sind: Sie gelten noch als experimentell, die erzeugten Videos könnten folglich unbrauchbar sein.

Abbildung 3: Die Namen der unterstützten Codecs für die Parameter -c:v und -c:a stehen in der zweiten Spalte.
Ffmpeg kann mehr Formate lesen als ausgeben. Eine entsprechende Liste liefert ffmpeg -decoders. Möchten Sie das Video oder den Ton unverändert übernehmen, verwenden Sie als Codec copy. Damit lässt sich beispielsweise explizit nur der Ton mit einem anderen Codec (stärker) komprimieren (Listing 1, Zeile 4). Sämtliche Parameter müssen immer zwischen der Ausgangsdatei (-i video.mp4) und der auszugebenden Datei (out.webm) stehen. Vor -i sind nur spezielle Parameter erlaubt, die sich auf die Originaldatei beziehen, nach der auszugebenden Datei dürfen grundsätzlich keine Parameter folgen.
Anhand der Dateiendung errät Ffmpeg auch das Dateiformat. Im Beispiel landen das kodierte Video nebst Ton in einer WebM-Datei. Das Format legen Sie im Bedarfsfall explizit mit dem Parameter -f fest. ffmpeg -formats verrät die unterstützten Dateiformate.
In großen Raten
Die von Ffmpeg automatisch gewählten Einstellungen führen nicht immer zu ansehnlichen Ergebnissen. An der Qualität schrauben Sie mit weiteren Parametern. Im Beispiel aus Listing 2 kodiert Ffmpeg das Video wieder mit dem VP9-Codec. Er verwendet eine variable Bitrate: Ist auf einem Bild wenig los, komprimiert es Ffmpeg stärker als Bilder mit feinen Details. Ffmpeg versucht dabei, möglichst die hinter -b:v vorgegebene Bitrate einzuhalten. Im Beispiel beträgt diese Zielrate 1000 kbit/s.
Listing 2
$ ffmpeg -i video.mp4 -c:v libvpx-vp9 -b:v 1000K -threads 2 -c:a libopus -b:a 64k -f webm out.webm
Als Faustregel gilt: Je höher die Bitrate, desto höher die Qualität, aber desto größer auch später die Datei. Anstelle der durchschnittlichen Bitrate können Sie auch die zu erreichende Bildqualität vorgeben. Dazu verwenden Sie die beiden Parameter -crf 30 -b:v 0. Hinter -crf steht eine Zahl zwischen 0 und 63: Sie repräsentiert die Qualität. Je kleiner der Wert, desto höher die Bildqualität, aber desto größer wird auch die spätere Datei. Die Ffmpeg-Entwickler empfehlen einen Wert von 31 für Full-HD-Videos. In jedem Fall muss -b:v 0 zwingend 0 sein.
Des Weiteren können Sie noch eine konstante Bitrate erzwingen. Dazu verwenden Sie die drei Parameter -minrate 1M -maxrate 1M -b:v 1M. Der erste Parameter legt die minimale Bitrate fest, die Ffmpeg nicht unterschreiten darf, -maxrate analog die maximale Bitrate. Haben alle Parameter den gleichen Wert, erzwingen Sie eine konstante Bitrate – im Beispiel von 1 Mbit/s. Die Ffmpeg-Entwickler empfehlen im Fall des VP9-Codecs, die Qualität als Wert vorzugeben und eine konstante Bitrate nur dann zu wählen, wenn man eine ganz bestimmte Dateigröße benötigt.
Abschließend kennt VP9 noch einen Lossless-Modus, in dem es die einzelnen Bilder verlustfrei komprimiert. Ihn aktivieren Sie via -lossless 1. Analog zu -b:v legt -b:a die Bitrate der Audiospur fest, die im Beispiel 64 kbit/s beträgt.
Spezialitäten des Hauses
Der Parameter -threads 2 veranlasst Ffmpeg, seine Berechnungen in zwei Threads aufzuteilen, die das Betriebssystem auf mehrere Prozessoren verteilen kann. Hinter -threads geben Sie die Anzahl der verfügbaren CPU-Kerne minus 1 an. Lassen Sie den Parameter weg oder setzen ihn auf 0, dann versucht Ffmpeg, selbst die optimale Anzahl an Threads zu ermitteln.
Das Vorgehen aus dem Beispiel mit VP9 lässt sich auf andere Codecs übertragen. Jeder Codec interpretiert jedoch einige Parameter etwas anders und kennt mitunter auch eigene Einstellungen. Mit dem Befehl aus Listing 3 erzeugen Sie beispielsweise ein MP4-Video mit H.264-Codec.
Listing 3
$ ffmpeg -i video.avi -c:v libx264 -preset slow -crf 22 -f mp4 out.mp4
-crf legt wieder die Qualität fest, wobei hier 1 für die beste und 51 für die schlechteste Qualität steht. 0 würde einen Lossless-Modus aktivieren. Der Parameter -preset wählt einen Satz Voreinstellungen für die übrigen vom Codec unterstützten Parameter. Er kennt die Varianten ultrafast, superfast, veryfast, faster, fast, medium, slow, slower und veryslow. slow liefert dabei eine bessere Qualität als superfast.
Des Weiteren beherrscht der H.264-Codec sogenannte Profile und Level. Hin und wieder muss man dieses Duo manuell vorgeben, beispielsweise wenn ein Smartphone oder Gerät dies fordert. Ein Profil geben Sie dann über -profile:v vor, als Werte kommen baseline, main, high, high10, high422 und high444 infrage. Den Level wählen Sie per -level aus. Für die meisten Fälle sollte das baseline-Profil und -level 3.0 passen.
Wie dieses kleine Beispiel zeigt, benötigen Sie bei einigen Codecs Wissen um ihre jeweilige Arbeitsweise. Die für Ihren Codec gültigen Parameter finden Sie im Ffmpeg-Wiki im Abschnitt Encoding [2] sowie in der offiziellen Ffmpeg-Dokumentation [3].
Spalt-Maße
Wie das Beispiel aus der ersten Zeile von Listing 4 demonstriert, können Sie auch gezielt die Tonspur aus einem Video abspalten und etwa in einer MP3-Datei ablegen. Der Parameter -ar stellt hier eine Abtastrate von 44?100 Hz sicher, -b:a nagelt die Datenrate auf 124 kbit/s fest. Mit -ar können Sie auch sicherstellen, dass die Audiospur eines Videos eine ganz bestimmte Abtastrate aufweist.
Listing 4
$ ffmpeg -i video.mp4 -c:a libmp3lame -ar 44100 -b:a 124k audio.mp3 $ ffmpeg -i video.mp4 -s 720x576 -aspect 16:9 -r 25 kleiner.webm
Die Größe eines Videos ändert der Parameter -s, das Seitenverhältnis -aspect (erlaubte Werte sind 4:3, 16:9, 1.3333 oder 1.7777) und -r die Framerate in Bildern pro Sekunde. Der Befehl aus der zweiten Zeile von Listing 4 erzeugt ein SD-Video im 16:9-Format mit 25 Bildern pro Sekunde.
Klickibunti
Sowohl diverse Videoschnittprogramme als auch Videokonverter spannen Ffmpeg für ihre Zwecke ein. Zu den Letzteren gehören vor allem Handbrake [4], Tragtor [5] und WinFF [6]. Die von diesen Programmen angebotenen Einstellungen entsprechen durchweg den jeweiligen Kommandozeilenparametern (Abbildung 4).

Abbildung 4: Wie viele andere Videokonverter fungiert Tragtor nur als grafische Benutzeroberfläche für Ffmpeg. Die verfügbaren Einstellungen auf dem Register Format entsprechen daher den Ffmpeg-Parametern.
So bietet Ihnen Tragtor auf dem Register Format neben Videoeinstellungen unter Codec erzwingen die von Ffmpeg genutzten Codec-Namen an. Tragtor lässt sich folglich nur sinnvoll nutzen, wenn Sie wissen, dass sich hinter libvpx-vp9 der WebM-Codec VP9 versteckt. Unter Eigene Optionen dürfen Sie weitere eigene Ffmpeg-Parameter ergänzen, die Tragtor dann an Ffmpeg durchreicht. Gleiches erlaubt WinFF auf dem Register Ffmpeg, das Sie gegebenenfalls via Optionen hervorholen (Abbildung 5).

Abbildung 5: WinFF zeigt auf dem Register Ffmpeg den kompletten Ffmpeg-Befehl an, mit dem es das Video gleich konvertiert.
Auch die Videoschnittprogramme Flowblade [7], Kdenlive [8], Losslesscut [9], OpenShot [10] und Shotcut [11] nutzen Ffmpeg. Losslesscut kann Videos lediglich beschneiden, wobei Ffmpeg im Hintergrund einfach die entsprechenden Video- und Audio-Daten kopiert. In allen anderen Videoschnittprogrammen wählen Sie zunächst eine Vorlage (meist als Profil bezeichnet), wie etwa DV/DVD PAL (720×576). Dieses setzt dann alle Parameter passend für Ffmpeg – im Beispiel für ein DVD-Video.
Die Vorlagen lassen sich anpassen und um eigene ergänzen. In Flowblade und OpenShot dürfen Sie dabei nur ausgewählte Ffmpeg-Einstellungen anpassen, wie etwa die Auflösung des Videos. Wollen Sie die Einstellungen ändern, sollten Sie möglichst nicht die mitgelieferten Vorlagen anpassen, sondern stets eine neue Vorlage anlegen. Auf diese Weise kehren Sie bei Bedarf wieder zur Vorgabe zurück und können zudem immer nachschlagen, welche Einstellungen die Entwickler des Videoschnittprogramms genutzt haben.
Kdenlive
Besonders umfangreiche Änderungen an den Ffmpeg-Einstellungen erlauben Kdenlive und Shotcut. In Kdenlive gibt es gleich mehrere Stellen, an denen Sie die Ffmpeg-Parameter anpassen können. Zunächst dürfen Sie via Project | Transcode einen Clip in ein anderes Dateiformat konvertieren. Um dort eine eigene Vorlage zu ergänzen, rufen Sie im Hauptmenü Einstellungen | Kdenlive einrichten … auf und wählen links den Punkt Transcode.
Legen Sie jetzt rechts die Vorlage fest, die dem gewünschten Format besonders nahekommt, und geben Sie der Vorlage im entsprechenden Eingabefeld einen neuen Namen. Unter Extension tragen Sie die Dateinamenserweiterung ein, die später die fertige Datei erhalten soll. Unter Parameters hinterlegen Sie schließlich die an Ffmpeg zu übergebenden Parameter (Abbildung 6). Fügen Sie das neue Profil via Add Profile hinzu.
Sobald Sie den Film geschnitten haben, geben Sie ihn mit einem Klick auf Render aus. Im neu erscheinenden Fenster wählen Sie die Vorlage, die Ihren Vorstellungen am nächsten kommt. Klicken Sie dann auf dem Register Render Project neben Format auf die Schaltfläche mit dem Blatt Papier. Geben Sie der neuen Vorlage unter Profile name eine Bezeichnung, und tragen Sie im entsprechenden Feld die gewünschten Parameter ein.
Sobald Sie Effekte auf den Film anwenden, berechnet Kdenlive eine Vorschau. Das dabei zum Einsatz kommende Format wählen Sie unter Project | Project Settings auf dem Register Settings unter Preview profile. Sie dürfen dort selbst neue Profile hinzufügen, indem Sie rechts neben der Dropdown-Liste auf das Symbol mit der Liste klicken. Wählen Sie dann das Profil, das Ihren Vorstellungen am nächsten kommt. Klicken Sie auf das Plus-Symbol, geben Sie dem Profil einen neuen Namen, passen Sie die Parameter an, und vergeben Sie die korrekte Dateinamenserweiterung. Lassen Sie das Profil Speichern.
Wenn Sie Proxy-Clips verwenden, ist unter Project | Project Settings auf dem Register Settings der entsprechende Bereich Proxy clips aktiviert. Auch hier können Sie das Format selbst bestimmen, indem Sie rechts neben Encoding profile auf das Symbol mit der Liste und dann im neuen Fenster auf das Plus-Symbol klicken. Vergeben Sie dann einen Profilnamen, die entsprechenden Parameter und eine Endung.
Shotcut
In Shotcut öffnen Sie zunächst via Ansicht | Exportieren die Export-Ansicht. Dort haben Sie zwei Möglichkeiten: Wählen Sie links eine Vorlage, die Ihrem gewünschten Format möglichst nahekommt. Entscheiden Sie sich dann auf den Registern rechts daneben für das passende Format, und hinterlegen Sie alle zusätzlichen Einstellungen auf dem Register Sonstiges. In jede Zeile gehört dabei ein Parameter.
Alternativ erstellen Sie eine neue Vorlage mit einem Klick auf das Plus-Symbol links unten in der Fensterecke. In diesem Fall müssen Sie jedoch sämtliche Einstellungen als Parameter hinterlegen, wie etwa den Codec und die Auflösung. Auch hier gehört in jede Zeile ein Parameter. Geben Sie der Vorlage noch ganz oben einen Namen und speichern Sie sie mit OK.
Schmelzpunkt
Bei Kdenlive und Shotcut lauert allerdings noch eine Stolperfalle: Beide Anwendungen verwenden unter der Haube das MLT-Framework, das die Erstellung von Videoschnittprogrammen und anderen Multimediaanwendungen vereinfacht. MLT spannt dann seinerseits Ffmpeg ein. Kdenlive und Shotcut müssen MLT allerdings die Einstellungen für Ffmpeg in einer speziellen Notation übergeben.
Anstelle des Parameters -option value müssen Sie option=value schreiben. Möchten Sie beispielsweise das geschnittene Video im MP4-Format mit dem Level 3.0 ausgeben, müssen Sie bei Kdenlive und Shotcut im entsprechenden Eingabefeld nicht -level 3.0 hinterlegen, sondern level=3.0 (Abbildung 7).
Allerdings versteht MLT nicht alle Einstellungen der Ffmpeg-Werkzeuge und nutzt für einige neuere Parameter noch deren ältere Pendants. So müssen Sie statt -c:v etwa vcodec= verwenden und acodec= anstelle von -c:a. Eine Liste mit allen von MLT erkannten Parametern findet sich in der Dokumentation des Projekts [12].
Bei Kdenlive gibt es aber noch eine Ausnahme von der Ausnahme: Wenn Sie unter Einstellungen | Kdenlive einrichten | Transcode die Einstellungen für die Transkodierung ändern, müssen Sie dort – wie in Abbildung 7 – in das Eingabefeld die Ffmpeg-Parameter eintippen.

Abbildung 7: Wie hier in Shotcut müssen Sie auch an einigen Stellen in Kdenlive die gewünschten Parameter in der MLT-Notation hinterlegen.
Fazit
Die Werkzeuge aus dem Ffmpeg-Paket konvertieren Videos in andere Formate, liefern unzählige Informationen über eine Video-Datei und lassen sich in Shell-Skripte einbetten. Einen Kommandozeilenbefehl setzen Sie zudem schneller ab, als so manches Videoschnittprogramm installiert ist.
Bei speziellen Parametern bilden sich jedoch gerne Bandwurmbefehle. Dann lohnt der Einsatz einer grafischen Oberfläche wie Tragtor, in denen Sie die gewünschten Einstellungen bequem zusammenklicken. Erstaunlicherweise erlauben viele Videoschnittprogramme dem Filmer nur begrenzten Zugriff auf die an Ffmpeg übermittelten Parameter. Sofern das MLT-Framework zum Einsatz kommt, müssen Sie zudem auf eine andere Notation umschwenken.
Glossar
-
Codecs
-
Das Wort setzt sich aus den englischen Wörtern Coder und Decoder zusammen. Es bezeichnet ein Kompressionsverfahren zur meist platzsparenden Kodierung und Dekodierung von Film- oder Tonmaterial.
Infos
-
Ffmpeg: https://www.ffmpeg.org/
-
Ffmpeg-Wiki: https://trac.ffmpeg.org/wiki
-
Ffmpeg-Codecs: http://ffmpeg.org/ffmpeg-codecs.html
-
Handbrake: https://handbrake.fr/
-
Flowblade: https://github.com/jliljebl/flowblade/
-
Kdenlive: https://kdenlive.org/
-
Losslesscut: https://github.com/mifi/lossless-cut
-
OpenShot: http://www.openshotvideo.com/
-
Shotcut: http://www.shotcut.org/
-
MLT-Dokumentation: https://www.mltframework.org/plugins/ConsumerAvformat/#plugin-information






