Wie der Name schon sagt, beschäftigt sich die Intraframe-Kompression damit, das Schrumpfungspotenzial innerhalb eines einzelnen Bildes auszuschöpfen. Der Codec tut hier das, was JPEG mit einem einzelnen digitalen Foto macht. Und tatsächlich zeigen sich zwischen den Kompressionsverfahren der MPEG-Codecs und der JPEG-Methode deutliche Parallelen.
Im Wesentlichen basiert die Intraframe-Kompression auf zwei Verfahren, die wir uns jetzt näher ansehen wollen.
Wie schon weiter oben erwähnt, kombiniert ein Computermonitor sämtliche Farbtöne aus den drei Grundfarben Rot, Grün und Blau, wobei ein Pixel 3 Byte = 24 Bit Speicherplatz benötigt. An dieser Stelle setzt die erste Komprimierung an, die eine Besonderheit des menschlichen Auges ausnutzt. Für Farben sind wir nämlich weit unempfindlicher als für Kontraste (Helligkeitsunterschiede). Deshalb wird eine Farbe in einen Helligkeitsanteil (Luminanz) und einen Farbanteil (Chrominanz) zerlegt. Der weniger wichtige Chroma-Anteil wird mit geringerer Genauigkeit gespeichert und dadurch Platz gespart.
Es gibt eine ganze Reihe von Farbräumen, die nach diesem Prinzip arbeiten. Für die DVD wird YV12 verwendet, der mit 12 Bit Speicherplatz pro Pixel auskommt – das ist die Hälfte des Originals. Natürlich handelt es sich um eine verlustbehaftete Kompression, die sich allerdings nur manchmal bei Rot-Tönen bemerkbar macht. Die Farbunempfindlichkeit gilt offenbar für Rot weniger als für Grün und Blau, was bei der Entwicklung der MPEG-Standards entweder noch nicht bekannt war oder übersehen wurde. Deshalb neigen alle MPEG-Codecs bei Szenen mit hohem Rotanteil schon früh zur Bildung von Artefakten.
Nach dem Wechsel des Farbraums können wir uns nun mit dem Inhalt des Bildes beschäftigen. Alle gängigen Codecs zerlegen ein Bild nicht einzelne Pixel, sondern in so genannte Macroblocks, die typischerweise 16 × 16 Pixel groß sind. Je mehr Bitrate (Speicherplatz) wir unserem Film gönnen, desto mehr bleibt pro Macroblock übrig und desto mehr Details können im Block erhalten bleiben. Sinkt die Bitrate zu weit, besteht ein Block im Extremfall nur noch aus einer einzelnen Farbe. Spätestens dann werden im Bild die »Riesenpixel« sichtbar, die man von schlechten Encodings kennt.
Die Entscheidung darüber, welche Details erhalten bleiben und welche verworfen werden, trifft eine mathematische Methode, die sich zwischen den Codec-Familien unterscheidet, jedoch immer nach dem selben Prinzip arbeitet. Wir betrachten die Kompression hier am Beispiel der MPEG-4-ASP-Codecs (XviD, DivX), welche die diskrete Kosinustransformation (DCT) verwenden.
An dieser Stelle kommen die berühmt-berüchtigten Quantisierungsmatrizen und der Quantizer ins Spiel. Die Matrix ist der zentrale Baustein zur Durchführung der DCT. Sie besteht aus 64 Werten, angeordnet in 8 Zeilen zu je 8 Spalten. Je höher die enthaltenen Werte, desto stärker wird komprimiert und desto größer ist der Informationsverlust. Der Quantizer dient zusätzlich als Multiplikator. Man könnte ihn als eine Art Kompressionsfaktor bezeichnen. Genau wie bei der Matrix gilt: höhere Werte vernichten mehr Details.
Wer tiefer in die Materie einsteigen will, sollte zuerst einen Blick auf den Artikel von Ethanolix und Videostation werfen, der sich im Anhang von Selurs »Wissenswertes rund um XviD« findet. Nötig ist Detailwissen aber nur, wenn wir eigene Matrizen entwerfen wollen.
Unser Einzelbild besteht nun also aus einer Menge mehr oder weniger stark komprimierter Macroblocks, wodurch der Platzbedarf deutlich geschrumpft ist. Um das Bild später wieder anzeigen zu können, muss der Kompressionsvorgang rückgängig gemacht werden, wofür bei den ASP-Codecs die inverse diskrete Kosinustransformation (iDCT) zuständig ist. Da wir mit einer verlustbehafteten Kompression arbeiten, entspricht der wiederhergestellte Macroblock nicht exakt dem Original. Ob der Unterschied sichtbar ist – d. h. wie gut sich das Ergebnis ans Original annähert – hängt im Wesentlichen von der Höhe des Quantizers und vom Design der Quantisierungsmatrix ab. Weitere Einflüsse von außerhalb der eigentlichen DCT kommen natürlich dazu: verfügbare Bitrate, andere Codeceinstellungen, Art des Films usw.
Betrachten wir zum Schluss das Ergebnis einer DCT-Codierung an einem 8 × 8 Pixel großen Block.
Ganz links sehen wir stark vergrößert den ursprünglichen Block, rechts daneben die per JPEG komprimierte Version. Da JPEG auch auf der DCT aufbaut, kommt das Ergebnis einer MPEG-4-ASP-Kompression recht nahe. Besonders in der linken unteren Ecke sind deutlich die Unterschiede zum Original zu erkennen, allerdings nur in der Vergrößerung. Die Blocks in Originalgröße (rechts) sehen sich schon zum verwechseln ähnlich.
Wir können jetzt also einzelne Bilder komprimieren und wiederherstellen, was für ein Video prinzipiell schon ausreicht. Nichts hindert uns daran, die JPEG-artigen Bilder in einer rasanten Diashow hintereinander zu hängen. Tatsächlich gibt es einen Codec namens Motion-JPEG, der genau das tut. Allerdings lässt sich die Dateigröße mit zusätzlichen Methoden noch immer deutlich schrumpfen.