Die x264-Konfiguration im Detail

Keine Angst vor der Kommandozeile. Optionen einzutippen ist auch nichts anderes als grafisch Mausklicks zu setzen. Wirklich wichtig ist beide Male, zu wissen, welche Einstellung in welcher Situation günstig ist. Damit beschäftigen wir uns ausführlich in diesem Kapitel. Damit alle Kommandozeilen so wie dargestellt funktionieren, ist eine aktuelle Version von x264 nötig.

Niemals dürfen wir dabei vergessen, dass es beim Videoencoding nur wenige absolute Regeln gibt. Mit einem handfesten Grund können wir von jeder Einstellung abweichen, und wenn sie noch so stark empfohlen ist. Gerade als Einsteiger wird man kaum solche Gründe finden, doch ist es eine gute Idee, schon von Anfang an im Kopf zu behalten, dass keine der nun folgenden Empfehlungen absolut in Stein gemeißelt ist.

In den Kommandozeilen-Beispielen auf dieser Seite sind die Parameter jeweils mit ihrer Beschreibung in der Kommandozeilen-Referenz (nächstes Kapitel) verlinkt.

Grundsätzliche Syntax

Je nachdem, ob wir ein 2-Pass- oder 1-Pass-Encoding durchführen, müssen wir mit x264 anders umgehen. Was die beiden Encodingmethoden tun und wann welche davon angebracht ist, haben wir uns schon im Kapitel Encodingmethoden angesehen.

2-Pass-Encoding

Ein 2-Pass-Encoding mit x264 erfordert auch zwei Befehle. Zuerst wird x264.exe mit den Optionen für den 1st Pass aufgerufen, anschließend erneut mit den Optionen für den 2nd Pass. Den grundlegenden Aufbau der beiden Kommandozeilen sehen wir uns jetzt an, zunächst den 1st Pass. In welcher Reihenfolge die Parameter in der Kommandozeile auftauchen, ist egal. Wir halten uns nur der Übersichtlichkeit halber an ein festes Schema:

Für den ersten Durchlauf füttern wir x264 mit sämtlichen Encoderoptionen, die wir uns weiter unten genauer ansehen. Anschließend definieren wir mit --pass 1 den ersten Encodingdurchgang. Es folgt die Angabe der Videobitrate in kbit/s. Dabei handelt es sich um die Bitrate für die reine Videospur, also Gesamtgröße abzüglich Audiospuren und Untertitelspuren, abzüglich Containeroverhead. Da wir wegen des Overheads einen größeren Exkurs in die technischen Tiefen der einzelnen Container einlegen müssten, sparen wir uns die manuelle Berechnung. Diese Arbeit übernimmt das Encoding-Frontend.

Die Option --stats legt den Namen der Statistikdatei fest, in der die Informationen aus dem 1st Pass gespeichert werden. Dann folgt mit --output die Angabe der Zieldatei. Da wir beim ersten Durchgang noch keine Videodatei erzeugen wollen, x264 es aber nicht erlaubt, die Option wegzulassen, schicken wir mit --output NUL das erzeugte Video ins Datennirvana. Abschließend geben wir die Quelldatei (das AviSynth-Skript) an, die ohne spezielle Option ganz am Ende der Kommandozeile steht.

Ist der 1st Pass beendet, starten wir den 2nd Pass, der die Zieldatei erzeugt.

Die Grundstruktur für den 2nd Pass ähnelt dem 1st Pass. Die Angaben zur Quelldatei, Statistikdatei und Bitrate müssen identisch zum 1st Pass sein. Mit der Option --pass 3 führen wir den 2nd Pass durch, in dem anhand der Daten aus der Statistikdatei das Zielvideo erstellt und auf die gewünschte Größe getrimmt wird.

x264 unterstützt beliebig viele Encodingdurchgänge. Wir beschränken uns jedoch auf die gewohnten zwei, da die geringe mögliche Qualitätssteigerung zusätzlicher Passes den enormen Zeitaufwand nicht wert ist. --pass 3 sorgt aber trotzdem dafür, dass die im 1st Pass erstellte Statistikdatei aktualisiert wird. So steht uns immer die Tür zu weiteren Durchgängen offen, falls das in einem extremen Ausnahmefall doch einmal nötig sein sollte.

Mit der Option --sar legen wir anschließend das Pixel Aspect Ratio des Zielvideos fest. Das entspricht dem Setzen des AR-Flags, von dem im Anamorph-Kapitel die Rede ist. Für ein klassisches Encoding mit quadratischen Pixeln gilt immer --sar 1:1, oder wir lassen die Option ganz weg.

