Was ist verlustbehaftete Kompression?
Verlustbehaftete Kompression reduziert die Dateigröße, indem sie Informationen unwiderruflich verwirft, die für die wahrgenommene Qualität als weniger wichtig gelten. Beim Dekomprimieren entsteht eine Annäherung statt der exakten Originaldaten.
So funktioniert verlustbehaftete Kompression
Ein verlustbehafteter Encoder überführt Abtastwerte typischerweise in eine Darstellung, in der sich wahrnehmungsbezogen weniger wichtige Details isolieren lassen, quantisiert diese grob oder verwirft sie und codiert den Rest mit einem Entropiecode. Die Quantisierung verwirft Genauigkeit, die sich beim Decodieren nicht wiederherstellen lässt. JPEG veranschaulicht dieses Prinzip: Seine DCT-basierten Verfahren quantisieren Frequenzkoeffizienten mithilfe einer Quantisierungstabelle. Die Beispieltabellen im Standard beruhen auf psychovisuellen Schwellenwerten, und Encoder speichern Farbinformationen üblicherweise mit geringerer Auflösung als Helligkeitsinformationen. Video-Encoder ergänzen eine Bitratensteuerung, die festlegt, wie stark die einzelnen Bildbereiche quantisiert werden. x265 erhöht oder senkt beispielsweise die Quantisierung pro Block je nach Komplexität des Ausgangsmaterials. Da sich diese Entscheidungen zwischen Codecs, Encodern und Voreinstellungen unterscheiden, können Ergebnisse bei gleicher nomineller Bitrate unterschiedlich aussehen oder klingen. Beurteilen Sie Einstellungen daher anhand Ihrer eigenen Inhalte. Pipelines behalten normalerweise die verfügbare Quelle mit der höchsten Qualität und erzeugen daraus jede Auslieferungsfassung, statt diese aus einer anderen abgeleiteten Fassung zu erstellen.
Wichtige Fakten
- Decodieren und erneutes Encoding mit einem verlustbehafteten Encoder quantisieren die Daten erneut und verursachen in der Regel weitere Verluste. Die vorherige Qualitätseinstellung kann bereits verworfene Informationen nicht zurückbringen. Manche Vorgänge vermeiden dies, indem sie stattdessen direkt mit den codierten Daten arbeiten: Das Werkzeug
jpegtranvon libjpeg-turbo dreht oder spiegelt beispielsweise ein JPEG, indem es dessen Koeffizienten umordnet, ohne das Bild vollständig zu decodieren. So werden die Bilddaten ohne Qualitätsverlust transformiert, was das Handbuch ausdrücklich vom Decodieren und erneuten Encoding abgrenzt. Das Handbuch nennt auch die Grenzen:jpegtrankann die Bildqualität nicht ändern. Beim Drehen und Spiegeln bleiben unvollständige Randblöcke unverändert, wenn die für die Transformation maßgebliche Abmessung – die Breite bei-flip horizontaloder-rotate 270, die Höhe bei-flip verticaloder-rotate 90, Breite oder Höhe bei-rotate 180– kein Vielfaches der iMCU-Blockgröße ist (üblicherweise 8 oder 16 Pixel). Das Entfernen dieser Blöcke mit-trimist nicht streng verlustfrei. - Qualitätswerte sind encoderspezifisch und nicht austauschbar.
cjpeg -qualityreicht von 0 (schlechteste Qualität) bis 100 (beste Qualität) und skaliert Quantisierungstabellen. Der Ratenfaktor--crfvon x265 funktioniert dagegen umgekehrt: Ein höherer Wert bedeutet stärkere Quantisierung und geringere Qualität. Die Dateigröße hängt dann von der Komplexität des Ausgangsmaterials ab. Vergleichen Sie Encoder, indem Sie deren Ausgabe prüfen oder messen, statt Zahlenwerte gleichzusetzen. - Der höchste Wert einer Qualitätsskala ist nicht unbedingt verlustfrei. Bei
cjpegminimiert die Qualitätsstufe 100 lediglich den Verlust bei der Quantisierung; durch Unterabtastung und Rundungsfehler gehen weiterhin Informationen verloren. Eine exakte Rekonstruktion erfordert einen verlustfreien Modus oder ein verlustfreies Format. Da manche Formate wie WebP beide Möglichkeiten bieten, verrät die Dateiendung nicht, welche verwendet wurde. - Ein Containerwechsel muss keine Qualität kosten. Die Stream-Kopie von FFmpeg (
-c copy) reicht Pakete ohne Decodieren oder Encoding weiter, sodass kein Qualitätsverlust entsteht. Sie kann jedoch scheitern, wenn der Zielcontainer Informationen benötigt, die in der Quelle fehlen, und sie kann keine Filter anwenden. Eine Größenänderung ist ein Filter. Eine neue Videogröße erfordert daher Transkodierung: erneutes Decodieren und Encoding, was laut FFmpeg-Dokumentation in den meisten Fällen die Qualität verringert.
Wann verlustbehaftete Kompression relevant ist
Nutzen Sie verlustbehaftetes Encoding, wenn Einsparungen bei Bandbreite oder Speicher einen gewissen Verlust an Bild-, Audio- oder Videotreue rechtfertigen. Zu aggressive Einstellungen oder wiederholte Kompression können sichtbare oder hörbare Artefakte erzeugen.
So hilft Transloadit bei verlustbehafteter Kompression
Transloadit bietet in seinen Bild-Robots die Wahl zwischen verlustbehafteter und verlustfreier Kompression. /image/optimize verwendet standardmäßig nur verlustfreie PNG-Optimierer. Mit der Einstellung lossy: true tritt auch der verlustbehaftete Kompressor pngquant an, und das kleinste Ergebnis gewinnt. /image/resize hat einen Parameter namens quality, der die Kompression der JPG- und PNG-Ausgabe steuert.
Der Parameter lossy wirkt sich nur auf die PNG-Optimierung aus. Die Dokumentation warnt davor, dass pngquant PNGs auf eine Palette mit 256 Farben reduziert. Dies kann bei Bildern mit reichhaltigen Farbpaletten, feinen Farbverläufen oder markenspezifischen Farben zu sichtbaren Farbverschiebungen führen.
Entdecken Sie Transloadits Möglichkeiten für Dateiformate & Komprimierung
Quellen
- MDN-Glossar: Verlustbehaftete Kompression
- ITU-T T.81 | ISO/IEC 10918-1: JPEG-Anforderungen und Richtlinien (DCT-Quantisierung, Anhang K)
- libjpeg-turbo: Verwendung von cjpeg und djpeg (der Schalter -quality)
- libjpeg-turbo: jpegtran-Handbuch (verlustfreie JPEG-Transformationen)
- x265-Dokumentation: Befehlszeilenoptionen (CRF und adaptive Quantisierung)
- FFmpeg-Dokumentation: ffmpeg-Werkzeug (Stream-Kopie und Transkodierung)