Referenz für die x264-Kommandozeile

Auf dieser Seite

Wir sprechen in diesem Kapitel nahezu sämtliche Parameter von x264 kurz an. Wenn wir noch überhaupt nicht mit x264 vertraut sind, sollten wir besser im Kapitel zur x264-Konfiguration einsteigen, wo das Zusammenspiel der Optionen bei einem konkreten Encoding erklärt wird.

Wir sollten auf jeden Fall eine aktuelle Version von x264 verwenden; zum einen, weil sich der Encoder ständig weiterentwickelt, zum anderen, damit sich die Kommandozeile tatsächlich so verhält wie beschrieben. Dieses Kapitel bezieht sich auf x264 Revision 2479. Bei Problemen hilft zunächst ein x264 --fullhelp, das mit einer kurzen Erklärung sämtliche verfügbaren Parameter auflistet. Außerdem verrät uns der Befehl ganz am Anfang seiner Ausgabe die x264-Revisionsnummer und ob der Encoder mit Unterstützung für AviSynth und MP4 compiliert wurde. AviSynth ist Grundvoraussetzung, damit wir arbeiten können. MP4-Unterstützung benötigen wir nur dann, wenn wir uns für MP4 als Container der Zieldatei entschieden haben.

Ein Stern-Symbol [wichtiger Parameter] dient zur Kennzeichnung aller Optionen, die für ein 2-Pass- oder CRF-Encoding interessant sind. Die wichtigsten davon haben wir uns schon im x264-Konfigurationskapitel näher angesehen. Zum Querlesen sollten wir uns Selurs man x264 ansehen, das zu manchen Optionen eine etwas ausführlichere Erklärung als das Encodingwissen bietet. Allerdings ist man x264 stark veraltet und deshalb nur bedingt geeignet, um damit konkrete Kommandozeilen zu erstellen.

Manche Optionen besitzen Standardwerte, d.h. wir müssen sie nur dann angeben, wenn wir einen abweichenden Wert verwenden wollen. Ansonsten arbeitet x264 automatisch mit dem Standard. Optionen ohne Standardwert sind nur dann aktiv, wenn wir sie ausdrücklich angeben.

Normalerweise beginnen x264-Paramter mit zwei Strichen (--). Daneben existieren für häufig verwendete Optionen Kurzformen, die aus einem einzelnen Buchstaben bestehen und im Gegensatz zur ausgeschriebenen Variante mit einem einfachen Strich beginnen (z.B. --bframes und -b). Zur Übersichtlichkeit habe ich darauf verzichtet, die Kurzformen aufzulisten.

Encoding-Vorlagen

Das mit den Revisionen 1177 und 1197 eingeführte Vorlagensystem fasst jeweils eine Reihe von Optionen abgestimmt für eine bestimmten Zweck in einer Vorlage zusammen. Es unterteilt sich in Kompressionsvorlagen (--preset), Tuningvorlagen (--tune) und H.264-Profilvorlagen (--profile). Vorlagen sind lediglich eine Kurzform für eine bestimmte Kombination aus Kommandozeilenoptionen. Alles, was wir über das Vorlagensystem einstellen können, lässt sich auch manuell einzeln konfigurieren.

Es gibt keinen guten Grund, die Vorlagen nicht zu verwenden. Finger weg von handgeklöppelten Kommandozeilen mit obskuren Optionen und Werten! Die sind praktisch immer schlechter als eine gut gewählte Vorlage. Manuelle Anpassungen sind nur sinnvoll, um Restriktionen der Abspielgeräte zu berücksichtigen; z.B. wenn wir blu-ray-kompatibles Video erzeugen.

Die drei Vorlagenkomponenten, manuell angegebene Optionen und die internen x264-Standardwerte überschreiben sich gegenseitig in folgender 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).

In welcher Reihenfolge wir Optionen und Vorlagen in der Kommandozeile angeben, spielt keine Rolle.

--preset <Kompressionsvorlage> [wichtiger Parameter]

Werte: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo
Standard: medium
Beispiel: --preset slower

Kompressionsvorlagen treffen eine Abwägung zwischen Geschwindigkeit und Größe/Qualität. Für ein Encoding mit einem durchschnittlich schnellen Computer ist --preset slow eine gute Wahl. Hinter den einzelnen Vorlagen stehen folgende Einstellungen:

ultrafast
--no-8x8dct --aq-mode 0 --b-adapt 0 --bframes 0 --no-cabac --no-deblock --no-mbtree --me dia --no-mixed-refs --partitions none --rc-lookahead 0 --ref 1 --scenecut 0 --subme 0 --trellis 0 --no-weightb --weightp 0
superfast
--no-mbtree --me dia --no-mixed-refs --partitions i8x8,i4x4 --rc-lookahead 0 --ref 1 --subme 1 --trellis 0 --weightp 1
veryfast
--no-mixed-refs --rc-lookahead 10 --ref 1 --subme 2 --trellis 0 --weightp 1
faster
--no-mixed-refs --rc-lookahead 20 --ref 2 --subme 4 --weightp 1
fast
--rc-lookahead 30 --ref 2 --subme 6 --weightp 1
medium
Keine Veränderung der x264-Standardeinstellungen.
slow
--b-adapt 2 --direct auto --me umh --rc-lookahead 50 --ref 5 --subme 8
slower
--b-adapt 2 --direct auto --me umh --partitions all --rc-lookahead 60 --ref 8 --subme 9 --trellis 2
veryslow
--b-adapt 2 --bframes 8 --direct auto --me umh --merange 24 --partitions all --ref 16 --subme 10 --trellis 2 --rc-lookahead 60
placebo
--bframes 16 --b-adapt 2 --direct auto --slow-firstpass --no-fast-pskip --me tesa --merange 24 --partitions all --rc-lookahead 60 --ref 16 --subme 11 --trellis 2

--tune <Tuningvorlage> [wichtiger Parameter]

Werte: film, animation, grain, psnr, stillimage, ssim, fastdecode, zerolatency
Standard: nicht gesetzt
Beispiel: --tune grain

Tuningvorlagen enthalten Optimierungen für entweder bestimmte Typen von Quellmaterial oder für spezielle Anforderungen bei der Wiedergabe. Wir können mehrere Vorlagen anwenden, indem wir sie durch ein Komma (,) getrennt hintereinander hängen. Es darf aber immer nur eine Psy-Vorlage aktiv sein.

