Westfälische Wilhelms-Universität Münster Seminararbeit MPEG Ein Videokompressionsstandard Dörte Naunin Themensteller: Prof. Dr. Herbert Kuchen Betreuer: Christian Arndt Institut für Wirtschaftsinformatik Praktische Informatik in der Wirtschaft
Inhaltsverzeichnis 1 Videokompression...3 2 Die Entwicklung von MPEG...4 2.1 Historie...4 2.2 Anforderungen an den Standard...4 2.3 Überblick der verschiedenen MPEG Standards...5 3 Grundlegende Funktionsweise...7 3.1 Intraframe Kodierung: Ausnutzen der räumlichen Redundanz...10 3.1.1 Übertragung in den YCC Farbraum...11 3.1.2 Abtastraster...13 3.1.3 Diskrete Kosinus Transformation (DCT)...13 3.1.4 Quantisierung... 3.1.5 Zig Zag Scan...18 3.1.6 DPCM (Differential Pulse Code Modulation)...19 3.1.7 Run Length Encoding (RLE, Lauflängenkodierung)...20 3.1.8 Huffman Kodierung (Variable Length Coding)...21 3.2 Interframe Kodierung: Ausnutzen der temporären Redundanz...22 3.2.1 Blockbasierte Bewegungskompensation...25 4 Fazit...27 Literaturverzeichnis...28 II
1 Videokompression Videokompression verkleinert eine Menge von Daten digitaler Videos, damit diese Videos mit geringerer Bandbreite über Netzwerke übertragen und in kleineren Datenmengen gespeichert werden können. Ein Ziel ist, die Qualität der Daten nicht zu verringern. In der Frage, wie stark ein Video komprimiert werden soll, muss ein Kompromiss zwischen dem Speicherplatzverbrauch, Qualitätsverlust und der Laufzeit für Komprimierung und Dekomprimierung gefunden werden. Man unterscheidet die verlustfreie (lossless) und die verlustbehaftete (lossy) Komprimierung. Bei der verlustfreien Kodierung wird das Original nach der Dekomprimierung wieder vollständig hergestellt, bei der verlustbehafteten Kodierung werden Fehler in Kauf genommen, die sich je nach Komprimierungsgrad stärker oder weniger stark auf die Qualität auswirken. Verlustfreie Videokompression wird seltener benutzt, da die Kompression nicht so stark ist wie bei der verlustbehafteten Komprimierung. Falls ein Video keine irrelevanten oder redundanten Informationen enthält, könnte ausschließlich mit der verlustfreien Komprimierung keine Verringerung der Datenmenge erreicht werden. So könnte die Datenrate zu groß bleiben, beispielsweise größer als die Bandbreite eines Netzwerks. Die Videokompression ist ein Sonderfall der Datenkompression, wie sie von RECHENBERG und POMBERGER beschrieben wird: Überträgt man Nachrichten (Daten) über Raum (Netze) und Zeit (Speichermedien), kann Datenkompression die Datenmenge bei Beibehaltung des Informationsgehalts stark reduzieren und Übertragungszeit und Speicherplatz einsparen. Speichermedien und Kommunikationskanäle werden immer preiswerter, aber gleichzeitig nehmen die Datenmengen und Prozessorleistungen zu, so dass Datenkompression weiterhin sinnvoll ist. [RP02, S. 241] 3
2 Die Entwicklung von MPEG 2.1 Historie MPEG 1 ist die Abkürzung für Moving Pictures Expert Group, sie ist eine Arbeitsgruppe der ISO 2 /IEC 3, die mit der Entwicklung von Audio und Video Standards beauftragt ist. Sie wurde im Jahre 1988 von Leonardo Chiariglione und Hiroshi Yasuda gegründet. Weiterhin ist MPEG die Bezeichnung für die verschiedenen Standards, die diese Expertengruppe entwickelt hat. Das Ziel dieser Aktivitäten war, einen weltweit einheitlichen Standard für die Videokompression bereitzustellen. Ein erster Entwurf des Standards wurde wie geplant zum Ende des Jahres 1990 vorgelegt. 2.2 Anforderungen an den Standard Einen Standard macht aus, dass er weltweit genutzt werden kann. Er kann Kosten reduzieren und zur Interoperabilität zwischen verschiedenen Geräten beitragen. Er sollte die Kommunikation zwischen Geräten von verschiedenen Möglichst viele Anforderungen sollten erfüllt sein, aber der Standard sollte nicht zu kompliziert werden. Die Expertengruppe hob einige Eigenschaften als besonders wichtig für eine flexible Lösung hervor. Ich führe hier nur einige Beispiele auf, die MPEG aus damaliger Sicht erfüllen sollten. Die Fehlerresistenz ist die Widerstandskraft der Kodierung gegen Defekte. Auftretende Fehler können so korrigiert werden und im Idealfall sind sie beim Abspielen für den Zuschauer unsichtbar. Ein geringer Zeitaufwand für Kodierung und Dekodierung sind für die Handhabung eines zu kodierenden Videos besonders wichtig. Die Zeit die für die Komprimierung und Dekomprimierung benötigt wird, sollte minimiert werden. Die Editierbarkeit ermöglicht es, das Video zu verändern, hierfür wäre es ideal, wenn man auf jedes Bild des Videos einzeln zugreifen könnte. 1 Der formale Name ist ISO/IEC JTC 1/SC 29/WG 11 2 International Organization for Standardization 3 International Electrotechnical Commission 4
Der Standard sollte eine hohe Formatflexibilität besitzen und MPEG kodierte Videos sollten in möglichst vielen Formaten gespeichert und abgespielt werden können. Ein weiterer wichtiger Punkt sollte der Zufällige Zugriff sein. Es sollte in einem Video möglich sein, einen beliebigen Punkt innerhalb des Videos anwählen zu können. Für den Zufälligen Zugriff wäre es optimal, wenn man das Video wie hintereinander ablaufende nicht-bewegte Bilder komprimieren würde. So könnte man auf jedes Bild einzeln zugreifen, da sein Inhalt sich nicht auf andere stützt. Eine Komprimierung in Form der Kompression aller Bilder einzeln würde allerdings den Rahmen des Speicherplatzes sprengen und somit der Anforderung geringer Kosten nicht genügen. Angesichts der verschiedenen Anforderungen muss MPEG als ein Kompromiss verstanden werden, denn nicht alle Eigenschaften können in diesem Standard gleichzeitig vollständig erfüllt sein. Aufgrund dessen nutzt MPEG zwei verschiedene Kodierungsarten, die Intraframe Kodierung und die Interframe Kodierung. Die Intraframe Kompression ist effektiv eine Kompression für nicht-bewegte Bilder. Sie enthält nur Bezüge von Bildern auf sich selbst und nutzt nur die räumlich überflüssigen Informationen zur Kompression. Eine Interframe Kompression beinhaltet auch Bezüge von einem Bild zu einem anderen, sie nutzt somit auch die zeitlich überflüssigen Informationen aus. Für den zufälligen Zugriff wäre es optimal, wenn die Kompression nur aus Intraframes bestehen würde, dass heißt, wenn jedes Bild einzeln für sich wie ein JPEG kodiert werden würde 4. Allerdings ist die Kompression begrenzt: Es ergeben sich Probleme aufgrund der Größe, beispielsweise für eine Übertragung über ein Netzwerk. Deswegen enthält ein MPEG kodiertes Video Interframe und Intraframe Bilder. 2.3 Überblick der verschiedenen MPEG Standards MPEG 1: Coding of moving pictures and associated audio at up to 1,5Mbit/s [St04, S. 357] Der erste MPEG Standard beschäftigte sich ausschließlich mit der Kodierung von Video und zugeordnetem Audio. Seine Layer 3 (Audio) definierte den Standard MP3 (MPEG Layer 3). 4 Eine Kodierung eines Videos nur nach Intraframe Kodierung heißt auch M-JPEG (Motion JPEG) 5
MPEG 2: Generic Coding of moving pictures and associated Audio [St04, S. 357] Die Weiterentwicklung des ersten MPEG Standards stellt eine größere Auswahl an Möglichkeiten bezüglich der Bildauflösung, Datenrate und Qualitätsstufe. So sind auch hoch auflösende Anwendungen möglich, wie zum Beispiel HDTV (High Definition TV). Außerdem stellt der Standard Digital Video Broadcasting (DVB) bereit. MPEG 3 wurde nie ein Standard. Ursprünglich wurde er für HDTV designt, dann baute man diese Eigenschaften schon in MPEG 2 ein. Daraufhin wurden die Bemühungen um einen MPEG 3 Standard abgebrochen. MPEG 4: Coding of audio - visual objects [St04, S. 357] Dieser Standard erweitert die Standardisierung von Video und zugehörigen Audiosignalen auf jegliche Arten von audiovisuellen Inhalten, wie zum Beispiel auch Grafiken, Körper und Gesichtsanimationen. MPEG 7: Multimedia Content Description Interface [St04, S. 358] Der Standard macht eine Beschreibung von Metadaten für multimediale Inhalte möglich und gestattet Katalogisierung, erweiterte Suche und Verwaltung dieser Inhalte. MPEG 21: Multimedia Framework [St04, S. 358] MPEG standardisiert hiermit ein so genanntes Multimedia Framework Alle Schritte multimedialer Inhalte, wie Erzeugung, Produktion, Distribution und Konsum werden definiert und beschrieben. Neben der Identifizierung dieser Schritte, dient der Standard auch der Sicherung von Eigentums und Urheberrechten. Weitere Projekte der Moving Pictures Expert Group sind die Standards MPEG A, MPEG B, MPEG C, MPEG D und MPEG E. 6
3 Grundlegende Funktionsweise Ausgenutzt werden für die Komprimierung die zeitlichen, räumlichen und psychovisuellen Redundanzen in Videodaten, sowie die Tatsache, dass das menschliche Auge nicht alle Details erfassen kann. Laut FISCHER ist Redundanz ein Inhalt, der ohne Informationsverlust weggelassen werden kann [Fi02, S. 389]. In Videos treten häufig zeitliche und räumliche Korrelationen auf. Fährt zum Beispiel ein Auto durchs Bild oder bleibt bei einer Nachrichtensendung der Hintergrund des Sprechers unverändert, existieren gleiche Bildausschnitte, die nicht alle einzeln gespeichert werden müssen. Der Hintergrund in einer Nachrichtensendung ist oft gleichmäßig in einer Farbe gehalten. Die Information über seine Beschaffenheit muss nur einfach gespeichert werden. Da die Informationen innerhalb, aber in verschiedenen Stellen eines Bildes auftauchen, nennt man dies die räumliche Redundanz. Ein fahrendes Auto in einem Video ist ein Beispiel für eine zeitliche Redundanz. Die Beschaffenheit des Autos bleibt gleich, die Position verändert sich jedoch im Fortlaufen eines Films. So muss die Information über das Aussehen des Autos nur einfach gespeichert werden. Doppelte Informationen, die auf die Zeit hingesehen vorkommen, also sich auf verschiedenen Bildern eines Videos befinden, haben daher eine zeitliche Redundanz. Die psychovisuelle Redundanz besteht, weil das menschliche Auge stärker auf Helligkeits- (Luminanz) als auf Farbunterschiede (Chrominanz) reagiert. Auf der menschlichen Netzhaut befinden sich mehr Stäbchen als Zäpfchen. Die Stäbchen fangen die Helligkeitssignale und die Zäpfchen die Farbsignale auf. Es werden Bildausschnitte eines Videos verglichen, um Duplikationen zu löschen und die doppelte Information als Bezugnahme auf den ersten Bildausschnitt darzustellen. Um die Bildausschnitte zum Erkennen von Redundanzen miteinander vergleichen zu können, hat man eine einheitliche Unterteilung der Bilder festgelegt. MPEG gliedert jedes Bild eines Videos in so genannte Makroblöcke, die aus x Pixel bestehen. Diese Standardisierung vereinfacht die Algorithmen, da man sie nur noch auf kleinere Blöcke anwenden muss und nicht auf ein ganzes Bild. 7
Makroblock Bild Abbildung 1: Einteilung in Makroblöcke Der Standard benutzt zwei grundlegende Techniken: die blockbasierte Motion Compensation für die Reduktion der zeitlichen (temporären) Redundanz und die Diskrete Kosinus Transformation (DCT 5 ) für die Reduktion der räumlichen Redundanz. Die verschiedenen Bildtypen Ein MPEG Video besteht aus hintereinander geschalteten Bildern, die verschieden kodiert werden: den I-Bildern der Intraframe Kodierung und den P- und B-Bildern der Interframe Kodierung. Intrakodierte Bilder (Interpolative Pictures; I-Bilder) I-Bilder haben ausschließlich Referenzen auf sich selbst, sie funktionieren daher wie die Kodierung nicht-bewegter Bilder und nutzen ausschließlich die räumliche Redundanz aus. Die Kompression ist nicht stark. Sie werden zum Beispiel für den zufälligen Zugriff benötigt und dienen als Referenzen für P- und B-Bilder. Predicted kodierte Bilder (Predictive Pictures; P-Bilder) P-Bilder haben Referenzen auf vergangene Bilder und dienen selbst als Referenz für I- und B-Bilder. Interpolative / Bidirectional kodierte Bilder (Biderectional Prediction, B-Bilder) 5 Discrete cosine transform 8
B-Bilder liefern die höchste Kompression, sie haben Referenzen auf vergangene und zukünftige Bilder, können aber selbst nicht Referenz für andere Bilder sein. Die Referenzbilder sind das jeweils letzte I- oder P-Bild und das jeweils nächste I- oder P- Bild. 0 I 1 B Ermittelt aus den Bildern 0 und 3 2 B Ermittelt aus den Bildern 0 und 3 3 P Predicted aus Bild 0 4 B Ermittelt aus den Bildern 3 und 6 Group of Pictures (GOP) 5 B Ermittelt aus den Bildern 3 und 6 6 P Predicted aus Bild 3 7 B Ermittelt aus den Bildern 6 und 9 8 B Ermittelt aus den Bildern 6 und 9 9 I Abbildung 2: Beispiel für eine Abfolge von Bildern Oft wird die Abfolge der Bilder I BB P BB P BB P BB P BB I verwendet, sie kann aber variieren und muss auch nicht regelmäßig sein. Die Interframe Kodierung erstellt P- und B-Bilder, sie erreicht damit eine höhere Kompression als die Intraframe Kodierung, die ausschließlich I-Bilder verwendet. Im folgenden beschreibe ich, wie die beiden Kodierungsarten irrelevante und redundante Informationen löschen und so einen Videodatenstrom verkleinern. 9
3.1 Intraframe Kodierung: Ausnutzen der räumlichen Redundanz Bei der Intraframe Kodierung werden die Dopplungen innerhalb eines Bildes erkannt und gelöscht, um die Datenmenge zu verringern. Sie kodiert nur I-Bilder. Für diese Art der Kodierung wird jedes Bild vom RGB Farbraum in den YCC Farbraum überführt. Die Bilder werden aufgeteilt in Helligkeits- (Luminanzsignal) und Farbsignale (Chrominanzsignal) gespeichert, anstatt über die Verteilung der Grundfarben Rot, Grün und Blau. Zur Vereinfachung der Bearbeitung werden die Bilder in kleinere Einheiten zerlegt. Die x Pixel großen so genannten Makroblöcke werden bei der Intraframe Kodierung geviertelt und die entstehenden 8x8 Pixel großen Blöcke zur weiteren Verarbeitung erhalten. Diese Verkleinerung der einzeln abzuarbeitenden Einheiten vereinfacht die mathematischen Algorithmen stark, da bei der Diskreten Kosinus Transformation alle Werte einer Einheit in jede einzelne Rechnung miteinbezogen werden. Die Häufigkeiten der Helligkeits- und Farbsignale im neuen Farbraum hängen von der jeweiligen Abtastrate ab. Meistens beinhaltet ein Makroblock vie Luminanzblöcke und je einen Chrominanzblock der zwei verschiedenen Chrominanzarten. Jeder 8x8 Pixel große Block ist eine 8x8 Matrix, die Werte der Matrix werden mit der Diskreten Kosinus Transformation (DCT) umgerechnet. Die so erhaltenen DCT Koeffizienten werden quantisiert, d.h. sie werden durch den jeweiligen Wert einer 8x8 Quantisierungsmatrix dividiert. Die erhaltene Matrix wird mit einem Zick Zack Muster gescannt und die Werte werden in der Reihenfolge dieses Zig-Zag-Scans als eindimensionale Folge aufgeschrieben. Die vorderste Zahl der Folge ist die so genannte DC-Komponente, sie wird mit der Differential Pulse Code Modulation (DPCM) kodiert. Die restlichen Zahlen werden mit der Lauflängenkodierung (Run Length Encoding - RLE) zu Tupeln geformt und anschließend mit der Huffman Kodierung kodiert und in Binärform gespeichert. 10
R G Bild B C b Y C r Zerlegung in Makroblöcke C b Zerlegung in 8x8 Pixel Y C r DCT DCT Koeffizienten DPCM Quantisierung RLE Zig Zag - Scan Quantisierte DCT Koeffizienten Huffman Kodierung 00101110... Abbildung 3: Intraframe Kodierung 3.1.1 Übertragung in den YCC Farbraum Ein Bildsignal ist eine Verteilung der drei Grundfarben Rot, Grün und Blau (R, G, B). Aus der Intensität der jeweiligen Grundfarbe ergeben sich die Informationen über Helligkeit und Farbsättigung. Die Helligkeits- (Luminanz) und Farbsignale 11
(Chrominanz) werden voneinander getrennt mit der Überführung in den YCC Farbraum 6. Danach setzen sich die Signale wie folgt zusammen: MPEG Signale: C b = B Y C r = R Y Y Beschreibung Chrominanz b (Farbsättigung) Chrominanz r (Farbsättigung) Luminanz (Helligkeitssignal) Nun haben wir für jedes Bild drei Bilder, ein Luminanzbild und zwei Chrominanzbilder. Errechnet wird der YUV Farbraum (Y Luminanz; U, V Chrominanz) wie folgt: Y = 0,299 * R + 0,587 * G + 0,144 * B U = 0,436 * (B Y) / (1 0,144) V = 0,615 * (R Y) / (1 0,299) Anders ausgedrückt : Y = + 0,299 * R + 0,587 * G + 0,114 * B U = 0,147 * R 0,289 * G + 0,436 * B V = + 0,615 * R 0,515 * G 0,1 * B Am Faktor 0,587 sieht man, dass das Helligkeitssignal (Y) signifikant durch die Farbe grün bestimmt wird. Daran ist zu erkennen, dass das menschliche Auge sehr empfindlich auf die Farbe grün reagiert. Nachdem die Helligkeits- von den Farbsignalen unterschieden wurden, können sie getrennt voneinander bearbeitet werden. Dies ist sinnvoll, da die Farbsignale stärker 6 auch: YUV Farbraum 12
verändert werden können als die Helligkeitssignale, ohne dass ein Unterschied für das menschliche Auge sichtbar wird. 3.1.2 Abtastraster Ein Bild hat theoretisch unendlich viele Bildpunkte. Mit Hilfe des Abtastens wird eine endliche Anzahl Punkte des digital dargestellten Bildes gefunden. Bei der Abtastung werden aus jedem Bildpunkt die Werte für das Luminanzsignal (Y) und die beiden Chrominanzsignale (C b, C r ) gewonnen. Schon während dieses Prozesses können die Signale gewichtet werden, um unwichtige Informationen zu reduzieren. Folgende Chrominanzformate zeigen, mit welcher Abtastrate die Signale gewonnen wurden: Ein 4:2:0 Makroblock umfasst neben den vier Luminanzblöcken jeweils einen C b Chrominanzblock und einen C r Chrominanzblock. Aus jedem Bildpunkt werden vier Luminanzsignale und jeweils eins der beiden Chrominanzsignale gewonnen. Dieses Format wird am häufigsten verwendet. Ein 4:2:2 Makroblock schließt jeweils zwei der Chrominanzblöcke mit ein. Aus jedem Bildpunkt werden zwei Luminanzsignale und jeweils eins der beiden Chrominanzsignale erhalten. Ein 4:4:4 Makroblock beinhaltet von den Luminanz und verschiedenen Chrominanzblöcken jeweils 4. Aus jedem Bildpunkt wird jeweils ein Signale der drei Arten gewonnen, sie werden mit der gleichen Abtastrate verarbeitet. 3.1.3 Diskrete Kosinus Transformation (DCT) Die diskrete Kosinus Transformation (DCT) ist eine mathematischer Algorithmus, der Werte des YCC Farbraums in eine Frequenzdarstellung umwandelt. Für den Algorithmus wird folgende Formel angewandt: 1 F[ u, v] = CuC 4 v 7 7 x= 0 y= für x, y,u, v = 0 7 (2x + 1) uπ (2y + 1) vπ f ( x, y) cos cos 0 13
Cu, v 1 = 2 1 für sonst u, v = 0 Die inverse Kosinus Transformation (IDCT) lautet : f ( x, y) = 7 7 u= 0 v= 0 Cu Cv (2x + 1) uπ (2y + 1) vπ F( u, v) cos cos 2 2 Die Variablen x und y stehen für die Position eines Pixels in einem 8x8 Pixel Block, gezählt werden von 0 bis 7. Die in Makroblöcke geteilte Bilder werden für die DCT nochmals in kleinere Bildausschnitte unterteilt. Jeder Makroblock wird geviertelt, um 8x8 Pixel Blöcke zu erhalten. Das ist nötig, um die Berechnungen der DCT zu vereinfachen. Die Umwandlung in die Frequenzdarstellung geschieht ohne Verlust, es wird damit allein noch keine Komprimierung der Daten erreicht. Die DCT birgt aber einen großen Schritt zur Komprimierung, da in der Frequenzdarstellung hohe von niedrigen Frequenzen getrennt werden. Das menschliche Auge nimmt hohe Frequenzen schlechter wahr. Nach der Trennung der hohen von den niedrigen Frequenzen können die hohen Frequenzen eliminiert werden, ohne die niedrigen Frequenzen zu behindern. So geschieht eine starke Komprimierung der Daten ohne einen sichtbaren Qualitätsverlust des Videos. Bei der Berechnung der DCT Koeffizienten einer 8x8 Matrix werden bei jeder einzelnen Rechnung alle Werte der Matrix miteinbezogen, das bedeutet jede Berechnung eines der 64 Koeffizienten beinhaltet 64 Summanden. Deswegen nehme ich ein Rechenbeispiel der eindimensionalen DCT zur besseren Verständlichkeit, die Rechnung erfolgt dann nicht über eine komplette 8x8 Matrix, sondern über 1x8 Bildpunkte, und die acht Koeffizienten werden mit nur acht Summanden errechnet. 14
Beispiel [SW99, S. 447]: u 0 1 2 3 4 5 6 7 f(x): Bildpunkte -58-58 -58-28 22 72 72 72 DCT Koeffizienten 13-159 9 36-7 -6 4-6 Q - Matrix 11 10 24 40 51 61 Ergebnisse 0-14 0 2 0 0 0 0 Die Formel der eindimensionalen Diskreten Kosinus Transformation (1D-DCT) lautet 1 F[ u] = C 2 u 7 x= (2x + 1) uπ f ( x)cos 0 Cu 1 = 2 1 für sonst u = 0 Berechnung des dritten DCT Koeffizienten: (u = 2) 1 C(2) = 2 7 x= 1 7 (2 * x + 1)2π C(2) = f ( x) cos( ) 2 x = 0 (2 x + 1) * 2* π f ( x) cos 0 1 (2 * 0 + 1)2π (2 *1 + 1)2π (2 * 2 + 1)2π (2 * 3 + 1)2π = 58 * cos 58 * cos 58 * cos 28 * cos 2 (2 * 4 + 1)2π (2 * 5 + 1)2π (2 * 6 + 1)2π (2 * 7 + 1)2 + 22 * cos + 72 * cos + 72 * cos + 72 * cos* π 15
1 2π 6π 10π 14π 18π 22π 26π 30π = * 58 * cos 58 * cos 58 * cos 28 * cos + 22 * cos + 72 * cos + 72 * cos + 72 * cos 2 1 * 2 1 = * 2 = 9,2376 [ 58 * 0,9239 58 * 0.3827 58 * ( 0,3827) 28 * ( 0,9238) + 22 * ( 0,9239) + 72 * ( 0,3827) + 72 * 0,3827 + 72 * 0,9239] [ 53,5862 22,1966 + 22,1966 + 25,8664 20,3258 27,5544 + 27,5544 + 66,55208] 1 = *18,4752 2 Das Ergebnis wird auf- oder abgerundet. In diesem Fall erfolgt eine Abrundung auf 9. (Wert in Tabelle fettgedruckt) 3.1.4 Quantisierung DC Komponente Höher werdende Frequenzen Makroblock Höher werdende Frequenzen
Die Quantisierung hilft die höheren Frequenzen zu eliminieren und so eine hohe Kompression ohne großen Qualitätsverlust zu erreichen. Die DC-Komponente 7 ist der Wert oben links in der DCT Koeffizienten Matrix. Je weiter ein Wert von diesem Wert entfernt steht, desto höher die Frequenz, die der Wert beschreibt. Die Werte der höchsten Frequenzen liegen somit unten rechts im Block. Im eindimensionalen Beispiel ist die DC-Komponente 13, der erste Wert der Folge von DCT Koeffizienten (fettgedruckt in Tabelle unten). Jeder Wert der DCT Koeffizienten Matrix wird durch den zugehörigen Wert aus einer Quantisierungstabelle dividiert. Nach der Division werden die Ergebnisse auf ganze Zahlen abgerundet. Es findet ein Verlust an Daten statt, die Rundung verfälscht die Daten, die Quantisierung ist ein verlustbehaftetes Kompressionsverfahren. Die höheren Frequenzen haben kleine Werte nach der Diskreten Kosinus Transformation. An den entsprechenden Stellen in der Quantisierungstabelle stehen hingegen große Werte. Eine Division eines solchen kleinen Wertes durch einen hohen Wert ergibt nach der Rundung auf eine ganze Zahl Null. Nach der Quantisierung werden deswegen viele Nullen unten rechts in der Matrix stehen. Diese stehen nach dem Zig-Zag-Scan hintereinander und es kann mit wenig Aufwand eine hohe Kompression erreicht werden. Weiterführung Beispiel [SW99, S. 447]: DCT Koeffizienten 13-159 9 36-7 -6 4-6 Q - Matrix 11 10 24 40 51 61 Ergebnisse 0-14 0 2 0 0 0 0 Die Quantisierung im eindimensionalen Beispiel erfolgt genau wie im zweidimensionalen (mit 8x8 Matrizen). Jeder Wert der DCT Koeffizienten wird durch den zugehörigen Wert der gegebenen Quantisierungsmatrix geteilt und die Ergebnisse werden auf ganze Zahlen gerundet. Die ersten drei Werte der Folge werden folgendermaßen berechnet: 13 : = 0,1825 gerundet: 0-159 : 11-14,4545 gerundet: 14 9 : 10 = 0,9 gerundet: 0 (die Werte werden immer abgerundet, nie aufgerundet) 7 auch: Gleichanteil (Maß für die mittlere Helligkeit) 17
Da im Beispiel viele DCT Koeffizienten kleiner sind als die dazugehörigen Werte aus der Quantisierungsmatrix, ergeben die Divisionen zusammen mit der Abrundung der Ergebnisse häufig null und diese Werte könnten effizient weiter komprimiert werden. Bei der Wahl der Bewertungsmatrix ist zu beachten, dass ein Blocking-Effekt vermieden wird. Denn dieser lässt die Umrisse der 8x8 Pixel Blöcke für das Auge sichtbar werden. Die Quantisierung birgt einen Unterschied zu JPEG, man kann für jeden Block aus mehreren Quantisierungstabellen wählen (= adaptive quantisation). Das ermöglicht höhere Kompressionsraten, macht aber die Kodierung selbst komplizierter. 3.1.5 Zig Zag Scan Abbildung 4: Zig-Zag-Scan Mithilfe des Zig Zag Scans werden die Koeffizienten nun geordnet. Die Koeffizienten werden in der Reihenfolge des Zick-Zack-Musters von der Matrix in eine eindimensionale Folge gebracht. Da die Frequenzen höher sind, je weiter rechts und unten sie in der Matrix stehen, ist die erhaltene Folge aufsteigend nach der Höhe der Frequenzen geordnet. Im Idealfall sind bei der Quantisierung viele hohe Frequenzen mit Null bezeichnet worden, die nach der Ordnung nun hintereinander stehen. Diese Folgen von Nullen können mit der Lauflängenkodierung effektiv komprimiert werden. 18
Beispiel [Sc02, S. 117]: (vereinfacht hier eine 4x4 Matrix statt der üblichen 8x8 Matrix) 101 10 0-1 0 0 0-1 0 0 0 0 0 1 0 0 Mit dem Zick Zack Muster wird die Matrix der quantisierten DCT Koeffizienten gescannt und wir erhalten die Folge: 101; 10; 0; 0; 0; 0; -1; 0; 0; 0; 1; 0; -1; 0; 0; 0. 3.1.6 DPCM (Differential Pulse Code Modulation) Die DPCM nutzt aus, dass die DC-Komponenten (Gleichanteile) der verschiedenen Makroblöcke sehr stark miteinander korrelieren. Die Gleichanteile haben ähnliche Werte, sind aber sehr unterschiedlich zu den anderen Werten der Makroblöcke. Es wird eine stärkere Kompression erreicht, indem die DC-Komponenten getrennt von den restlichen Werten der Makroblöcke miteinander kodiert werden. Die Differential Pulse Code Modulation (DPCM) wird auf die DC Komponente angewandt. Diese Komponente ist groß und abwechslungsreich, aber oft nah am vorhergehenden Wert (wie verlustfreies JPEG). Es wird die Differenz zu vorhergehenden 8x8 Blöcken kodiert. [St04, S. 27] Die Gleichanteile werden den vorhergehenden Gleichanteilen der anderen Makroblöcke mit der DPCM kodiert. Die Differential Pulse Code Modulation speichert nicht die Werte selbst, sondern ihre Differenz voneinander. Da die Gleichanteile sehr ähnliche Werte haben, ist die Differenz zweier Gleichanteile ein wesentlich kleinerer Bitstring als die Werte selbst. So wird eine höhere Kompression der DC-Komponenten erreicht. Man subtrahiert den vorhergehenden Wert vom aktuellen Wert. X DPCM = Xi Xi 1 19
Beispiel: DC-Komponenten 101 103 99 101 101 2-4 2. Die erste DC-Komponente wird notiert, ab der zweiten werden nur noch die Differenzen kodiert. 101 103 101 = 2 99 103 = -4 101 99 = 2. 3.1.7 Run Length Encoding (RLE, Lauflängenkodierung) Das Run Length Encoding ist ein verlustfreier und sehr einfacher Kompressionsalgorithmus. Er ist besonders effektiv bei Zeichenfolgen mit vielen sich wiederholenden Zeichen. Die Komprimierung funktioniert, indem statt einer Folge von gleichen Werten selbst der Wert und die Anzahl, wie oft er hintereinander vorkommt, gespeichert wird. Eine Folge von gleichen Zeichen wird als run bezeichnet. Für die Folge von Zeichen XXXXXXX wäre die RLE Kodierung 7X. So wird Speicherplatz eingespart. Diese Kodierung ist nicht bei allen Folgen von Werten sinnvoll. Beinhaltet eine Folge von Werten wenig sich wiederholende Werte kann die Kodierung auch länger werden als die originalen Werte selbst. Bei MPEG ist diese Kodierung sinnvoll, da nach der Quantisierung viele Nullen entstehen. Nach dem Zig Zag Scan sind viele Nullen direkt hintereinander angeordnet, die runs der Nullen werden so abgekürzt. Zur Veranschaulichung wende ich die Lauflängenkodierung auf das Beispiel aus Kapitel 3.1.5 an. (Grundsätzliche Lösung RLC: [HBS03, S. 55]) 20
Datenfolge 10 0 0 0 0-1 0 0 0 1 0-1 0 0 0 4 Nullen bis -1 3 Nullen bis 1 Nach RLC 10 (4, -1) (3, 1) (1, -1) (3,...) Die Zahl 101 ist die DC Komponente und wird mit der Differential Pulse Code Modulation kodiert und muss deswegen nicht in die Lauflängenkodierung miteinbezogen werden. 3.1.8 Huffman Kodierung (Variable Length Coding) Die Huffman Kodierung ist eine Form der Entropiekodierung. Eine Entropiekodierung komprimiert die Daten, indem sie Zeichen verschiedene Folgen von Bits zuordnet. Die Verkleinerung der Daten wird dadurch erreicht, dass besonders häufig vorkommenden Zeichen kurze Bitfolgen und selten auftretenden Zeichen lange Bitfolgen zugeschrieben werden. Die aus der Lauflängenkodierung gewonnenen Tupel werden so verlustfrei weiter komprimiert und in Binärschreibweise gebracht. Für die Eindeutigkeit ist die Huffman Kodierung präfixfrei (prefix free). Das heißt, dass ein Bitstring, der für ein Zeichen steht, niemals im Beginn (prefix) eines Bitstrings stehen darf, der einen anderen Wert repräsentiert. Nach der zugrunde liegenden Idee sollen die kürzesten Codewörter für die am häufigsten vorkommenden Werte benutzt werden. Dafür wird eine Tabelle der Werte erstellt, geordnet nach ihren Häufigkeiten. Dem am häufigsten vorkommenden Wert wird das kürzeste Codewort beigeordnet. Dem am zweithäufigsten vorkommende Wert das zweitkürzeste Codewort und so weiter. Die Anwendung des Huffman Codes führe ich mit dem Beispiels aus Kapitel 3.1.5 vor. In der vereinfachten DCT Koeffizienten Matrix kommen vier Werte vor, die kodiert werden müssen: -1, 0, 1 und 10. Um zu entscheiden, welcher der Werte einen kurzen und welcher einen langen Code enthält, wird gezählt, wie oft die Werte vorkommen. Wert -1 0 1 10 21
Vorkommen 3 11 1 1 Prozentuales Vorkommen 0,1785 0,6875 0,0625 0,0625 1 Damit der ganze Code später eindeutig interpretierbar ist, hält man sich bei der Auswahl der Codes an die Präfixfreiheit der Huffman Kodierung. Das heißt, wenn ich den Code 1 benutze, darf ich keinen Code mit einer 1 am Anfang benutzen, wie beispielsweise 10 oder 111. Dann könnte man eine Folge von Codes nicht mehr eindeutig entschlüsseln. (111 könnte für den Wert des Codes 111 oder für dreimalige Wiederholung des Wertes für Code 1 stehen) Nun werden die am häufigsten vorkommenden Werte 0 und 1 den ein- und zweistelligen Codes zugeordnet, die anderen Werte bekommen absteigend nach ihrem Vorkommen längere Codes. Es ergibt sich folgende Zuordnungstabelle: Wert Code 0 0-1 10 1 111 10 110 3.2 Interframe Kodierung: Ausnutzen der temporären Redundanz Die Intraframe Kodierung reicht für die Komprimierung von nicht-bewegten Bildern völlig aus, für die Kompression eines Videos wird jedoch eine stärkere Verkleinerung der Daten benötigt. Eine Kompression von allen Bildern des Videos einzeln verringert die große Datenmenge eines Videos nur ungenügend. Deswegen nutzt MPEG neben der Intraframe Kodierung die Interframe Kodierung und kodiert die Bilder nicht nur einzeln, sondern auch mit Bezug aufeinander. Dabei wird ausgenutzt, dass Videosignale 22
räumliche und zeitliche Informationen haben. So können bei der Videokompression im Gegensatz zur Bildkompression auch zeitlich überflüssige Informationen erkannt und reduziert werden. Zeitliche Redundanzen sind überflüssige Informationen zwischen verschiedenen Bildern. Um das Video zu komprimieren, werden sie herausgefiltert. Doppelte Ausschnitte werden nicht gespeichert und es wird nur eine Referenz auf den ersten Ausschnitt gespeichert. Diese Referenz ist der so genannte Bewegungsvektor (Motion Vector), man speichert nur die Differenz von der Stelle des aktuellen Makroblocks im Referenzbild zu der Stelle des zu referenzierenden Makroblocks. Referenzierter Makroblock Referenzbild Suchbereich Aktueller Makroblock Aktuelles Bild Bewegungsvektor Zeit Abbildung 5: Motion Compensation Während die Intraframe Kodierung nur die Intrakodierten Bilder definiert, unterscheidet die Interframe Kodierung zwischen zwei verschiedenen Arten von Bildern, den Predicted kodierten Bildern (P-Bilder) und den Bidirectional kodierten Bildern (B- Bilder). Die Predicted und Bidirectional kodierten Bilder bieten die maximale Kompression innerhalb von MPEG. B-Bilder können zudem zur Fehlerresistenz beitragen. Einerseits kann der Effekt von Störgeräuschen vermindert werden, dadurch dass ein Durchschnitt zwischen den vergangenen und zukünftigen Referenzblöcken ermittelt wird. Andererseits verbreiten B-Bilder Fehler nicht, denn sie werden selbst nicht als Bezugsbilder genutzt. Wie bei der Intraframe Kodierung muss bei der Interframe Kodierung der RGB Farbraum umgewandelt werden, hin zu einer Trennung von Helligkeits- und 23
Farbsignalen. Die Verkleinerung der zu bearbeitenden Einheiten erfolgt durch die Zerlegung in Makroblöcke. Zur Feststellung ob eine Information ähnlich oder gleich in zwei verschiedenen Bildern vorkommt werden die Makroblöcke verschiedener Bilder verglichen. Gibt es keine Ähnlichkeiten, wird der betreffende Makroblock mit der Intraframe Kodierung kodiert. Gibt es eine solche doppelte Information, wird sie nur einmal kodiert und zur Wiederherstellung des zweiten Makroblocks als Bewegungsvektor auf den anderen Makroblock gespeichert. Der Bewegungsvektor wird erst mit der Differential Pulse Code Modulation (DPCM) und anschließend mit der Huffman Kodierung kodiert. Der Datenstrom liegt wie bei der Intraframe Kodierung nun in Binärwerten vor. R G Bild B C b Y C b Zerlegung in Makroblöcke Y C b C r Für jeden Makroblock Prediction Error Motion Estimation Bewegungsvektor Quantisierung Keine Motion Estimation DPCM Quantisierte DCT Koeffizienten Quantisierung DCT DCT Koeffizienten Huffman Kodierung Zig Zag - Scan DPCM Huffman Kodierung RLE 00101110... Abbildung 6: Interframe Kodierung 24
3.2.1 Blockbasierte Bewegungskompensation Die Idee der Bewegungskompensation (block based motion compensation) beruht darauf, dass sich innerhalb eines Films nur Teile der aufeinander folgenden Bilder ändern. Die Sequenzen können sich sehr ähnlich sein. Wenn der Film zum Beispiel ein fahrendes Auto zeigt, so verändert sich die Position des Autos, seine Beschaffenheit aber nicht. Die Bewegung zwischen gleichen Bildteilen wird herausgefunden und der Bewegungsvektor wird gespeichert. Die blockbasierte Bewegungskompensation nutzt die temporäre Redundanz und speichert doppelt existierende Pixelblöcke als Bewegungsvektor (Motion Vector, auch: Verschiebevektor) des ersten Pixelblocks. Dabei werden doppelte Bildinformationen wie das Aussehen des fahrenden Autos nur einmal gespeichert. Bei der Kodierung wird nun im Referenzbild ein x Pixel großer Makroblock gesucht, der möglichst große Ähnlichkeit mit dem betrachteten Makroblock im aktuellen Bild besitzt. Wenn man einen ähnlichen (fast gleichen) Bildbereich gefunden hat, wird anstelle des aktuellen Makroblocks nur ein Bewegungsvektor kodiert. Die Dekodierung funktioniert dann nur mit dem Makroblock, den man referenziert hat. Findet man für einen Makroblock keinen ähnlichen Makroblock im Referenzbild wird der aktuelle Makroblock mit der Intra Frame Kodierung kodiert und die DCT Koeffizienten werden errechnet. Diesen Makroblock kann man ohne andere Makroblöcke oder andere Informationen wieder dekodieren. Der Unterschied zwischen dem aktuellen und dem zu referenzierenden Makroblock sollte möglichst gering sein. Sobald dieser eine gewisse Größe überschreitet wird die Differenz mitkodiert und abgespeichert, was als Error Term oder Prediction Error bezeichnet wird. Die Größe, ab der ein Error Term mitkodiert wird, hängt von der jeweiligen Implementierung ab, MPEG macht dafür keine Vorgaben. Der Error Term ist wichtig für die Prediction Error Compensation. Beinhaltet der aktuelle Frame beispielsweise ein Rechteck, welches sich auch im zu kodierenden P-Frame befindet, dort allerdings verschoben und gedreht, so kann der Unterschied der Rechtecke mit der Prediction Error Compensation abgebildet werden. Die Verschiebung des Rechtecks wird mit dem Bewegungsvektor ausgedrückt. Die Rotation des Rechtecks wird mit Hilfe des Prediction Errors konstruiert. Die Differenz des Rechtecks und des gedrehten Rechtecks ist der Prediction Error, mit dem und dem Rechteck der Forward Prediction zusammen der P-Frame bei der Dekodierung erhalten wird. 25
Motion Vector I-Frame Forward Prediction + P-Frame Prediction Error Abbildung 7: Prediction Error Compensation Der Bewegungsvektor v * i wird durch die folgende Formel erhalten: v i x V = min 1 D[ IC( x) IR( x + v)] x Mi x ist die Koordinate des Bildpunktes M i ist der Makroblock I C ist das aktuelle Bild (current picture) I R ist das Referenzbild (reference picture) Der Suchbereich V und die Kostenfunktion D werden der Implementierung überlassen. Die B-Bilder sind eine Verbesserung der Bewegungskompensation gegenüber den B- Bildern, denn sie benutzen sowohl den vorherigen, als auch den nachfolgenden Frame für die Suche nach ähnlichen Makroblöcken. So können mehr Redundanzen gefunden werden und die Komprimierung ist stärker als nur die Suche in einem anderen Bild, wie bei den B-Bildern. Anschließend wird der Bewegungsvektor durch einen variablen Lauflängencode dargestellt. (VLC) 26
4 Fazit MPEG hat sich als Standard durchgesetzt. MPEG ist bis heute der weltweit meist verbreitete Standard für Videokompression. Auch das Audioformat MP3, hervorgehend aus dem MPEG Standard, ist auf der ganzen Welt gebräuchlich. Der Erfolg von MPEG liegt wohl in der guten Qualität, die trotz hoher Kompression gehalten wird und darin, dass MPEG die Nutzer nicht an eine bestimmte Firma bindet. Die bisherige Entwicklung hat über die Jahre die Qualität der komprimierten Bilder noch steigen lassen. Außerdem lässt MPEG viele Möglichkeiten und erlaubt den Herstellern, die Algorithmen zu verändern. Eine effektive Kompression von digitalen Videodaten wird aktuell immer wichtiger, zum Beispiel im Zuge der Einführung des digitalen Fernsehens, der Entwicklung von HDTV oder des ATM basierten Breitband ISDN. 27
Literaturverzeichnis [AS99] [Br97] [Ch96] [Fi02] Supavadee Aramvith, Ming-Ting Sun: MPEG-1 And MPEG-2 Video Standards, Academic Press, 1999. Ilja N. Bronstein, Konstantin A. Semendjajew, Gerhard Musiol, Heiner Mühlig: Taschenbuch der Mathematik, Harri Deutsch, 1997. Kulanthai Chandrarajh: What Is MPEG Video Compression Standard?, http://www-dse.doc.ic.ac.uk/~nd/surprise_96/journal/vol2/ck4/article2.html, 1996. Peter Fischer: Lexikon der Informatik Für Praxis und Studium, SmartBooks, 2002 [Fis02] Sven Fischer: Grafikformate GE-PACKT, mitp, 2002. [Fu96] [HBS03] [KR07] [LG91] Funke: Konzeption und Entwicklung eines Video Effect Modelers, (Diplomarbeit), 1996. Arne Heyna, Marc Briede, Ulrich Schmidt: Datenformate im Medienbereich, Carl Hanser Verlag, 2003. Uwe Kühhirt, Marco Rittermann: Interaktive audiovisuelle Medien, Carl Hanser Verlag, 2007. Didier Le Gall: MPEG: A Video Compression Standard for Multimedia Applications, Communications of the ACM, Vol.34, No.4, 1991. [RP02] Peter Rechenberg, Gustav Pomberger: Informatik-Handbuch, Hanser, 2002. [Sc02] Ulrich Schmidt: Digitale Film- und Videotechnik, Carl Hanser Verlag, 2002. [St04] [SW99] Michael Stepping: Ein Beitrag zu MPEG 4 Broadcast, Stepping (Dissertation), 2004. Joachim Schulze-Wenck: Datenreduktion Digitalisierter Fernsehbilder, Unterrichtsblätter der Deutschen Telekom Heft Nr. 8, 1999.