CABAC CAVLC H.264-Encoding

Im „Main”- und „High”-Profil von H.264 stehen beim MPEG-4-Videoencoding zwei verschiedene Varianten für die Entropiekodierung zur Verfügung: CAVLC und CABAC. Beide werden auch vom Flash Player unterstützt.

Doch was ist überhaupt Entropiekodierung? Und welche der beiden Methoden ist besser?

Entropiekodierung

Die deutsche Wikipedia-Ausgabe schreibt über Entropiekodierung folgendes:

Die Entropiekodierung ist eine Methode zur verlustfreien Datenkompression, die jedem einzelnen Zeichen eines Textes eine unterschiedlich lange Folge von Bits zuordnet.

Es handelt sich also um eine verlustfreien Methode, um Daten zu komprimieren. Das Prinzip ist eigentlich ganz einfach: Datensymbole, die sehr häufig auftreten, werden mit einem kurzen Codewort kodiert. Die kurzen Codeworte brauchen deshalb wenig Platz.

Selten auftretende Datensymbole speichert man mit einem langen Codewort.

Unter dem Strich werden dadurch die Daten im Idealfall am effizientesten abgespeichert.

Einer der bekanntesten Vertreter aus der Entropiekodierung ist sicher die Huffman-Kodierung.

CAVLC

Die Abkürzung CAVLC steht für „Context Adaptive Variable Length Coding” (kontextabhängige Lauflängenkodierung).

Diese Methode ist qualitativ nicht so gut wie CABAC. Dies hat allerdings auch einen Vorteil: Durch die mathematisch geringere Komplexität sind geringere Anforderungen beim Decoding erforderlich (= wenig Rechenleistung). Somit ist CAVLC auch für ältere Rechner oder mobile Geräte mit schwächeren Prozessoren gedacht.

CABAC

CABAC bedeutet „Context-adaptive binary arithmetic coding” (kontextabhängige binär-arithmetische Kodierung
).

Diese Variante liefert bessere Ergebnisse. Üblicherweise wird von 5 bis 15% ausgegangen.

Wer hätte es gedacht: Als Gegenleistung für die bessere Qualität benötigt CABAC mehr Performance beim Abspielen.

Deshalb ist es auch im einfachsten H.264-Profil, dem „Baseline”-Profil, nicht vorhanden, sondern nur im „Main”- oder „High”-Profil.

Beispiel

Ein kleines Beispiel zeigt den Unterschied. Die Screenshots stammen aus einem Video, das mit jedem Verfahren (CAVLC/CABAC) einmal encodiert wurde. Die übrigen Einstellungen waren identisch.

Per Mausklick kann man zwischen den Screenshots umstellen. Es ist etwas größer, da die Screenshots unkomprimiert enthalten sind.

Beispiel anschauen (1,2 MB, kein Preloader)

Empfehlung

Aus qualitativer Sicht sollte man CABAC logischerweise immer aktivieren.

Eine interessante Empfehlung macht Fabio Sonatti in seinem MAX-Vortrag: Man sollte immer CABAC verwenden. Gibt es Performance-Probleme, sollte man statt auf CAVLC zurückzugreifen besser z.B. die Auflösung reduzieren.