film

Allgemeine Psy-Optimierung für Kinofilme.

--deblock -1:-1 --psy-rd 1.0:0.15

animation

Psy-Optimierung für klassischen Zeichentrick wie z.B. Tom & Jerry. 3D-Animationen, z.B. Monsters Inc., gehören nicht dazu und sollten wie normaler Realfilm behandelt werden.

--bframes <um 2 erhöhen> --deblock 1:1 --psy-rd 0.4:0.0 --aq-strength 0.6 --ref <verdoppeln, falls größer als 1; sonst 1>

grain

Psy-Optimierung für körniges/verrauschtes Material, falls das Korn/Rauschen beibehalten werden soll. Führt zu vergleichsweise hohen Bitraten.

--aq-strength 0.5 --no-dct-decimate --deadzone-inter 6 --deadzone-intra 6 --deblock -2:-2 --ipratio 1.1 --pbratio 1.1 --psy-rd 1.0:0.25 --qcomp 0.8

stillimage

Psy-Optimierung für unbewegte Einzelbilder.

--aq-strength 1.2 --deblock -3:-3 --psy-rd 2.0:0.7

psnr

Psy-Optimierung auf möglichst hohe PSNR-Werte. Ist für normale Encodings uninteressant.

--aq-mode 0 --no-psy

ssim

Psy-Optimierung auf möglichst hohe SSIM-Werte. Ist für normale Encodings uninteressant.

--aq-mode 2 --no-psy

fastdecode

Deaktivierung der für die Wiedergabe CPU-intensivsten Optionen.

--no-cabac --no-deblock --no-weightb --weightp 0

zerolatency

Deaktiviert alle Optionen, die die Encoding-Latenz erhöhen. Kann für manche Streaming-Anwendungen nützlich sein.

--bframes 0 --force-cfr --no-mbtree --sync-lookahead 0 --sliced-threads --rc-lookahead 0

--profile <H.264-Profil>

Werte: baseline, main, high, high10, high422, high444
Standard: high
Beispiel: --profile main

Erzwingt die Kompatibilität mit dem angegebenen H.264-Profil. H.264-Level, VBV-Einstellungen etc. sind davon nicht betroffen.

baseline

--no-8x8dct --bframes 0 --no-cabac --cqm flat --weightp 0

Interlaced Video und verlustloses Encoding sind nicht möglich.

main

--no-8x8dct --cqm flat

Verlustloses Encoding ist nicht möglich.

high
Verlustloses Encoding ist nicht möglich, ansonsten keine Restriktionen. Unterstützen neben der normalen Bittiefe von 8 Bit auch 10 Bit.
high10
high422
high444
Unterstützen neben der normalen Bittiefe von 8 Bit auch 10 Bit. Außerdem sind Farbräume mit höherer Farbauflösung als das übliche YV12 möglich. Mit DVD oder Blu-ray als Quelle spielen diese Profile keine Rolle.

Frametypen

--keyint <Frames>

Werte: positive ganze Zahlen oder infinite
Standard: 250
Beispiel: --keyint 250

Maximales IDR-Frame-Intervall. Siehe auch das x264-Technikkapitel. Als Daumenregel hat sich das Zehnfache der Bildrate eingebürgert. Deshalb können wir den Standardwert problemlos übernehmen. Mit infinite deaktivieren wir erzwungene IDR-Frames ganz. Sie werden dann nur an Szenenwechseln gesetzt.

--min-keyint <Frames>

Werte: Untergrenze: der kleinere Wert von Framerate und keyint/10, Obergrenze: keyint/2+1
Standard: 25
Beispiel: --min-keyint 25

Mindestabstand, der zwischen zwei IDR-Frames liegen muss. Siehe auch das x264-Technikkapitel. Als Daumenregel hat sich die Bildrate eingebürgert. Deshalb können wir den Standardwert problemlos übernehmen.

--scenecut <Empfindlichkeit>

Werte: ganze Zahlen von 0 bis 100
Standard: 40
Beispiel: --scenecut 40

Szenenwechselerkennung. Legt fest, wie stark sich der Bildinhalt von einem Frame zum nächsten ändern muss, damit ein I-Frame eingefügt wird. Der Wert 0 deaktiviert die Szenenerkennung, d.h. I-Frames werden unabhängig vom Bildinhalt im mit --keyint definierten Abstand eingefügt. Wir sollten die Standardeinstellung beibehalten.

--no-scenecut

Deaktiviert genauso wie --scenecut 0 die Szenenerkennung zur intelligenten Verteilung von I-Frames.

--intra-refresh

Verwendet statt IDR-Frames P-Frames, deren Makroblocks alle im Intra-Modus encodiert sind. D.h. solche P-Frames haben keine Referenzen auf frühere Frames, deshalb kann der Decoder aus ihnen genauso wie aus IDR-Frames ein vollständiges Bild decodieren.

Für Streaming kann das interessant sein, für unser normales Backup-Encoding nicht, da --intra-refresh die Effizienz des Encoders senkt und damit größere Dateien bzw. schlechtere Qualität erzeugt.

--no-cabac

CABAC (Context Adaptive Binary Arithmetic Coding) ist eine Neuheit des H.264-Standards. Es handelt sich um eine Kompressionsmethode in der verlustlosen Phase des Encodingprozesses, die gerade bei hohen Datenraten die nötige Bitrate deutlich senken kann. CABAC ist ein zentrales Element von H.264 und sollte nicht deaktiviert werden.

--ref <Frames> [wichtiger Parameter]

Werte: Ganze Zahlen zwischen 1 und 16
Standard: 3
Beispiel: --ref 3

Anzahl der erlaubten Referenzframes. x264 erlaubt maximal 16 Stück; sinnvoll sind 4 bis 5. Mehr steigert hauptsächlich die Codierzeit, nicht mehr die Qualität. Lediglich Zeichentrick profitiert oft von deutlich höheren Werten. Die Einstellung wirkt sich auch auf B-Frames aus.

--deblock <alpha>:<beta> [wichtiger Parameter]

