Praxis: Freeware Encoder Anwendungsbeispiel x264/StaxRip

Kommerzielle H.264-Encoder

Hersteller wie z.B. Apple, Nero, MainConcept, Sony und LEAD bieten Softwareprodukten mit H.264 konformen Encoder an. Diese weisen jedoch teilweise einige Nachteile auf: Einerseits sind sie in der Anschaffung nicht gerade billig, weiters fehlen oft wichtige Features des H.264-Standards und darüber hinaus  lassen  die Encoder-Konfigurationsmöglichkeiten häufig zu wünschen übrig.

x264

Für Anwender die kein Vermögen für einen hochwertigen kommerziellen H.264-Encoder ausgeben wollen und die gerne ein hohes Maß an Kontrolle über die Kompressionseinstellungen haben möchten, stellt der unter General Public License erhältliche X264-Encoder (erfüllt die High Profile Spezifikation) eine sehr gute Alternative dar. Dabei handelt es sich um ein Komandozeilenprogramm welches als Eingangsdaten unkomprimierte Rohdaten im YUV 4:2:0 Format, AVI und Avisynt-Daten akzeptiert. Die Kommandozeilensteuerung bietet zwar totale Kontrolle ist jedoch etwas mühsam. Es bietet sich an den x264-Encoder nicht direkt zu verwenden, sondern sich eines der vielen Freeware Videoverarbeitungstools mit GUI zu bedienen, die neben der H.264-Komprimierung noch zahlreiche weitere Werkzeuge beinhalten.

H.264 Kompressionseinstellungen anhand x264/StaxRip

Bei StaxRip handelt es sich um ein GUI, das eine Vielzahl von Freeware Videobearbeitungstools zusammenführt. Das Programm stellt überdies viele Voreinstellungen für Filter und Kompressionsparameter zur Verfügung. Weiters ermöglicht es Stapelverarbeitung von Videodateien.

Im Folgenden werden die wichtigsten H.264-Encoding-Einstellungen anhand eines Beispiels erklärt:

Als Eingangsdaten dient ein Rohdatenclip der mit einem HD-Camcorder aufgenommen wurde. Dabei handelt es sich bereits um H.264 komprimierte Videodaten (16 MBit/s) in einem MPEG2-Transportstream.

Zunächst wird die Quelldatei geöffnet – falls dazu benötigte Softwarekomponenten fehlen, öffnet sich ein Dialogfenster in dem die Programme automatisch heruntergeladen werden können.

Nun erfolgt die Einstellung/Auswahl der Filter/Module wie z.B. Resizing, Cropping, Cutting, Deinterlacing, etc. und des Container-Formats, die Eingabe der gewünschten Größe der Zieldatei, die Angabe der Audiospuren sowie des zu verwendenden Encoders inkl. Voreinstellungen. Mit einem Klick auf Codec Configuration können dann die Encoder-Parameter verändert werden.

Im Falle des x264 Encoders öffnet sich ein Fenster mit 9 Rubriken. Es ist zu beachten, dass die Parameter nicht vollständig unabhängig voneinander gewählt werden können. Schließt ein gewisser Wert eines Parameters eine anderen aus, so wird dieser deaktiviert angezeigt. Es ist auf jeden Fall ratsam, die Optionen und Parameter nur ausgehend von einem vorher eingestellten Profil zu verändern. Stellt sich heraus, dass man sehr viel ändern möchte, sollte man zunächst ein anderes Profil auswählen, da die Qualität und vor allem die notwendige Rechenzeit vom  Zusammenspiel der eingestellten Optionen und Parameter abhängen. 

Common

Die drop-down Liste mode bietet folgende Auswahlmöglichkeiten:

  • Bitrate
  • Quantizer
  • Quality
  • Two Pass
  • Three Pass

Single-Pass-Methoden:

Ist die Option Bitrate eingestellt, versucht der Encoder die eingestellte Zieldateigröße zu treffen, wobei leichte Anpassungen der Bitrate an die Komplexität erlaubt sind. Beim sogenannten quantizer scale parameter (QP) handelt es sich um eine ganze Zahl, welche die „Stärke“ der Kompression für jedes Frame angibt. Mit der Option Quantizer kann dieser Wert eingestellt werden. Je höher er gewählt wird, desto geringer wird die Qualität des Videos. Wählt man Quality so kann man einen Durchschnittswert für den QP angeben. Der Encoder versucht in diesem Fall die optische Qualität für das gesamte Video aufrecht zu erhalten. Typische Werte für den QP liegen zwischen 18 (sehr hohe Qualität) und 30 (niedrigere Qualität). Spielt die tatsächliche Zieldateigröße keine große Rolle, so ist die Option Quality mit einem niedrigen QP-Wert die beste Wahl.

