Encoding Praxis - Videos encoden mit Linux (Kommandozeile)
Videos erstellen mit FFmpeg
Das FFmpeg-Paket besteht aus einer Reihe von freien Computerprogrammen und Programmbibliotheken, welche digitales Video- und Audiomaterial aufnehmen, konvertieren, senden (streamen) und in verschiedene Containerformate verpacken können. Unter anderem enthält es eine Sammlung unterschiedlicher Audio-/Videoencoder und Decoder. Sie befinden sich in der libavcodec.
FFmpeg ist ein Kommandozeilenprogramm, um von einem Video-, Audio- oder Bildformat zu einem anderen zu konvertieren. Es unterstützt auch das Aufnehmen und Kodieren von einer TV-Karte in Echtzeit. FFserver ist ein HTTP-Multimedia-Streaming-Server für Livestreaming über das Internet. Libavcodec enthält alle FFmpeg Audio- und Videoencoder. Diese Bibliothek kann von anderen Programmen benutzt werden, um dann die Filme darzustellen. Libavformat enthält die Container-Parser und -Ersteller für alle herkömmlichen Audio- und Video Containerformate (z.B. avi, mov, mkv, ogg).
Das FFmpeg-Paket kann kostenfrei auf der Webseite des FFmpeg Projekts bezogen werden. Wir werden in diesem Artikel nicht auf die Installation und Konfiguration von FFmpeg eingehen, da es den Rahmen des Tutorials sprengen würde. Wir bitten um Ihr Verständnis, und werden gegebenenfalls ein weiteres Tutorial nachreichen.
x264 Unterstützung vorhanden ?
Stellen Sie sicher, daß der x264 Codec, beziehungsweise die Bibliothek(en) libx264.so.X auf Ihrem System installiert sind,bevor Sie mit der Installation von FFmpeg fortfahren. Führen Sie nach der Installation von FFmpeg den Befehl ffmpeg --formats aus, um zu prüfen ob der FFmpeg Encoder in der Lage ist den x264 Codec zu benutzen. Sie sollen eine Bildschirmausgabe sehen wie:
Anmerkung: E steht für Encoding, D steht für Decoding, V steht für Video und A für Audio. Achten Sie auf die Konfigurationszeile: --enable-libx264 und kontrollieren Sie ob bei der Codec Sektion bei libx264 der Buchstabe E für Encoding steht.
Wenn dies nicht der Fall ist, wurde der x264 Codec nicht richtig erkannt und der FFmpeg Encoder kann damit nicht umgehen. Der am häufigsten begangene Fehler ist, daß die Bibliothek libx264.so.X nicht dynamisch, sondern statisch installiert wurde. Verwenden Sie bei dessen Installation immer den Zusatzparameter --enable-shared.
Wir möchten nun als Beispiel ein webfähiges Video mit den Einstellungen der unten gezeigten Tabelle mit FFmpeg umwandeln. Wechseln Sie auf die Kommandozeile oder öffnen Sie ein Terminalfenster. Begeben Sie sich in das Installationsverzeichnis von FFmpeg. Sehr häufig ist FFmpeg unter: /usr/local/bin installiert.
Mit dem nachfolgenden Parametern und Einstellungen sollten Sie in der Lage sein, eine mp4 Datei mit dem x264 Videocodec und dem faac Audiocodec zu erstellen. Zunächst schaffen wir Ihnen eine Übersicht der globalen Parameter wie Videocodec und Audiocodec, Bitraten und Container. Die FFmpeg Parameter werden pärchenweise -PARAMETER WERT in der Kommandozeile eingegeben:
Globale Einstellungen und FFmpeg Parameter
Bezeichnung | FFmpeg Parameter | Wert (Beispiel) |
Videocodec | -vcodec | libx264 |
H.264 Level | -level | 1.2 |
Videobitrate | -b | 128 kb/s |
Bilder (Frames) pro Sekunde | -r | 25 |
Videobitrate Toleranz | -bt | 144 kb/s |
Videocontainer | -f | mp4 |
Videogröße | -s | 240x192 |
Audiocodec | -acodec | libfaac |
Audiobitrate | -ab | 56 kb/s |
Audiofrequenz | -ar | 48000 |
Audiokanäle | --- | 2 - Stereo |
Nun geht es darum, die H.264 Einstellungen des FFmpeg Encoder zu parametrisieren. Da Qualität immer im Auge des Betrachters liegt, möchten wir Ihnen hier nur eine grundsätzliche Empfehlung abgeben. Das Feintuning können wir Ihnen nicht abnehmen. Da hilft nur probieren, probieren, probieren.
H.264 Einstellungen und FFmpeg Parameter für normale Qualität
FFmpeg Parameter | Wert (Beispiel) |
-coder | 1 |
-flags | +loop |
-cmp | +chroma |
-partitions | +parti8x8+parti4x4+partp8x8+partb8x8 |
-me_method | hex |
-subq | 7 |
-me_range | 16 |
-g | 250 |
-keyint_min | 25 |
-sc_threshold | 40 |
-i_qfactor | 0.71 |
-b_strategy | 1 |
-qcomp | 0.6 |
-qmin | 10 |
-qmax | 51 |
-qdiff | 4 |
-bf | 2 |
-refs | 1 |
-directpred | 1 |
-trellis | 0 |
-flags2 | +bpyramid+wpred+dct8x8+fastpskip |
Hier sehen Sie nun den vollständigen Linux Befehl für FFmpeg, normale Qualität:
Die folgenden Parameter reizen die maximale Leistung des FFmpeg Encoder und x264 erst so richtig aus. Bedenken Sie, dass die Umwandlung eines längeren Films mit diesen Einstellungen auch auf einem Computer mit Mehrkernprozessor(en) mehrere Stunden in Anspruch nehmen kann.
H.264 Einstellungen und FFmpeg Parameter für hohe Qualität
FFmpeg Parameter | Wert(Beispiel) |
-coder | 1 |
-flags | +loop |
-cmp | +chroma |
-partitions | +parti8x8+parti4x4+partp8x8+partb8x8 |
-me_method | full |
-subq | 7 |
-me_range | 23 |
-g | 250 |
-keyint_min | 25 |
-sc_threshold | 40 |
-i_qfactor | 0.71 |
-b_strategy | 1 |
-qcomp | 0.6 |
-qmin | 10 |
-qmax | 51 |
-qdiff | 4 |
-bf | 16 |
-bidir_refine | 1 |
-refs | 6 |
-directpred | 2 |
-trellis | 1 |
-flags2 | +bpyramid+wpred+mixed_refs+dct8x8+fastpskip |
Hier sehen Sie den vollständigen Linux Befehl für FFmpeg, hohe Qualität:
Wenn Sie Ihr Wissen vertiefen möchten oder weitere Informationen benötigen lesen Sie die Manual Pages bzw. geben Sie in der Kommandozeile den folgenden Befehl ein: ffmpeg --help. Wenn Sie FFmpeg über YAST oder eine weitere Paketverwaltungssoftware installiert haben, erhalten Sie die Hilfe durch Eingabe des Befehls: man ffmpeg. Die Projektseite von FFmpeg beinhaltet auch eine ausführliche Dokumentation mit vielen praxisbezogenen Beispielen, Tipps und hilfreichen Parametern zur Qualitätsoptimierung des H.264/x264 AVC Encodings.