Werte: Für alpha sowie beta ganze Zahlen zwischen -6 und 6
Standard: für beide 0
Beispiel: --deblock 0:0

Konfiguriert die Stärke des Inloop-Deblocking-Filter, mit dem wir uns schon ausführlicher im x264-Technikkapitel beschäftigt haben.

--no-deblock

Deaktiviert den Deblocking-Filter. Sollte ohne sehr guten Grund nie gesetzt werden.

--tff

Aktiviert den Modus für interlaced Encoding und gibt an, das im Quellvideo zuerst das obere Field folgt, das die ungeraden Zeilen enthält (top field first). Ist zwingend erforderlich, wenn schon das Quellmaterial interlaced vorliegt und wir das fürs Zielvideo beibehalten wollen. Der Normalfall ist ein Deinterlacing vor dem Encoding, um progressives Material zu erhalten. --tff oder --bff darf dann nicht gesetzt werden.

--bff

Wie --tff, aber für Quellvideos, bei denen das untere Field mit den geraden Zeile zuerst folgt (bottom field first).

--open-gop

Erlaubt offene GOPs, d.h. B-Frames dürfen direkt vor I-Frames stehen. Da ein solches B-Frame auf das I-Frame referenziert, können wir an der Grenze zwischen offenen GOPs den Film nicht schneiden. Dafür steigt die Effizienz des Encodings besonders bei sehr kurzen Keyframe-Intervallen (etwa im Bereich von 1 Sekunde). Sollte ohne guten Grund nicht gesetzt sein.

--b-adapt <Modus> [wichtiger Parameter]

Werte: 0 (aus), 1 (schnell), 2 (optimal)
Standard: 1
Beispiel: --b-adapt 1

Legt fest, welcher Algorithmus für die adaptive (»intelligente«) Verteilung von B-Frames verwendet wird. Siehe auch das x264-Technikkapitel. Mit dem Wert 0 schalten wir die intelligente Verteilung ab, was nicht empfehlenswert ist. 1 steht für den klassischen schnellen Algorithmus und 2 für den optimaleren, aber auch langsameren. I.d.R. sollten wir --b-adapt 2 wählen.

--bframes <Maximum> [wichtiger Parameter]

Werte: Ganze Zahlen von 0 bis 16
Standard: 3
Beispiel: --bframes 3

Legt fest, wie viele B-Frames maximal direkt hintereinander stehen dürfen. Siehe auch das x264-Technikkapitel. Ein Wert von 0 deaktiviert B-Frames vollständig. Empfehlenswert ist das Maximum von 16 zusammen mit --b-adapt 1 oder 4 bis 5 mit --b-adapt 2.

--b-bias <Empfindlichkeit>

Werte: Ganze Zahlen von -100 bis 100
Standard: 0
Beispiel: --b-bias 0

Steuert x264s Vorliebe für B-Frames. Negative Werte halten den Encoder vom B-Frame-Einsatz ab, positive ermuntern ihn, öfter B-Frames zu setzen. Benötigt in der Regel keine Anpassung.

--b-pyramid <Modus>

Werte: none, strict, normal
Standard: normal
Beispiel: --b-pyramid normal

Erlaubt es, B-Frames als Referenzframes zu verwenden. Siehe auch das x264-Technikkapitel. Erfordert --bframes 2 oder höher.

Der strict-Modus ist qualitativ etwas schlechter als normal. Er ist zwingend notwendig für Blu-Ray-kompatible B-Pyramide, ansonsten aber wenig nützlich.

--direct <Modus>

Werte: spatial, temporal, auto
Standard: spatial
Beispiel: --direct auto

Gibt an, ob in B-Frames zeitliche oder räumliche Informationen zur Komprimierung von Direct-Blocks (d.h. Blocks ohne eigenen Bewegungsvektor) herangezogen werden. Siehe auch das x264-Technikkapitel. Die Entscheidung können wir mit auto x264 überlassen.

--no-weightb

Deaktiviert die gewichtete Bewegungssuche für B-Frames. Siehe auch das x264-Technikkapitel. Sollte für beste Qualität nicht angegeben werden.

--slices <Anzahl>

Werte: 0 (keine Slices) und positive ganze Zahlen
Standard: 0
Beispiel: --slices 4

Legt die Anzahl an Slices fest, in jedes Bild zerlegt werden soll. Slices senken die Effizienz. Für ein normales Encoding sind sie unnötig und sollten deaktiviert bleiben. Lediglich wer H.264-Material für eine Video-BluRay erzeugt, muss mindestens vier Slices verwenden.

--slice-max-size <Maximalgröße>

Legt die Maximalgröße eines Slice in Byte fest. Hat Priorität gegenüber --slices. Sollte ohne guten Grund nie gesetzt sein.

Encoding-Modus

--crf <Qualitätsfaktor> [wichtiger Parameter]

Werte: 1.0 bis 51.0
Standard: 23.0
Beispiel: --crf 23

Führt ein 1-Pass-Encoding mit einer Zielqualität durch (Constant Rate Factor). Der Qualitätsfaktor entspricht grob dem zu erwartenden durchschnittlichen Quantizer. Kommawerte müssen zwingend mit dem Punkt als Dezimaltrenner angegeben werden. Dieser Modus ist interessant, wenn wir keine exakte Zielgröße anstreben. Sinnvolle Werte liegen grob zwischen 18 und 25.

--qp <P-Frame-Quantizer>

Werte: ganze Zahlen zwischen 0 und 69
Beispiel: --qp 20

Führt ein 1-Pass-Encoding mit festem Quantizer durch. --qp 0 aktiviert den verlustlosen Modus von x264. I.d.R. sollten wir ein CRF-Encoding bevorzugen.

--pass <Modus> [wichtiger Parameter]

Werte: 1, 2, 3
Beispiel: --pass 2

Steuert ein Multipass-Encoding. 1 führt einen 1st Pass durch, in dem die Statistikdatei angelegt wird. 2 führt einen Nth- bzw. 2nd-Pass durch, ohne die Statistikdatei zu aktualisieren. 3 führt ebenfalls einen Nth- bzw. 2nd-Pass durch und aktualisiert dabei die Statistikdatei. Mit der Durchführung eines 2-Pass-Encodings haben wir uns im x264-Konfigurationskapitel schon ausführlicher befasst.