Die Zieldatei ist diesmal ein echter Dateiname. Die Dateiendung legt fest, welches Format verwendet wird. Je nach gewünschtem Container für den fertigen Film verwenden wir entweder .mp4 für MP4 oder .mkv für Matroska. Der AVI-Container ist nicht mit x264.exe kompatibel.

Die Encoderoptionen am Anfang der Kommandozeile sind für alle Passes identisch. Um den 1st Pass zu beschleunigen, deaktiviert x264 dort selbständig bremsende Optionen, die zu diesem Zeitpunkt noch nichts bringen. Welche das sind, können wir in der x264-Referenz nachlesen.

1-Pass-CRF-Encoding

Das Single-Pass-Verfahren benötigt eine ähnliche Kommandozeile. Hauptunterschied ist der, dass wir x264 nur einmal aufrufen, denn der Encoder erstellt ja sofort die Zieldatei. Die einzig sinnvolle Wahl fürs 1-Pass-DVD-Backup ist der CRF-Modus, der so aussieht:

Die Angaben zu Bitrate (--bitrate), Nummer des Durchgangs (--pass) und Statistikdatei (--stats) fallen weg, da sie beim CRF-Verfahren keine Bedeutung haben. Stattdessen verwenden wir die Option --crf, mit der wir das gewünschte Qualitätsniveau angeben.

Das Vorlagensystem

x264 besitzt ein Vorlagensystem zur einfachen Konfiguration. Dahinter versteckt sich nichts anderes als Kurzformen für bestimmte Kombinationen aus vielen einzelnen Optionen, die für unterschiedliche Encodingszenarien optimiert sind. Auch ohne Encoding-Frontend müssen wir uns also nicht mit den Details von x264 auseinandersetzen. Es reicht aus, die gewünschte Vorlage, die Encodingmethode und die Bitrate/Qualität zu wählen.

Vorlagen sind flexibel, d.h. wir behalten genauso die Kontrolle, als würden wir alle Optionen einzeln eintippen. Es ist problemlos möglich, eine Vorlage auswählen und manche Optionen manuell anzupassen. Das ist aber nur dann sinnvoll, wenn wir ganz genau wissen, was wir tun. Wer sich nicht intensiv mit den Details von x264 auseinandersetzen will, bleibt bei den Vorlagen und ist genauso glücklich.

Das Vorlagensystem besteht aus drei Teilen:

  • Kompressionsvorlagen (--preset) sind das Kernstück der Konfiguration. Sie treffen eine Abwägung zwischen Geschwindigkeit und Größe/Qualität. Für ein Encoding mit einem durchschnittlich modernen Computer ist --preset slow eine gute Wahl. Wer gut Power unter der Haube oder gut Geduld unter der Schädeldecke hat, nimmt --preset slower.
  • Tuningvorlagen (--tune) enthalten zusätzlich Optimierungen für entweder bestimmte Typen von Quellmaterial oder spezielle Anforderungen bei der Wiedergabe. Für einen normalen Kinofilm – einschließlich 3D-Animationen wie sie z.B. Pixar produziert – sollten wir --tune film angeben. Für echten Zeichentrick wie z.B. die Simpsons gibt es --tune animation.
  • Profilvorlagen (--profile) erzwingen die Kompatibilität mit dem angegebenen H.264-Profil. Damit müssen wir uns nur beschäftigen, wenn wir für Standalone-Player encodieren.

Details zu den möglichen Vorlagen und den dahinterstehenden einzelnen Optionen finden wir in der Kommandozeilenreferenz.

Die drei Vorlagenkomponenten und manuelle Optionen überschreiben sich gegenseitig. Dabei gilt diese Reihenfolge:

  1. Interne Standardwerte von x264.
  2. Kompressionsvorlage (--preset).
  3. Tuningvorlage (--tune).
  4. Vom Benutzer in der Kommandozeile angegebene Optionen.
  5. H.264-Profil (--profile).

Eine stressfreie x264-Kommandozeile für ein 1-Pass-CRF-Encoding könnte so aussehen:

Sehen wir uns die Referenzframes (--ref) etwas näher an. Zunächst gilt x264s interner Standardwert --ref 3. Der wird vom Slow-Preset mit --ref 5 überschrieben. Das Film-Tuning belässt die Referenzen so, wie sie sind. Anschließend kommt unsere manuelle Einstellung zum Zug und setzt --ref 4. Es gilt immer die Prioritäten-Reihenfolge wie oben aufgelistet. In welcher Reihenfolge wir die Optionen/Vorlagen in die Kommandozeile schreiben, ist egal.

Beispiel einer manuellen Konfiguration

