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.
[ad]
Sofern das Video HD Inhalt bietet beispielsweise 1080p oder 720p und auf einem Netbook abgespielt werden soll kann man so einfach nicht urteilen ob CAVLC oder CABAC benutzt werden sollte.
Meist ist man hier ei der Auflösung auf 720p festgelegt, da 1080p so oder so nur mit starkem Ruckeln abgespielt werden kann. Die Auflösung noch weiter als 720p zu reduzieren ergibt keinen Sinn, da hierdurch die Vorteile von HD-Material auf der Strecke bleiben.
Das decodieren von CABAC ist extrem rechenaufwendig folglich nichts für Netbooks.
Entweder geht man also mit der Bitrate runter oder man nutzt CAVLC. Ein Video mit 5mbit CABAC ist vergleichbar mit einem 7-8mbit CAVLC. Allerdings läßt sich das 5mbit-Video in sehr speicherintensiven Szenen ebenfalls nur ruckelig abspielen. CAVLC ist hingegen auch noch mit 11mbit auf jedem Netbook flüssig.
Fazit: Man muss abwägen ob Speicher oder Rechenleistung wichtiger ist. Pauschalaussagen wie "IMMER CABAC BENUTZEN!" sind IMMER rein subjektiv zu betrachten.
Das stimmt. Im Einzelfall muss man natürlich hinsichtlich Qualität und Performance prüfen, welche Anforderungen fix sind und an welchen Parametern man überhaupt schrauben kann/darf.