Im 1st Pass werden einige Optionen, die nur bremsen und zu diesem Zeitpunkt noch nicht nötig sind, automatisch deaktiviert. Im einzelnen bedeutet das --ref 1 --no-8x8dct --me dia --trellis 0 --fast-pskip; außerdem --partitions none, wenn vom Benutzer keine i4×4-Partitionen vorgegeben sind, ansonsten --partitions i4x4; und schließlich --subme 2, wenn ursprünglich ein höherer Wert gesetzt war.

--slow-firstpass

Deaktiviert die Geschwindigkeitsoptimierungen im 1st Pass. Sollte ohne guten Grund nicht verwendet werden.

--bitrate <kbit/s> [wichtiger Parameter]

Definiert die Bitrate in kbit/s. Für ein 1-Pass-ABR-Encoding (also nicht --qp oder --crf) stellt der Wert die angestrebte durchschnittliche Datenrate dar. Im 2-Pass-Encoding definiert --bitrate die gewünschte Zielgröße der Videospur.

--bluray-compat

Erzwingt ein blu-ray-kompatibles Encoding und ist wichtig, wenn wir eine standardkonforme Video-Blu-ray erstellen. Der Schalter allein reicht aber für garantierte Kompatibilität zur Blu-ray nicht aus. Genauere Informationen dazu finden wir auf x264bluray.com.

Der Schalter hat keine Bedeutung, wenn lediglich unser Quellvideo von einer Blu-ray stammt! Solange die standardkonforme Video-Blu-ray nicht das Zielformat ist, schadet --bluray-compat dem Encoding.

Quantisierung, Ratecontrol

--no-mbtree

Deaktiviert die standardmäßig aktive Macroblocktree-Ratecontrol. Ist nur für sehr schnelle Encodings auf Kosten der Qualität interessant.

--rc-lookahead <Frames>

Werte: 0 bis zum Kleineren aus 250 oder maximalem Keyframe-Intervall (keyint).
Standard: 40
Beispiel: --rc-lookahead 60

Legt fest, wie viele Frames die Macroblocktree- und VBV-Algorithmen in die Zukunft schauen dürfen. Je höher der Wert, desto mehr Arbeitsspeicher und Rechenzeit wird benötigt. Den Standard beizubehalten, ist sinnvoll.

--vbv-maxrate <kbit/s>

Werte: 0 (nicht definiert) und positive ganze Zahlen
Standard: 0

Legt im Rahmen des VBV (Video Buffer Verifier) die maximal erlaubte Datenrate des Videos fest. Ist hauptsächlich für die Hardware-Wiedergabe interessant.

--vbv-bufsize <kbit>

Werte: 0 (nicht definiert) und positive ganze Zahlen
Standard: 0

Legt die Größe des VBV-Pufferspeichers (Video Buffer Verifier) fest. Ist hauptsächlich für die Hardware-Wiedergabe interessant.

--vbv-init <Füllstand>

Werte: 0.0 (leer) bis 1.0 (voll)
Standard: 0.9

Legt fest, zu welchem Prozentsatz der VBV-Puffer (Video Buffer Verifier) gefüllt werden muss, bevor zu die Wiedergabe startet. Ist hauptsächlich für die Hardware-Wiedergabe interessant.

--qpmin <Quantizer>

Werte: Ganze Zahlen von 1 bis 69
Standard: 0

Definiert den minimalen Quantizer, den x264 niemals unterschreitet. Eine Anpassung ist nicht nötig.

--qpmax <Quantizer>

Werte: Ganze Zahlen von 1 bis 69
Standard: 69

Definiert den maximalen Quantizer, den x264 niemals überschreitet. Eine Anpassung ist nicht nötig.

--qpstep <Quant-Delta>

Werte: Ganze Zahlen von 1 bis 50
Standard: 4

Legt für die Encodingmethoden 2-Pass und 1-Pass Bitrate fest, wie stark der Quantizer von einem Frame zum nächsten schwanken darf. Eine Anpassung ist nicht nötig.

--ratetol <Schwankung>

Werte: 0.1 bis 100.0, inf
Standard: 1.0

Definiert für die Encodingmethode 1-Pass Bitrate, wie stark die Bitrate eines einzelnen Frames von der angestrebten durchschnittlichen Bitrate abweichen darf.

--ipratio <Faktor>

Werte: 1.00 bis 10.00
Standard: 1.40

Legt fest, um welchen Faktor ein P-Frame stärker quantisiert werden soll als das I-Frame, das es als Referenz verwendet. Der Standardwert ist gut abgestimmt und sollte ohne sehr guten Grund nicht verändert werden.

--pbratio <Faktor>

Werte: 1.00 bis 10.00
Standard: 1.30

Legt fest, um welchen Faktor ein B-Frame stärker quantisiert werden soll als das P-Frame, das es als Referenz verwendet. Der Standardwert ist gut abgestimmt und sollte ohne sehr guten Grund nicht verändert werden.

--chroma-qp-offset <Quant-Delta>

Werte: Ganze Zahlen von -12 bis 12
Standard: 0

Ermöglicht es, die Farbinformationen (Chroma) des Bildes anders zu quantisieren als die Helligkeitsinformationen (Luma). Da Chroma weniger wichtig ist als Luma, ist die üblichere Wahl eine stärkere Quantisierung des Chroma-Anteils. Im Normalfall sollten wir die Option jedoch weglassen.

--aq-mode <Modus> [wichtiger Parameter]

Werte: 0 (aus), 1 (Variance AQ), 2 (Auto-VAQ).
Standard: 1
Beispiel: --aq-mode 1

Wählt den Algorithmus zur adaptiven Quantisierung, der wenig detaillierte Bildbereiche stärker quantisiert. Die eingesparten Bits können dann in anderen Teilen des Bilds verwendet werden, um dort Details besser zu erhalten.

0 deaktiviert AQ, 1 verwendet das normale statische Variance AQ, 2 nutzt die automatische VAQ-Variante, die die Stärke des Algorithmus je nach Eigenschaften der Szene anpasst. Der Standardwert 1 ist die sichere Wahl. 2 sollte zwar keine Probleme verursachen, ist aber offiziell noch als experimentell eingestuft.