Um ein wenig mehr Gefühl für die Details von x264 zu bekommen, lassen wir die Vorlagen beiseite und betrachten eine Beispielkonfiguration für ein qualitativ hochwertiges DVD-Backup auf einem schnellen Computer. D.h. wir müssen keine zu großen Kompromisse zu Lasten der Qualität/Größe eingehen, um die Encoding-Geschwindigkeit in einem sinnvollen Rahmen zu halten.

Für die alltägliche Praxis ist so viel Detailwissen nicht nötig, denn wie gesagt: die Vorlagen sind für hochqualitative Encodings bestens geeignet. Deswegen entsprechen die Optionen aus dem folgenden Beispiel exakt --preset slow --tune film.

Zunächst sehen wir uns die Kommandozeilen fürs 1-Pass-CRF-Encoding an. Die wichtigsten Optionen sprechen wir weiter unten in diesem Kapitel noch einmal genauer an.

Wenn wir mit einer fest vorgegebenen Zielgröße leben müssen, benötigen wir ein 2-Pass-Encoding. Die Bitrate ist natürlich nur ein Platzhalter und muss für jeden Film einzeln angepasst werden, um die gewünschte Zielgröße zu erreichen.

Und so sieht x264 bei der Arbeit aus:

Wichtige Optionen im Detail

Die wichtigsten Optionen sehen wir uns nun noch einmal im Detail an. Dazu gehören jeweils zwei Empfehlungen. Die erste (»Qualität/Größe«) hat möglichst hohe Qualität bzw. eine möglichst geringe Dateigröße zum Ziel. Das darf zwar deutlich auf Kosten der Encodingzeit gehen. Allerdings soll dem auch ein sinnvoller Gewinn entgegen stehen. Manche Hardcore-Qualitätsfanatiker würden die Konfiguration deshalb sicher als »konservativ« bezeichnen. :-)

Die zweite Empfehlung legt mehr Wert auf ein flottes Encoding, was besonders für schon etwas angestaubte Single-Core-CPUs die Encodingzeiten in einem noch halbwegs vertretbaren Rahmen hält. Die Effizienz muss dafür zurückstecken, was natürlich nicht so weit geht, dass wir gleich mit einem schlechten Bild rechnen müssen.

Um es noch einmal deutlich zu sagen: Ich gebe Empfehlungen, keine allein selig machenden Pflichteinstellungen. Von eigenen Experimenten soll das niemanden abhalten.

Bewegungssuche

Vielleicht der zentrale Bestandteil des Encodingvorgangs ist die Suche nach Bewegung im Bild. Entsprechend wichtig ist die Konfiguration der damit zusammenhängenden Optionen. --me steuert den Teil der Suche, der mit einer Genauigkeit von einem ganzen Pixel abläuft. --subme ist für die Subpixel-Suche mit einer Genauigkeit bis zu einem Viertel Pixel (QPel) zuständig.

Bei beiden Optionen müssen wir wie üblich zwischen Geschwindigkeit einerseits und Qualität (bei 2-Pass) bzw. Dateigröße (bei CRF) andererseits abwägen. Höhere Einstellungen benötigen oft massiv mehr CPU-Leistung, wirken sich aber ebenfalls deutlich auf Qualität/Größe aus.

Für die Vollpixel-Bewegungssuche (--me) können wir aus fünf Algorithmen wählen.

  • dia = diamantförmige Suche mit Radius 1
  • hex = hexagonale Suche mit Radius 2
  • umh = ungerade Multihex-Suche
  • esa = erschöpfende Suche
  • tesa = erschöpfende Hadamard-Suche

Von oben nach unten werden die Suchergebnisse immer besser und die Geschwindigkeit sinkt. Der beste Kompromiss auf aktuellen Rechner dürfte --me umh sein. Auf jeden Fall vermeiden sollten wir dia, da der Geschwindigkeitsgewinn die schlechteren Ergebnisse nicht aufwiegt. Umgekehrt sind esa und besonders tesa zu langsam.

Bevor wir auf eine höhere Stufe bei der Vollpixel-Suche wechseln, sollten wir immer zunächst die Subpixel-Bewegungssuche (--subme) ausreizen. Aus folgenden Werten können wir wählen:

  • 05 = uninteressant
  • 6 = RDO für I- und P-Frames
  • 7 = RDO für alle Frames
  • 8 = wie 7, zusätzlich verfeinerte RDO für I- und P-Frames
  • 9 = wie 7, zusätzlich verfeinerte RDO für alle Frames
  • 10 = wie 9, und QP-RDO. Benötigt aktiviertes AQ und --trellis 2

