Motion Compensation bei der MPEG-Kompression
Eine der wichtigsten Grundlagen für die Effizienz der MPEG-Kompression ist die Erkenntnis, dass aufeinanderfolgende Bilder einer Video- oder Filmsequenz sich meist sehr ähnlich sind. Die tatsächlichen Unterschiede liegen meist in mehr oder weniger geringen Positionsveränderungen einzelner Bildelemente oder Objekte, während der Hintergrund als flächenmäßig sehr wesentlicher Bildanteil häufig beinahe unverändert bleibt. Vereinfacht formuliert genügt es also, das gesamte Bild einmal komplett abzuspeichern und für die darauffolgenden Bilder lediglich jene Bereiche zu berücksichtigen, die sich im Vergleich zum Referenzbild tatsächlich verändern.
Das einfachste Beispiel wäre hierfür eine Landschaft mit einem vorbeifahrenden Auto, aufgenommen von einer statischen Kamera:
Zur weiteren Vereinfachung nehmen wir an, dass die Szene beginnt, bevor das Auto erscheint:
Diese Aufnahme wäre also das Referenzbild und beinhaltet die gesamte Bildinformation
des Hintergrunds, der sich aufgrund der unbewegten Kamera in weiterer Folge nicht maßgeblich verändert.
Nun erscheint das Auto und wird als bewegtes Objekt erkannt. Als Bildinformation für die weiteren Bilder reicht nun der Bezug zum Referenzbild, die Bildstruktur des Autos und dessen Bewegungsinformation:
Diese Bewegungen werden mit Hilfe von Vektoren und einem Raster von sogenannten Macroblöcken zugeordnet und gespeichert. Dabei wird genau definiert, wohin sich der Bildinhalt eines Blockes in den nächsten Bildern bewegt.
In der Praxis sind der Bildaufbau und die Bewegungsabläufe meist wesentlich komplexer als in diesem vereinfachten Beispiel. Gute Software-Encoder bieten deshalb die Möglichkeit eines 2-Pass Verfahrens, um im ersten Durchgang das Bildmaterial zu analysieren und festzulegen, an welchen Stellen am besten I-Frames, also die Referenzbilder, angelegt werden. Ändert sich z.B. der Bildinhalt aufgrund eines Schnittes komplett, so muss hier auf jeden Fall ein I-Frame erstellt werden. Durchschnittlich sind es etwa zwei I-Frames pro Sekunde, die ausreichen, um eine akzeptable Bildqualität zu erreichen. Je nach Häufigkeit der Schnitte und der Intensität und Geschwindigkeit von Bewegungen kann dieser Wert aber stark variieren.
Das Berechnen und Erstellen von B-Frames ist der aufwendigste Teil des Kompressionsvorgangs, da hierbei sowohl die vorangehenden als auch die nachfolgenden Frames für die Berechnung herangezogen werden. Hierfür ist der 2-Pass Modus eines Encoders besonders nützlich, weil es durch die Analyse im ersten Durchgang wesentlich weniger Unklarheiten und "Überaschungen" im Ablauf der Bilder gibt. Erst im zweiten Durchgang findet dann die eigentliche Kompression statt.