--aq-strength <Stärke> [wichtiger Parameter]

Werte: positive Zahlen; nützlicher Bereich ca. 0.0 bis 2.0
Standard: 1.0
Beispiel: --aq-strength 1.0

Wählt die Stärke der adaptiven Quantisierung. Auch hier sollte normalerweise der Standardwert 1.0 genutzt werden.

--qcomp <Kurvenkompression>

Werte: 0.0 bis 1.0
Standard: 0.6

Legt fürs 2-Pass-Verfahren fest, ob im Verlauf des Films eher eine konstante Qualität oder konstante Bitrate erzielt werden soll. Wenn Macroblock-Tree aktiv ist, beeinflusst --qcomp dessen Stärke. Ansonsten entspricht der Wert 0.0 einem CBR-Encoding, d.h. jedes Bild erhält unabhängig von seiner Komplexität die gleiche Anzahl an Bits. 1.0 führt zu einem Encoding mit konstantem Quantizer, d.h. die Zielgröße kann nicht mehr eingehalten werden. Der Standardwert sollte nicht verändert werden.

--cplxblur <Stärke>

Werte: 0.0 bis 999.0
Standard: 20

Verringert beim 2-Pass-Encoding die Schwankungen bei der Quantizervergabe vor der Kurvenkompression. Den Standardwert sollten wir beibehalten.

--qblur <Stärke>

Werte: 0.0 bis 99.0
Standard: 0.5

Dieser Parameter verringert beim 2-Pass-Encoding die Schwankungen bei der Quantizervergabe nach der Kurvenkompression. Den Standardwert sollten wir beibehalten.

--qpfile "<Dateiname>"

Gibt den Namen einer Textdatei an, in der für bestimmte Einzelbilder des Films Frametyp und Quantizer individuell festgelegt werden können. Jedes veränderte Frame steht in der Textdatei auf einer eigenen Zeile mit folgender Syntax:

<Framenummer> <Frametyp> <Quantizer>

Frametyp ist ein einzelner Buchstabe mit folgender Bedeutung:

  • I = IDR-Frame
  • i = normales I-Frame
  • K = normales I-Frame, wenn Open GOP aktiv ist; sonst IDR-Frame
  • P = P-Frame
  • B = referenziertes B-Frame
  • b = nicht-referenziertes B-Frame

Quantizer ist ein gültiger H.264-Quantizer. Wenn Quantizer auf -1 gesetzt ist oder ganz fehlt, entscheidet x264 automatisch. Um für Frame Nummer 1000 ein IDR-Frame mit Quantizer 25 zu erzwingen, müsste in der Datei also folgende Zeile auftauchen:

1000 I 25

--cqm <Matrix>

Werte: jvt, flat
Standard: flat
Beispiel: --cqm flat

Wählt eine der beiden Standard-Quantisierungsmatrizen. Siehe auch das x264-Technikkapitel. --cqmfile hat eine höhere Priorität als --cqm, falls beide angegeben werden.

--cqmfile "<Matrixdatei>"

Werte: Gültiger Pfad zu einer Matrixdatei.
Beispiel: --cqmfile "D:\Matrizen\eqm_avc_hr.cfg"

Verwendet die benutzerdefinierte Quantisierungsmatrix aus der angegebenen Datei. Siehe auch das x264-Technikkapitel. --cqmfile hat eine höhere Priorität als --cqm, falls beide angegeben werden.

Analyse

--partitions <Partitionen> [wichtiger Parameter]

Werte: none, all oder mit Komma getrennte Kombination aus p8x8, p4x4, b8x8, i8x8, i4x4
Standard: p8x8,b8x8,i8x8,i4x4
Beispiele: --partitions p8x8,b8x8 oder --partitions all

Legt fest, welche Partitionsgrößen für Makroblocks verwendet werden dürfen. Siehe auch das x264-Technikkapitel. Mehrere Werten werden mit einem Komma (,) getrennt. p4x4 benötigt auch p8x8. Für i8x8 muss die 8x8-DCT-Transformation aktiv sein, d.h. der Schalter --no-8x8dct darf nicht gesetzt sein.

Da Partitionen maßgeblich die Effizienz von x264 beeinflussen, sollten wir sie nicht zu sehr einschränken. Lediglich auf p4x4 können wir i.d.R. verzichten. Die Berechnung, ob diese Partitionierung sinnvoll ist, drückt spürbar auf die Geschwindigkeit, sie fällt aber bei unseren üblichen Auflösungen (und erst recht bei den noch höheren HD-Auflösungen) nur sehr selten positiv aus, so dass im fertigen Encoding so oder so kaum P4×4-Partitionen auftauchen.

--me <Modus> [wichtiger Parameter]

Werte: dia, hex, umh, esa, tesa
Standard: hex
Beispiel: --me umh

Wählt den Algorithmus für die Bewegungssuche auf der Ebene von ganzen Pixeln. In der oben angegebenen Reihenfolge werden die Modi genauer und langsamer.

  • 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

Beim Standard hex zu bleiben, ist nur auf langsameren Computern sinnvoll. Ansonsten sollten wir eher umh verwenden. Die geringe Genauigkeitssteigerung von esa und tesa ist deren deutlich höheren Rechenaufwand meistens nicht wert.

--merange <Radius>

Werte: Ganze Zahlen zwischen 4 und 1024
Standard: 16
Beispiel: --merange 16

Legt die Größe des Bereichs fest, in dem nach Bewegung gesucht wird. Ist nur relevant für die Modi ab --me umh. Höhere Werte als 16 sind selten sinnvoll. Achtung: Hohe Werte sind extrem langsam!

--mvrange <Pixel>

Werte: positive Zahlen und -1 (auto)
Standard: -1

Definiert die maximal erlaubte Länge eines Bewegungsvektors. Wir sollten die standardmäßig aktive Automatik beibehalten.

--mvrange-thread <Puffer>

Werte: Ganze Zahlen und -1 (auto)
Standard: -1

Setzt den Bewegungsvektor-Puffer, der zwischen zwei Encodingthreads verwendet wird. Benötigt keine Anpassung.

--subme <Qualität> [wichtiger Parameter]

Werte: Ganze Zahlen zwischen 0 und 11.
Standard: 7
Beispiel: --subme 7