Niedrigere Werte als 6, was auch dem x264-Standardwert entspricht, sind für qualitativ hochwertige Encodings uninteressant. Wenn Qualität die Hauptrolle spielt, sollten wir jedoch RDO auch für B-Frames aktivieren, d.h. mindestens --subme 7 nutzen.

B-Frames

B-Frames stellen ebenfalls ein zentrales Element für ein effizientes Encoding dar, das wir im Grundlagenkapitel zur Interframe-Kompression schon angesprochen haben. Die beiden großen Stellschrauben sind die maximal erlaubte Anzahl an direkt aufeinander folgenden B-Frames (--bframes) und der Algorithmus, nach dem x264 B-Frames verteilt (--b-adapt).

Die maximale Anzahl bedeutet nicht, dass immer so viele B-Frames direkt hintereinander stehen. Die Option legt nur fest, dass es niemals mehr als die angegebene Zahl sein kann. Innerhalb dieser Grenze berechnet x264 selbst die beste Verteilung. Mit einem Maximum von zwei wäre also höchstens eine solche Bildsequenz aus I-Frames, P-Frames und B-Frames möglich: IPBBP, bei maximal drei B-Frames wäre es dann IPBBBP usw.

Auf jeden Fall sollten wir der Qualität zuliebe den neuen, intelligenteren Verteilungsalgorithmus verwenden. Der hat allerdings den Nachteil, dass er um so langsamer arbeitet je höher das B-Frame-Maximum gesetzt ist. x264 freie Hand zu lassen (also ein Maximum von 16), ist deswegen nicht besonders sinnvoll. Mit halbwegs normalen Filmen kommen so oder so kaum jemals mehr als Dreier- oder Vierer-B-Frame-Reihen vor. Wir können also je nach CPU-Leistung eher auf Nummer sicher gehen oder eine etwas engere Begrenzung setzen.

Die restlichen B-Frame-Optionen sind weniger entscheidend. Mit einigen davon haben wir uns schon ausführlich im x264-Technikkapitel beschäftigt.

Mehrfachreferenzen

Im x264-Technikkapitel haben wir schon gelernt, dass H.264 gleich mehrere Frames als Referenzbilder zulässt. Deswegen stellt sich die Frage, wie viele wir zulassen sollten. Denn wenn der Encoder in vielen Bildern nach guten Referenzen suchen darf, steigt zwar einerseits die Chance auf einen besonders guten Treffer; andererseits bricht die Encoding-Geschwindigkeit massiv ein. Es gilt also wieder einmal abzuwägen.

Wie schon bei den B-Frames definiert die erlaube Anzahl (--ref) nur ein Maximum, das der Encoder nicht überschreiten darf aber jederzeit unterschreiten kann. Mehr als 16 Referenzbilder verbietet der H.264-Standard. In der Praxis nutzt x264 üblicherweise etwa 3 bis 5. Eine sinnvolle Einstellung liegt deshalb ebenfalls in diesem Bereich.

Psychovisuelle Optionen

Was psychovisuelle Methoden sind, haben wir uns schon im Kapitel Entscheidungsfindung im Encoder angesehen. x264 verwendet Psyvis an zwei Stellen.

  • Adaptive Quantisierung passt den Quantizer von Makroblocks, d.h. die Stärke der Kompression, je nachdem an, wie empfindlich der menschliche Sehapparat für den jeweiligen Bildbereich ist. Dadurch können in kritischen Bereichen wichtige feine Bilddetails erhalten werden. Allerdings steigert AQ tendenziell den Bitratenbedarf. Zur Zeit gibt es nur einen Algorithmus namens Variance Adaptive Quantisation (VAQ), der von den Optionen --aq-mode und --aq-strength gesteuert wird. Mit den Standardeinstellungen sind wir meistens gut bedient.
  • Psy-RD ist eine psychovisuelle Variante der Rate/Distortion-Optimierung, die auf dem Prinzip beruht, dass sich ein angenehmes Bild nicht unbedingt insgesamt durch eine möglichst geringe Abweichung zum Originalbild auszeichnet, sondern ihm v.a. in Niveau und Verteilung der Komplexität ähneln muss.

Eines der größten Probleme fast aller H.264-Encoder ist ein zu glattgebügeltes, rauscharmes Bild, das sich auch mit hoher Bitrate nicht vermeiden lässt. Lange Zeit traf das auch auf x264 zu. Erst mit den Psyvis wurde es nach und nach möglich, x264 für rauschige Videos fit zu machen.

Optimale Einstellungen für die Psycho-Optionen hängen stark von der Art der Quelle ab. Wenn wir keine eigenen Testreihen encodieren wollen, halten wir deshalb am besten an das für die Quelle passende --tune.

Kommentare