Was ist Entropiecodierung?

Entropiecodierung ist eine verlustfreie Kompression, die für wahrscheinlichere Symbole im Mittel weniger Bits und für weniger wahrscheinliche mehr Bits verwendet. Huffman-Codierung und arithmetische Codierung sind gängige Verfahren.

So funktioniert Entropiecodierung

Ein Codec wandelt Quellinformationen zunächst in Symbole um, deren statistische Verteilung modelliert werden kann. Anschließend stellt eine Entropiestufe die wahrscheinlichen Folgen kompakt dar. Der Decoder muss dieselben Codetabellen, Kontexte und Zustände kennen oder rekonstruieren, um diese Darstellung rückgängig zu machen. Diese Stufe unterscheidet sich von der Quantisierung: Sie kann die Byteanzahl reduzieren, verwirft aber nicht gezielt Symbolwerte. Sie liegt häufig nahe dem Ende eines Bild-, Audio- oder Videoencoders und nahe dem Anfang des zugehörigen Decoders.

Wichtige Fakten

  1. Ein Huffman-Code weist jedem codierten Symbol ein eigenes Codewort variabler Länge zu. Daher kann er für ein Symbol nicht weniger als ein Bit verwenden, unabhängig davon, wie vorhersehbar es ist. Arithmetische Codierung hat keine solche Untergrenze. Die VP8-Spezifikation, deren boolescher Codierer eine Variante eines arithmetischen Codierers ist, führt ein Beispiel aus, in dem ein Ergebnis die Wahrscheinlichkeit 1/1024 hat und die niedrigstmögliche Rate ungefähr ein Hundertstel Bit pro Wert beträgt. Der Gewinn ist bei stark ungleich verteilten Daten am größten und verschwindet, wenn beide Ergebnisse gleich wahrscheinlich sind. Für diesen Fall nennt derselbe Text eine Untergrenze von einem Bit.
  2. Entropiecodierung lässt sich ohne Qualitätsänderung wiederholen. Das Werkzeug jpegtran von libjpeg-turbo ordnet die komprimierten DCT-Koeffizienten eines JPEG neu an, ohne das Bild vollständig zu decodieren. Seine Dokumentation beschreibt den Wechsel zu optimierten Entropieparametern, progressiven Scans oder arithmetischer Codierung als verlustfrei. Für cjpeg besagt dieselbe Dokumentation, dass -optimize eine Datei üblicherweise etwas verkleinert und Bildqualität sowie Dekompressionsgeschwindigkeit unverändert lässt, während der Encoder etwas langsamer läuft und deutlich mehr Arbeitsspeicher benötigt; jpegtran akzeptiert dieselbe Option. Das Werkzeug jpegtran kann die Qualitätseinstellung nicht ändern und kann Metadaten entfernen: Seine Standardeinstellung -copy comments behält Kommentarmarker bei und verwirft andere Metadaten. Übergeben Sie daher -copy all, um Exif-Daten, ein ICC-Profil und weitere zusätzliche Marker beizubehalten.
  3. Ein effizienterer Entropiecodierer hilft nur, wenn jeder Zieldecoder ihn implementiert. Im JPEG-Standard verwendet das sequenzielle Basisverfahren Huffman-Codierung; arithmetische Codierung ist nur in den erweiterten und verlustfreien Verfahren verfügbar. Die Dokumentation von libjpeg-turbo warnt, dass arithmetisch codiertes JPEG nicht breit implementiert ist und viele Decoder eine solche Datei überhaupt nicht lesen können. Prüfen Sie die Decoder, die Sie unterstützen müssen, bevor Sie einen vom Standard abweichenden Entropiemodus aktivieren.
  4. Der Decoder muss die Tabellen und den Wahrscheinlichkeitszustand des Encoders exakt reproduzieren. Daher wirkt sich eine Beschädigung über die betroffenen Bytes hinaus aus. Laut Dokumentation von libjpeg-turbo zerstört eine Beschädigung eines JPEG ohne Neustartmarker üblicherweise das Bild von der Fehlerstelle bis zum Ende. Mit Neustartmarkern bleibt sie normalerweise auf den Abschnitt bis zum nächsten Marker begrenzt; die Marker benötigen zusätzlichen Speicherplatz. JPEG setzt seine DC-Vorhersage und seine arithmetischen Wahrscheinlichkeitsschätzungen bei jedem Neustartintervall zurück. Dadurch kann das Decodieren dort fortgesetzt werden. Das Werkzeug jpegtran gibt standardmäßig keine Neustartmarker aus, selbst wenn die Quelldatei welche enthält, und übernimmt auch deren Intervall nicht: Die Option -restart N fügt alle N MCU-Zeilen neue Marker ein. Wählen Sie N daher explizit, um diesen Schutz beizubehalten. Die Dokumentation führt -restart unter den Optionen auf, die die codierte Darstellung festlegen, und bezeichnet die Transformationen als verlustfrei. Eine unbeschädigte Datei wird daher mit und ohne Marker zum selben Bild decodiert.

Wann Entropiecodierung relevant ist

Codec-Entwickler wenden Entropiecodierung auf quantisierte Koeffizienten, Vorhersageresiduen und andere strukturierte Werte an. Ihre Effizienz hängt davon ab, wie genau das Wahrscheinlichkeitsmodell zu den Daten passt. Allen anderen begegnet sie als Encodereinstellung: JPEG-Tools bieten optimierte Huffman-Tabellen oder arithmetische Codierung, und Encoder für H.264 bieten CAVLC oder CABAC. Die Stufe selbst verwirft nichts. Bei gegebener Quantisierung wägen diese Einstellungen daher Dateigröße gegen Encoding-Aufwand und Decoderunterstützung ab.

Quellen

Machen Sie aus Medienwissen eine funktionierende Pipeline

Verbinden Sie Uploads, Verarbeitung, KI, Storage und Auslieferung über eine deklarative API – um Encoding-Stack, Skalierung und ständig wechselnde Formate müssen Sie sich nicht selbst kümmern.

Transloadit kostenlos ausprobieren