Definiert die Qualitätsstufe für die Subpixel-Bewegungssuche und die Partitionsentscheidung. 1 ist schnell und ungenau, 11 sehr langsam mit den besten Ergebnissen.

  • 0 = keine Subpixel-Bewegungssuche.
  • 1 = SAD, ein QPel-Durchlauf.
  • 2 = SATD, zwei QPel-Durchläufe
  • 3 = HPel für den Makroblock, QPel für die MB-Partitionen.
  • 4 = immer QPel
  • 5 = Multi-QPel, zusätzlich bidirektionale Bewegungssuche
  • 6 = wie 5, und RDO für I- und P-Frames
  • 7 = wie 5, und 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.
  • 11 = vollständige RDO. Wie 10, nur ohne vorzeitige Abbruchbedingungen.

Mindestens --subme 7 ist i.d.R. eine gute Wahl. Werte unter 5 sollten wir für qualitativ hochwertige Encodings nie verwenden.

--psy-rd <rd>:<trellis> [wichtiger Parameter]

Werte: jeweils 0.0 bis 10.0
Standard: 1.0:0.0
Beispiel: --psy-rd 1.0:0.15

Steuert Einsatz und Stärke der psychovisuellen Algorithmen, die bei der Kompressionsentscheidung die Komplexitätswahrnehmung des menschlichen Sehapparats berücksichtigen. Setzt sich aus PsyRD <rd> und PsyTrellis <trellis> zusammen. 0.0 schaltet den jeweiligen Algorithmus ab. PsyRD benötigt --subme 6 oder höher. PsyTrellis benötigt --trellis 1 oder --trellis 2.

--no-psy

Schaltet alle psychovisuellen Optimierungen ab. Das betrifft PsyRD, PsyTrellis und AQ sowie einige interne Psy-Optimierungen, die über die Kommandozeile nicht erreichbar sind.

--trellis <Modus> [wichtiger Parameter]

Werte: 0 (deaktiviert), 1 (nur für endgültigen Block), 2 (bei jeder Entscheidung)
Standard: 1
Beispiel: --trellis 1

Trellis wägt zwischen Detailerhalt und geringerer Datenrate ab, indem es Koeffizienten nach bestimmten Kriterien auf- oder abrundet. Je nach Einstellung der Option --psy-rd wird PsyTrellis oder klassisches Trellis verwendet. --trellis 2 ist recht langsam, erreicht aber besonders in der Psy-Variante etwas bessere Ergebnisse als --trellis 1. Ganz abschalten sollten wir Trellis nicht.

--weightp <Modus>

Werte: 0 (deaktiviert), 1 (Blindmodus), 2 (intelligente Analyse)
Standard: 2
Beispiel: --weightp 2

Steuert die gewichtete Bewegungskompensierung für P-Frames. 0 deaktiviert die Funktion, 1 verwendet den blinden Modus ohne Analyse. 2 sucht im Video nach Überblendungen und passt die Gewichtung entsprechend an.

Da gewichtete P-Frames lange Zeit eine ungenutzte Funktion des H.264-Standards waren, kommen v.a. Manche Hardwareplayer mit solchen Videos nicht zurecht.

--no-mixed-refs

Verbietet es dem Encoder, Referenzbilder nicht nur für jeden Makroblock, sondern für jede Blockpartition einzeln auszuwählen. Sollte normalerweise nicht gesetzt werden.

--no-chroma-me

Standardmäßig verwendet x264 neben den Helligkeitsinformationen (Luma) auch die Farbinformationen (Chroma) zur Bewegungssuche. Mit --no-chroma-me können wir das auf die Luminanz beschränken. Da die zusätzliche Chroma-Suche die Geschwindigkeit nicht zu sehr beeinträchtigt, sollte der Schalter nicht gesetzt werden.

--no-8x8dct

Deaktiviert die 8×8-DCT-Transformation aus dem H.264 High Profile. Sollte nicht gesetzt werden.

--no-fast-pskip

Deaktiviert die beschleunigte Verarbeitung von P-Frames. Wird normalerweise nicht benötigt.

--no-dct-decimate

Verhindert, dass im Rahmen der DCT sehr kleine Koeffizienten auf Null gerundet werden. Wird normalerweise nicht benötigt.

--deadzone-inter <Größe>

Werte: Ganze Zahlen zwischen 0 und 32.
Standard: 21

Deadzones setzen an derselben Stelle an wie Trellis, arbeiten aber deutlich simpler und deshalb weniger effektiv. Niedrige Deadzone-Werte vernichten weniger Bilddetails, erhöhen aber die Datenrate deutlich. Hohe Deadzones glätten das Bild stärker im Tausch für eine höhere Komprimierbarkeit.

--deadzone-inter setzt die für P- und B-Frames gültige Deadzone. Ist Trellis aktiv, wird die Deadzone-Einstellung praktisch bedeutungslos. Eine Anpassung ist demnach nur dann evtl. sinnvoll, wenn wir Trellis nicht nutzen.

--deadzone-intra <Größe>

Werte: Ganze Zahlen zwischen 0 und 32.
Standard: 11

--deadzone-intra ist das Gegenstück zu --deadzone-inter und gilt für I-Frames. Auch hier ist eine Anpassung nur dann evtl. sinnvoll, wenn Trellis nicht aktiv ist.

Zonen

Zonen definieren Abschnitte im Video, für die individuell das Qualitätsniveau und eine Reihe von anderen Einstellungen angepasst werden können.

--zones <Start>,<Ende>,<Modus>[,<Optionen>][/<Start>,<Ende>,<Modus>[,<Optionen>]]...

Die einzelnen Parameter einer Zone trennen wir mit Komma (,). Zwischen mehreren Zonen steht ein Schrägstrich (/) als Trennzeichen. Jede Zone besitzt drei Pflichtparameter.

Start steht für die Nummer des ersten Frames der Zone. Das erste Frame des gesamten Videos hat die Nummer 0. Ende steht für die Nummer des letzten Frames der Zone.

Modus definiert den Encodingmodus der Zone. Mit q=<Quant> legen wir fest, dass die Zone mit einem konstanten Quantizer (zwischen 0 und 51) encodiert wird. Mit b=<Gewicht> definieren wir eine Zone, die mit einem relativen Gewicht zum restlichen Film behandelt wird. Werte liegen zwischen 0.01 und 100.0 (Punkt als Dezimaltrenner!), die Normalgewichtung hat den Wert 1.0.