N-Pass-Methoden:

Ist es wichtig eine gewisse Zieldateigröße genau zu treffen und spielt die Encodingzeit eine untergeordnete Rolle, so sollte die Two oder Three Pass Methode gewählt werden. Im ersten Durchlauf wird die Komplexität der einzelnen Frames des Videos und deren Ähnlichkeit zueinander, sowie die Position von Bildschnitten (Szenenwechsel) analysiert. Mit dieser Information bestimmt der Encoder dann den QP für jedes Frame unter Berücksichtigung der gewünschten Dateigröße und konstanter optischer Qualität.

B-Frames: gibt die maximal erlaubte Anzahl aufeinanderfolgender B-Frames an. Dieser Wert kann zwischen 0 und 16 liegen. Je höher er gewählt wird, desto mehr Spielraum hat der Encoder bei konstanter Qualität die Datenmenge zu reduzieren, desto höher ist aber auch der Rechenaufwand.

Reference Frames: gibt die maximal erlaubte Anzahl an Referenzen an. Für den Wert gilt dasselbe wie für die B-Frames.

Loop Filter: der integrierte Deblocking-Filter sollte immer aktiviert werden. Der Alpha-Wert gibt die Stärke der Glättung an und der Beta-Wert bestimmt ab welcher Stufe zwischen den Blöcken geglättet werden soll. Die Standardwerte funktionieren zufriedenstellend.

B-Frames

Adaptive: sollte auf jeden Fall aktiviert werden. Die Anzahl der B-Frames wird an den Verlauf des Videos angepasst.

Pyramid: wenn aktiv dürfen B-Frames auf andere B-Frames referenzieren. Verbessert Qualität und erhöht Rechenaufwand.

RDO: Rate/Distortion-Optimierung. Die gesteigerte Qualität muss dem erhöhten Rechenaufwand gegenübergestellt werden.

Weighted Prediction: Referenzen können gewichtet werden – Praktisch bei vielen Aus, Ein- und Überblendungen.

Bidirectional ME:  wenn aktiv, sind zwei Bewegungsvektoren pro Makroblock erlaubt. Damit erhöhen sich die Möglichkeiten von Referenzen.

Direct Mode: B-Frames berechnen Bewegungsvektoren aus dem Frame (spatial), aus der Abfolge der Frames (temporal), automatisch mit einer der zwei Methoden oder gar nicht (none).

Bias: beeinflusst die Häufigkeit von B-Frames. Negative Werte verringern sie, positive Werte vergrößern sie.

Frame Options

Scene Cut: steuert die Sensitivität für Szenenwechsel. Je höher dieser Wert ist, desto eher wird ein Szenenwechsel erkannt. Mit dem Standardwert von 40 erhält man meist gute Ergebnisse. Zu beachten ist, dass für hohe Werte natürlich die Anzahl der eingesetzten I-Frames und damit die Dateigröße ansteigen.

CABAC: Context Adaptive Binary Arithmetic Coding. Diese Option sollte aktiviert werden, da es sich hierbei um eine verbesserte Variante der verlustlosen Entropiecodierung handelt. Da dadurch auch der Dekodieraufwand steigt, sollte diese Option nicht verwendet werden, wenn das Video auf sehr leistungsschwachen Decodern abgespielt werden soll.

GOP: Group of Pictures. Hier kann der Minimale/Maximalen Abstand zwischen zwei I-Frames konfiguriert werden. Als eine Vernünftige Wahl für die untere Grenze kann die Framerate angesehen werden. Für den maximalen Abstand empfiehlt sich die 10-fache Framerate.

Analysis

Mixed references: Erlaubt unabhängige Referenzen für die Partitionen eines Makroblocks. Sollte aktiviert werden, wenn für Reference Frames  ein hoher Wert eingestellt wurde.

No early skip detection on P-Frames: Sollte deaktiviert bleiben. In diesem Fall werden Makroblöcke in P-Frames die sich nur sehr wenig ändern, nicht dem vollständigen Encodingvorgang unterzogen. Aktiviert man diese Option verbessert sich die Qualität leicht, jedoch auf Kosten der Rechenzeit.

No chroma in motion estimation: Die Farbinformation wird in den letzten Schritten der Subpixel-Bewegungssuche verwendet. Dieser Vorgang benötigt nicht sehr viel Rechenzeit, deshalb sollte diese Ausschluß-Option nicht aktiviert werden.