Optionen sind weitere x264-Einstellungen, die pro Zone angepasst werden können. Sie werden in der Form Option=Wert angegeben. Die Notation von Wert folgt der entsprechenden x264-Option. Möglich sind: b-bias, chroma-me, dct-decimate, deadzone-inter, deadzone-intra, deblock, direct, fast-pskip, me, merange, mixed-refs, no-8x8dct, no-b-pyramid, no-chroma-me, no-dct-decimate, no-deblock, no-fast-pskip, no-mixed-refs, nr, psy-rd, ref, scenecut, subme, trellis.

Einige Einschränkungen im Gegensatz zur globalen Verwendung der Optionen den müssen wir beachten.

  • In einer Zone kann me nur dann auf esa oder tesa gesetzt werden, wenn global --me esa oder --me tesa definiert ist.
  • Merange kann den global definierten Wert nicht überschreiten, wenn --me esa oder --me tesa gesetzt ist.
  • Subme kann nur geändert werden, wenn global nicht --subme 0 definiert ist.
  • Die Anzahl an Referenzframes darf nur verringert werden; d.h. sie kann nie den Wert überschreiten, der global mit --ref gesetzt wurde.
  • Scenecut kann in einer Zone nur verändert werden, nich an- oder ausgeschaltet. Außerdem darf global die Szenenerkennung nicht deaktiviert sein (d.h. kein --no-scenecut).

Machen wir uns diese Syntax an einem Beispiel klar. Nehmen wir an, wir möchten für einen Film zwei Zonen definieren:

  • Für die ersten 10.000 Frames des Videos ein konstanter Quantizer von 22.
  • Die Frames 20.000 bis 25.000 sollen bei der Bitratenverteilung als doppelt so wichtig wie der Rest des Films behandelt werden. Außerdem wollen wir Trellis 2 verwenden und den Deblocking-Filter abschalten.

Die dazu passende Kommandozeile sieht folgendermaßen aus:

--zones 0,9999,q=22/20000,25000,b=2.0,trellis=2,no-deblock

Videofilter (Crop und Resize)

x264 kann in kleinerem Umfang das Video filtern, so dass wir unter manchen Umständen komplett auf AviSynth verzichten können. Das gilt besonders fürs Blu-ray-Encoding, weil wir dort nicht schon vom Quellformat zum Umweg über AviSynth gezwungen werden.

Das Bild zu skalieren und schwarze Balken abzuschneiden, sind die beiden üblichsten Aktionen. Wir sehen uns die wichtigen Optionen der entsprechenden Filter crop und resize genauer an.

Eine Kette von Videofiltern konfigurieren wir mit folgender Syntax:

--vf <Filtername>:<Optionen>[/<Filtername>:<Optionen>][...]]

Ein einzelner Filter besteht immer aus der Konstruktion <Filtername>:<Optionen>, mehrere Filter werden durch einen Schrägstrich (/) getrennt. Abgearbeitet werden die Filter in der Reihenfolge, in der sie in der Kommandozeile stehen.

Zuschneiden

Die Syntax für den Crop-Filter lautet folgendermaßen:

crop:<links>,<oben>,<rechts>,<unten>

Die vier Werte sind positive ganze Zahlen, die der Anzahl an Pixeln entsprechen, die in der jeweiligen Dimension abgeschnitten werden. Bei interlaced-Video muss jeder Wert glatt durch 4 teilbar sein, bei progressivem Video glatt durch 2.

Skalieren

Der Skalierungsfilter lässt sich sehr flexibel konfigurieren und passt zum Teil automatisch Auflösung oder Pixel-Seitenverhältnis an, um ein verzerrtes Bild zu vermeiden. Diese Automatik zu verstehen, ist ähnlich kompliziert wie alle nötigen Werte selbst zu berechnen und anzugeben. Deswegen konzentrieren wir uns auf die manuelle Methode.

Die vereinfachte Syntax für den Skalierungsfilter lautet folgendermaßen:

resize:width=<Breite>,height=<Höhe>,sar=<x:y>[,method=<Resize-Algorithmus>]

Breite und Höhe geben die Zielauflösung in Pixel an. Die Werte müssen in den meisten Farbräumen mindestens glatt durch 2 teilbar sein. Mit sar setzen wir das Pixel-AR der Zielauflösung in der von der --sar-Option gewohnten Schreibweise, z.B. 1:1 für quadratische Pixel. Wenn wir im Resize-Filter das AR angeben, wird --sar ignoriert.

Die method-Option bestimmt den Algorithmus, mit dem skaliert wird. Die gebräuchlichsten Werte sind bicubic, lanczos und spline. Möglich sind außerdem fastbilinear, bilinear, experimental, point, area, bicublin, gauss und sinc. Standardwert ist bicubic.

Beispiel

Nehmen wir ein anamorphes HD-Video mit 1440×1080 Pixeln, so wie es einige Videokameras aufnehmen. Ein solches Video hat ein Pixel-Seitenverhältnis von 4:3 und muss beim Abspielen auf ein volles 1920×1080-Bild gestreckt werden. Wir wollen oben und unten jeweils 140 Pixel schwarze Balken abschneiden und dann per Lanczos-Resizer auf die kleine HD-Auflösung mit quadratischen Pixeln herunterskalieren, d.h. auf 1280×560. Die passende Filterkette dafür sieht folgendermaßen aus:

--vf crop:0,140,0,140/resize:width=1280,height=560,sar=1:1,method=lanczos

Dateinamen und Videoeigenschaften

"<Quelldatei>" [wichtiger Parameter]

Werte: Pfad zu einer unterstützten Quelldatei oder - (stdin).
Beispiel: "D:\Quellscript.avs"

Gibt die Quelldatei an. x264 versteht unkomprimierte Videodaten (als Rohdatenstrom oder im YUV4MPEG-Container), AviSynth-Skripte und alle Formate, die von LibAV bzw. FFmpeg dekodiert werden können. Das deckt fast sämtliche Formate ab, die uns jemals in die Finger kommen könnten. Für unsere Zwecke ist im Wesentlichen AviSynth und LibAV/FFmpeg interessant, um DVD- und Bluray-Quellen zu verarbeiten.