Maximum motion vector search range: Legt die maximale Entfernung für die Bewegungssuche fest. Der Standardwert von 16 kann für HD- und bewegungsintensive Videos erhöht werden.

Motion estimation methode: Auswahl des Bewegungssuchmusters: Nach dem Aufwand geordnet kann entweder diamond, hexagon, multi hex oder exhaustiv gewählt werden. In den meisten Fällen erzielt man mit hexagon oder multi hex sehr gute Ergebnisse.

Subpixel motion estimation: Konfiguriert die Genauigkeit der Subpixel-Bewegungssuche und der Partitionierung. Ein höherer Wert entspricht einer höheren Genauigkeit.

Trellis RD Quantization: Die Koeffizienten im Frequenzraum werden nach dem Quantisieren gerundet. Die Trellis-Funktion beeinflusst diese Rundung und verbessert das PSNR (Peak Signal to Noise Ratio). Es kann zwischen disabled, final MB (vollständig quantisierter Makroblock) und always (für jede einzelnen Quantisierungschritt) gewählt werden. Bei der Option always zahlt sich der enorm erhöhte Rechenaufwand nicht aus. Bei Two-Pass ist final MB eine gute Wahl.

No DCT decimate: Sind für eine Partition alle Koeffizienten sehr klein so werden sie standardmäßig auf Null gesetzt. Wird No DCT decimate aktiviert, so erfolgt keine Nullsetzung – sollte im Allgemeinen jedoch deaktiviert bleiben.

Partitions

Hier kann bestimmt werden, in welche Partitionen die Makroblocks für die inter- und intra-Kompression zerlegt werden können. Im Allgemeinen sollte man immer alle außer P4x4 (nur für hohe Bitraten und niedrige Auflösungen) aktivieren. Die 8x8 DCT Option sollte ebenfalls gesetzt sein – damit kann die Umwandlung in den Frequenzraum entweder auf einem 4x4 oder 8x8 Block erfolgen.

Rate Control

Hier kann die adaptive Quantisierung eingestellt werden. Die Standardwerte sollten im Allgemeinen nicht verändert werden. Die Parameter VBV Buffer Size und Max Bitrate ermöglichen die Anpassung an gegebene Hardwarebeschränkungen.  

Input Output

Show progress: Sollte aktiviert sein, damit überwacht werden kann, wie weit die Kompression fortgeschritten ist.

no PSNR: Sollte ebenfalls ausgewählt sein, außer die PSNR (Peak Signal to Noise Ratio) ist von Interesse.

no SSIM: Sollte ebenfalls ausgewählt sein, außer SSIM (Structural Similarity) ist von Interesse.

Threads: Sollte auf die jeweilige Anzahl von CPU-Cores gesetzt werden, außer es ist geplant einen weiteren rechenintensiven Prozess parallel laufen zu lassen. Bei Ungewissheit einfach auf 0=auto lassen.

Level: Sollte im Allgemeinen deaktiviert bleiben, außer es ist gewünscht einem gewissen im H.264 Standard definierten Level zu entsprechen.

Command Line

Hier kann unter remove from preceding passes eingestellt werden, welche Optionen von allen Durchläufen außer dem letzten entfernt werden. Im Feld add to preceding passes können für diese Durchläufe zusätzliche Optionen gesetzt werden. Im Allgemeinen erledigt Stax Rip diese Einstellungen automatisch.

Stax Rip

Hier können noch Einstellungen für den Kompressionstest vorgenommen werden.

Vorgehensweise um Videos direkt aus einem NLE (Adobe Premiere, Sony Vegas, etc.) mit StaxRip bzw. x264 zu verarbeiten und komprimieren.

Die erste Möglichkeit ist die ffdshow Filter zu installieren. Beim Rendern kann dann ffdshow als Kompression gewählt werden. Im ffdshow Menü wählt man dann den x264 Encoder aus. Leider sind die Konfigurationsmöglichkeiten etwas eingeschränkt und die N-Pass-Methoden funktionieren nicht richtig.

Die flexiblere Lösung besteht in der Verwendung eines Frameservers der z.B. von Debugmode als Freeware angeboten wird. Dabei wählt man als Ausgangsfiletype den DebugMode Frameserver und erzeugt damit ein Dummy-Avi-File. Diese Datei kann dann direkt als Quelldatei für Stax Rip verwendet werden. Durch diese Vorgehensweise wird die höchstmögliche Qualität erhalten und viel Rechenzeit und Speicherplatz gespart.