Containerlose Rohdaten sollten die Dateiendung .264 haben. Außerdem kann x264 bei solchen Dateien die Auflösung und Bit-Tiefe nicht automatisch bestimmen, sodass wie sie mit --input-res und --input-depth manuell angeben müssen.

--output "<Zieldatei>" [wichtiger Parameter]

Werte: Gültiger Dateipfad.
Beispiel: --output "D:\Zielvideo.mkv"

Wählt Dateinamen und Format der Zieldatei. Mit der Dateiendung .264 wird ein roher H.264-Datenstrom erzeugt. Die Endungen .mkv, .mp4 oder .flv verpacken das Video in den Matroska-, MP4- oder Flash-Container.

--stats "<Statistikdatei>" [wichtiger Parameter]

Werte: Gültiger Dateipfad.
Standard: x264_2pass.log
Beispiel: --stats "D:\Video\x264.stats"

Legt Pfad und Dateinamen der für ein N-Pass-Encoding nötigen Statistikdatei fest. Standardmäßig wird eine Datei x264_2pass.log im aktuellen Ordner erzeugt.

--sar <x:y> [wichtiger Parameter]

Werte: Für x sowie y ganze Zahlen zwischen 1 und 65535.
Beispiel: --sar 16:11

Definiert das Pixel Aspect Ratio der Zieldatei. Das entspricht dem Setzen des AR-Flags, von dem im Anamorph-Kapitel die Rede ist. Für klassische Encodings mit quadratischen Pixeln geben wir immer --sar 1:1 an oder lassen die Option ganz weg.

Für PARs definiert H.264 zwei Felder (für x und y), die je einen vorzeichenlosen 16-Bit-Integer enthalten. D.h. der maximale Wert, der darin gespeichert werden kann, ist 65535. Auch wenn sich x264 nicht darüber beschwert, sollten wir deshalb größere Werte niemals eingeben, denn die können nicht in den Videostream geschrieben werden.

--frame-packing <L-/R-Anordnung>

Werte: 0, 1, 2, 3, 4, 5
Beispiel: --frame-packing 3

Gibt für 3D-Video an, wie die Pixel für linkes (L) und rechtes (R) Auge im Quellvideo angeordnet sind. x264 verändert diesen Wert nicht, benötigt ihn aber, um die Quelle korrekt zu verarbeiten. Die Werte 0 bis 4 kombinieren L- und R-Bild in einem großen Frame.

  • 0 = Schachbrett: Einzelpixel immer abwechselnd für L und R
  • 1 = Einzelpixel für L und R spaltenweise abwechselnd
  • 2 = Einzelpixel für L und R zeilenweise abwechselnd
  • 3 = Komplettbild für L auf der linken Seite, für R rechts daneben
  • 4 = Komplettbild für L oben, für R darunter
  • 5 = frameweise abwechselnd für L und R

--fps <Framerate>

Werte: typischerweise 23.976, 25.0 oder 29.97
Beispiel: --fps 25.0

Definiert die Bildrate der Zieldatei in Bildern pro Sekunde (fps). Wird bei AviSynth als Quelle automatisch ermittelt.

--level <Level>

Werte: Gültige H.264-Level: 1, 1.1, 1.2, 1.3, 2, 2.1, 2.2, 3, 3.1, 3.2, 4, 4.1, 4.2, 5, 5.1
Standard: Automatik

Schreibt das gewünschte H.264-Level als Information in den Bitstream. x264 passt die Anzahl an Referenzframes falls nötig an das gewünschte Level an, es sei denn, wir haben ausdrücklich mit --ref einen Wert vorgegeben. Davon abgesehen stellt x264 in keiner Weise sicher, dass die Beschränkungen des angegebenen Levels auch tatsächlich eingehalten werden. Darum müssen wir uns wenn nötig selbst kümmern.

Steuerung von x264.exe

--threads <Anzahl>

Werte: Ganze Zahlen von 1 bis 128, auto.
Standard: auto
Beispiel: --threads 6

Hier stellen wir ein, wie viele Threads x264 zum Encodieren verwenden soll. Die Standardeinstellung auto ist meistens ausreichend, um den Prozessor voll auszulasten. x264 verwendet in dem Fall das 1,5-fache der logischen CPU-Anzahl, z.B. sechs Threads für einen Quad-Core-Prozessor. Falls wir damit keine Vollauslastung erreichen, passen wir die Threadanzahl manuell an. Aber Vorsicht: Fast immer ist nicht x264 der Flaschenhals sondern das Decodieren/Filtern des Quellvideos.

--thread-input

Verwendet für die Verarbeitung des AviSynth-Skripts einen eigenen Thread. Wie schon --threads ist das nur für Multicore-Systeme interessant und sollte dann auch gesetzt werden. x264 aktiviert die Option automatisch, wenn mehr als ein Encodingthread benutzt wird.

--seek <Startframe>

Framenummer des Bildes, an dem das Encoding starten soll. Das erste Bild des Videos hat die Nummer 0.

--frames <Frameanzahl>

Maximale Anzahl an zu encodierenden Frames. Ist die Zahl erreicht, bricht x264 ab, auch wenn das Ende des Quellvideos noch nicht erreicht ist.

--verbose

Gibt Statusinformationen zu jedem einzelnen Frame am Bildschirm aus.

--no-progress

Deaktiviert die allgemeine Fortschrittsanzeige.

--quiet

Unterdrückt sämtliche Statusmeldungen.

--psnr

Aktiviert die Berechnung des PSNR-Wertes, der für ein normales Backup nicht notwendig ist.

--ssim

Aktiviert die Berechnung des SSIM-Wertes, der für ein normales Backup nicht notwendig ist.

--sync-lookahead <Frames>

Werte: Ganze Zahlen zwischen (<Anzahl Threads> + <B-Frame-Puffergröße>) und 250.
Standard: B-Frame-Anzahl + 1
Beispiel: --sync-lookahead 50

Definiert die Puffergröße in Frames für die in die Zukunft gerichteten Algorithmen. Sollte ohne konkreten Grund nicht gesetzt werden.

Kommentare