Video
               

Vorwort

Im folgenden wird die grundsätzliche Vorgehensweise bei einer Mpeg-Kodierung erläutert. Bitte lesen Sie den Haftungsauschluss im Impressum.

Geschichtliches

Bei Mpeg handelt es sich um eine Gruppe aus Entwicklern, Ingenieuren und Mathematikern, die sich 1988 zur Moving Pictures Expert Group mit dem offiziellen Namen ISO/IEC JTC1 SC29 WG11 zusammenschlossen. Ziel dieser Gruppe war es, ein Komprimierungssystem für Daten zu erfinden, um Speicherplatz zu sparen und diese damit internettauglich zu machen, denn bei Mpeg handelt es sich auch um ein internetorientiertes Unternehmen. Was der Name dieser Gruppe nicht in sich birgt (Moving Pictures = Bewegende Bilder = Film) ist, dass dieses Komprimierungsverfahren zunächst nicht bei Filmen angewandt wurde, sondern bei Audiodaten. Als erstes Produkt der Mpeg1 Familie kam nämlich wider erwarten 1989 das MP3 Format auf den Markt, das bis heute noch Spitzenreiter in der Audiokomprimierung ist. Das für die Video CD taugliche Mpeg1 Format kam erst 1993 auf den Markt. Es besteht heute aus 5 Teilen, wovon sich alle als Standard durchgesetzt haben. Als preisgekröntes Komprimierungsformat (Emmy Award) wurde es ab 1996 zu Mpeg2 weiterentwickelt. Auch dieses Format gewann wie sein Vorgänger den Emmy Award und wurde bis Mitte 2000 weiterentwickelt. Das Mpeg2 Format besteht nun aus neun Teilen, von denen sich drei als Standard durchgesetzt haben. Das wohl zur Zeit fortschrittlichste und auch aktuellste Format der Moving Pictures Expert Group ist das 1999 auf den Markt gebrachte (und standardisierte) Mpeg4 Format. Dieses Format hat heutzutage die stärksten Komprimierungseigenschaften in nahezu DVD Qualität. Leider konnte es bislang das auf DVD's übliche Mpeg2 Format noch nicht ablösen, da bis vor kurzem kein DVD Spieler Mpeg 4 lesefühig war. Es gibt zwar mittlerweile DVD Spieler, die Mpeg4 tauglich sind, jedoch ist das Mpeg2 Format immer noch DVD Standard, da Die Mpeg2 Spieler sehr stark verbreitet sind und kaum einer extra wegen Mpeg4 einen neuen DVD Spieler kaufen will. In Zukunft wird sich das Videoformat für DVD´s ändern. BlueRay und Konsorten sind im Gespräch und sollen künftig bis zu 40 GB Speicherkapazität bieten.
Zu Mpeg verwandte Formate sind z.B. auch Jpeg und AVI. Weitere Videokomprimierungsformate sind evtl. noch zu erwarten. Das neu entwickelte Mpeg7 Format hat mit seinen Vorgängern so gut wie nichts gemein und wurde für die Suche von Mediadateien im Internet entwickelt. Mit ihm soll es in Zukunft möglich sein, Audio- und Bilddateien anhand von Fragmenten zu finden. Die dafür entwickelten Suchmaschinen suchen nicht nach subjektiv geschriebenen Metadaten sondern nach passenden Bild- und Tonteilen. Dieses Format gilt als Metadatenstandard. Als letztes wurde Mpeg21 entwickelt, das für Digitalkamerabesitzer sehr interessant sein dürfte. Mit diesem Format ist es möglich, digitale Bilder online zu bearbeiten und auszudrucken. Die bislang dafür benötigte teure Software war wohl der Anstoß für dieses Projekt und dürfte den Softwareherstellern künftig ein Dorn im Auge sein. Den Konsumenten allerdings wird diese Möglichkeit erfreuen und ihm auch viel Geld ersparen.

↑ Nach oben

Der Kodierungsvorgang

Was Mpeg macht und ist

Um einen Film in Mpeg zu kodieren werden verschiedene Schritte benötigt, um die vorhandenen Bilddaten zu komprimieren. Das beginnt bereits beim Farbraum. Nachdem das menschliche Auge weniger Chrominanzwerte (Farbwerte) als Luminanzwerte (Helligkeitswerte) unterscheiden kann, werden die Bildinformationen in einen anderen Farbraum übergeben. Weiterhin wird mit der Trägheit des menschlichen Auges gearbeitet, um weiteren Speicherplatz zu sparen. Durch geschickte Voraussagungen und Abschätzungen lassen sich dann noch einmal einige MB einsparen.
Zunächst aber erst einmal etwas zu dem momentan in Deutschland standardisierten Pal-System (Fernsehstandard):
In Deutschland werden auf dem Fernseher 25 Bilder pro Sekunde angezeigt. Das entspricht 50 Halbbildern pro Sekunde, denn das Bild wird vom Fernseher nicht auf einmal aufgebaut, sondern in Zeilen. Zuerst werden die ungeraden, dann die geraden Zeilen aufgebaut. Dieses Verfahren nennt man Zeilensprungverfahren. Das merkt allerdings das menschliche Auge aufgrund seiner Trägheit nicht. Desweiteren wird im deutschen Fernsehbild mit einer Farbtiefe von 24 bit im RGB Farbraum gearbeitet. Das bedeutet, dass jede Farbkomponente, also Rot, Grün und Blau, mit 8 bit abgespeichert wird.
Mpeg digitalisiert nun jeden 8x8 Pixel Block und derren Bilddaten, die in Form von Schwingungen auftreten. Die Amplitudenwerte dieser Schwingungen werden in eine Matrix mit 8x8 Pixeln gespeichert, und ergeben somit 64 Werte. Diese Werte bzw. die Beträge werden noch verringert. Das hat den Hintergrund, dass die Bildinformationen im Fernsehbild eines gewöhnlichen Filmes überwiegend in den niedrigen Bildfrequenzen liegen. Deshalb kann man hier gut und gerne auf die hochfrequenten Teile verzichten. Ein Nachteil dieser Methode: Das Bild wird dunkler.
Wollte man dagegen einen Zeichentrickfilm konvertieren, müßte man die Konvertierung auf die hochfrequenten Bildinformationen auslegen. Das wird allerdings noch genauer erklärt.
Im folgenden werden nur die Verfahren genauer erklährt, die desöfteren ein Einschreiten des Benutzers benötigen. Die Standardverfahren, die immer so ablaufen, werden nur erwähnt.

↑ Nach oben

YCbCr - Ein neuer Farbraum

Der RGB Farbraum ist aufgrund seines hohen Speicherbedarfs und seiner geringen Wahrnehmbarkeit überflüssig. Deshalb wird dieser Farbraum in einen für das menschliche Auge angepassten Farbraum (YCbCr entspricht YUV) transportiert. Das erfolgt dahingegen, dass im YUV Farbraum ein Teil Luminanzwerte und zwei Teile Chrominanzwerte tragen. Diese Teile werden dann, wie bei RGB auch, mit 8 Bit Farbtiefe abgespeichert (äquivalent zu Bildauflösungen). Normalerweise würde das zur gleichen Farbtiefe wie im RGB Format führen (auch 3 Teile). Deshalb werden die beiden Farbanteile nur mit halber Auflösung abgespeichert, was der Name YUV 4:2:2 bereits in sich birgt (bei Jpeg-Bildern ist das 4:1:1). Das spart nun rund ein Drittel des eigentlichen Speicherbedarfs.
Das mit der Auflösung funktioniert so: Da in einem gewöhnlichen Standardbild (nach PAL, dem deutschen Standard) von 625 Zeilen (jede mit 720 Pixeln) nur 576 Zeilen (mit je 702 Pixeln) Bildinformationen tragen, muss das gesamte Bild auch nicht mit voller Auflösung konvertiert werden. Weiterhin wird ja konzentriert im Luminanzbereich abgespeichert, deshalb können zusätzlich die Helligkeits- und die Farbwerte mit verschiedenen Auflösungen konvertiert werden. Letztendlich ergibt das für den Luminanzwert eine Auflösung von 352x288 Pixeln und für die Farbwerte je eine Auflösung von 176x144 Pixeln (da diese ja nur zur Hälfte abgespeichert werden). Wem das jetzt zu kompliziert erscheint, der sei beruhigt: Es ist stark vereinfacht, weil der mathematische Aspekt außer Acht gelassen wurde.
Das ursprüngliche Bild wird folgendermaßen aufgeteilt:

Filmeinteilung

Die eigentliche Videosequenz wird in die verschiedenen Einzelbilder zerlegt. Danach werden die Zeilen (Slices), die aus diversen Makroblöcken bestehen, in 8x8 Pixel Blöcke unterteilt. Wie diese Blöcke durch geschickte Vektordarstellungen und "Voraussagungen" in ihrem Speicherbedarf reduziert werden, folgt.

↑ Nach oben

DPCM - Differenzpulsecodemodulation und Motion Compensation Search

Diese, zugegebenermaßen kompliziert klingenden Begriffe sind weitere Methoden, um den Speicherbedarf eines Filmes zu verringern. Dazu erst einmal ein Beispiel:
Ein Mann bewegt sich in einem Bild von links nach rechts. Der Hintergrund verändert sich aber kaum. Das vollständige Bild erneut komplett zu kodieren wäre nicht sinnvoll, da sich ja nur der Mann bewegt. Das gleiche hat man eben auch bei Kameraschwenks, da hier immer ein Großteil der Bilddaten des vorherigen Bildes im neuen Bild vorhanden sind.
In beiden Fällen wäre es sinnvoller, nur den sich verändernden Teil zu "verschieben". Ergo reicht es doch vollkommen aus, ein vollständiges Bild abzuspeichern und die folgenden Bilder aus diesem abzuleiten. Genau das tut DPCM. Die sich bewegenten Bilddaten werden nur in einem kompletten Bild, I-Frames, abgespeichert und die weiteren Bilder, die eigentlich keine Bilder sind, enthalten lediglich Daten für die Verschiebung, oder auch für die Fehlerkorrektur (wenn sich das Bild nur geringfügig ändert). Um diese Prognose genauer zu gestalten, werden sowohl vorangegangene als auch nachfolgende Bilddaten für diese Abschätzung verwendet. Dieses Verfahren nennt man sinnvollerweise Referenzierung. Nachfolgend werden die Arten von Bildern, die für die Referenzierung verwendet werden, vorgestellt:

  • I-Frames: Diese, auch intrakodiert genannte Bilder, werden als reelle Bilder abgespeichert. Sie werden in der Regel als Jpeg Bilder abgespeichert und dienen in der Regel als Bezugsquelle für die nachfolgenden Bilder. Sie werden auch eingesetzt, wenn ein referenzieren nicht möglich oder zu aufwendig ist.
  • P-Frames: Sie werden nur auf vorangegangene I- oder P-Frames referenziert (forward predicted). Sie dienen selbst als Bezugsquellen und werden bei Bedarf (wenn sich der Bildinhalt zu stark ändert, intrakodiert abgespeichert (wie I-Frames).
  • B-Frames: Die bidirectional predicted Frames werden sowohl an vorangegangene als auch an folgende I- oder P-Frames referenziert. Sie selbst dienen nicht als Bezugsquelle, was eigentlich durch ihre Referenzierung in beide Richtungen logisch erscheint. Außerdem werden so Folgefehler vermieden. B-Frames können aber auch nur in eine Richtung referenziert werden.

Diese Bilder werden in einer geschickten und beliebigen Reihenfolge zu einer sogenannten GOP (Group of pictures) zusammengestellt. Ein Beispiel für eine solche Zusammenstellung ist im folgenden Bild zu sehen:

Leider keine Darstellung

Diese Bilderfolge ist allerdings nicht mehr komperativ mit der ursprünglichen Bildsequenz. Die Bilder in der GOP werden nicht so zusammengestellt wie sie abgespielt werden, sondern in einer logischen Reihenfolge. Das muss auch so sein, weil ein B-Frame schließlich ein vorangegangenes als auch ein folgendes Bild benötigt (mit Ausnahme der Referenzierung in eine Richtung). Damit man nun nicht nur große Bewegungszustände mit sogenannten Referenzvektoren (=Verschiebungsvektoren, keine Ortsvektoren!) beschreiben kann, werden die Luminanzanteile in Makroblöcke und die Chrominanzwerte in Blöcke aufgeteilt. Diese Makroblöcke werden dann mit den vorangegangenen und folgenden Bildern nach bester Übereinstimmung verglichen.

Suchbereich

Wird nun ein Block mit einer sehr großen Übereinstimmung gefunden, wird der Fehlerterm (die Differenz) und der Referenzvektor kodiert. Andernfalls wird der Makroblock intrakodiert abgespeichert. Die Methode zum Suchen und das Festlegen des Suchbereiches und dessen Genauigkeit bleibt dem Konvertierer überlassen. In der Regel werden aber entweder die sog. Teleskopsuche oder die logarithmische Suche verwendet. Die bereits gespeicherten Referenzvektoren werden dann wieder nach DPCM kodiert, indem man eben den Fehlerterm (Differenz zu den Vektoren der vorangegangenen Makroblöcke) und eben der neue Referenzvektor gespeichert werden.

↑ Nach oben

DCT - Die Diskrete Kosinustransformation

Bei der diskreten Kosinustransformation werden die von der DPCM in Binärdaten umgewandelten Filmdaten weiter verarbeitet. Hierbei wird mit 8x8 Pixel Blöcken gearbeitet und folgende "Hauptformel" angewandt:

Die DCT Formel

Das N in der Formel entspricht der Anzahl der Pixel eines Blocks (vertikal und horizontal). Das heißt, wenn ein Block mit 8x8 Pixel konvertiert werden soll, ist N=8. Diese Matrix aus 8x8 Werten (=64) wird aus dem zeitlich abhängigen Bereich in einen Frequenzbereich transformiert. Diese Transformation lehnt stark an die Fourier- oder Leplacetransformation an. Der Wert gij ist der Farbwert in der Matrix an der Stelle (i,j), wobei i dem Spaltenindex und j dem Spaltenzahl zugeordnet wird. Guv ist demnach der neue Wert in der transformierten Matrix in der u-ten Spalte und der v-ten Zeile. An der oberen, linken Stelle der Matrix (Stelle (0,0)) befindet sich der DC-Wert. Da sich benachbarte Blöcke kaum voneinander unterscheiden, werden die DC-Werte nur als Differenz zu benachbarten Blöcken kodiert. Alle anderen Werte werden mit steigender Zeilen- und Spaltenzahl hochfrequenter und repräsentieren AC-Werte (wie in der Elektrotechnik). Der DC-Wert wird auch als Gleichanteil bezeichnet. Desweiteren wird mit der Blöckgröße, mit der konvertiert wird, die Genauigkeit der Umwandlung bezeichnet. Diese wird entweder vom Benutzer oder vom Programm festgelegt.
Der gesamte Vorgang findet im zweidimensionalen Raum statt (Zeilen und Spalten). Abgesehen von Rundungsfehlern und den diskreten Elementen führt die Transformation zu Informationsverlust. Als diskret wird ein separates, einzelnes Element bezeichnet, dass man als Einheit sieht (z.B. ein Bit). Die Rücktransformation, die sogenannte inverse DCT (IDCT), wird hier nicht besprochen, da sie, wenn man einen Film nur konvertieren will, irrelevant ist.

↑ Nach oben

Die Quantisierung

Die von der DCT erhaltenen Matrizen werden nun noch quantisiert. Das hat den Hintergrund, dass die bisher gespeicherten Werte immer noch ihren Fokus auf den hochfrequenten Filmdaten haben. Die Quantisierung ist ein rein rechnerisches Verfahren, bei dem jeder Matrixwert aus der DCT mit seinem dazugehörigen Wert in der sogenannten Quantisierungstabelle dividiert wird. Diese Quantisierungstabelle und die darin enthaltenen Divisoren werden für die verschiedenen Filmarten optimiert. So haben ein "natürlicher" Film und animierter (Zeichentrick-) Film unterschiedliche Quantisierungsmatrizen.
Eine Quantisierungsmatrix besteht wie die DCT Matrix aus 8x8 (also 64) Werten. Damit diese Matrix in der Praxis angewendet werden kann, muss sie vor der Berechnung noch mit einem Quantisierungsfaktor skaliert werden. Der Quantisierungsfaktor bestimmt die Kompressionsstärke und die Matrix die Qualität.
Zurück zu der Problematik mit den hochfrequenten Bildteilen. Diese werden in normalen Filmen als Rauschen wahrgenommen, die niederfrequenten Teile, die vom menschlichen Auge wahrnehmbar sind, als Bildinformationsträger. Das heißt, dass man bei der Quantisierung die hochfrequenten Anteile stärker quantisieren kann. Würde man die niederfrequenten Anteile zu stark quantisieren, interpretierte das menschliche Auge diese als Blockartefakte ("Verpixelung"). Deshalb nehmen die Beträge der Quantisierungstabelle in der Regel von der Stelle (0,0) (oben links) bis zur Stelle (7,7) (unten rechts) stark zu.
Wie in der DPCM erklärt werden einige Bilder intrakodiert und andere nur in Abhängigkeit zu anderen Bildern abgespeichert. Das muss in der Quantisierung berücksichtigt werden. Deshalb gibt es zwei Arten von Quantisierungsmatrizen: Die für Intra- und die für Nicht-Intrakodierte Bilder. Die intrakodierten Bilder werden, nachdem sie nach wie vor ihren Fokus auf den hochfrequenten Teilen haben, unterschiedlich quantisiert. D.h. dass die hochfrequenten Teile (wie bereits erwähnt) stärker unterdrückt werden. In der Interquantisierungsmatrix werden die nicht-intrakodierten Bilder berücksichtigt, indem man in der Regel alle DCT-Werte durch den gleichen Wert teilt. Die Interquantisierungsmatrix besteht in der Standardeinstellung nur aus dem Wert 16. Die Intraquantisierungsmatrix sieht normalerweise so aus:

Quantiesierungstabelle

Bei der Intraquantisierung spricht man von einem schmalen Nullband, da die meisten Werte immer noch über Null liegen. Im Gegensatz dazu bekommt man bei der Interquantisierung ein breites Nullband, da die meisten Werte zu Null reduziert werden. Zuletzt ist noch zu erwähnen, dass der Wert der Quantisierungstabelle an der Stelle (0,0), also der DC-Wert immer 8 sein muss.

↑ Nach oben

Die RLE-Kodierung (Run-Length-Encoding)

Nachdem die Bilddaten nun effizient komprimiert wurden, müßen nun noch eine neue Filmsequenz mit den neuen Bilddaten erstellt werden. Das beginnt mit der sog. Serialisierung der Bilddaten, dass heißt konkret in diesem Fall, dass die quantisierten DCT-Werte nacheinander, ihrem Wert hierarchisch aufsteigend, gereiht werden. Dies geschieht, nachdem die Beträge von der jeweiligen Position abhängig sind, im Zick-Zack Verfahren:

Zick-Zack

Nachdem die Werte aneinandergereiht wurden, werden sie nun Lauflängenkodiert. Dabei werden allerdings nur die Nullwerte zusammengefasst. Bei der Lauflängenkodierung werden mehrmals vorkommende Werte nur einmal zusammen mit einem Zähler kodiert. Da allerdings auch der Zähler Speicherplatz beansprucht, werden Werte mit kleinen Zählern (bis ca. 3) garnicht kodiert. Deshalb beschränkt sich die Kodierung lediglich auf die Nullen der Reihe. Die RLE bildet ein separates, und auch komplexes Thema, dass hier nicht genauer besprochen werden soll (wie die meisten anderen Themen auch).

Die Entropie-Kodierung

Im letzten Schritt werden die Bilddaten nach der statischen Huffmann-Kodierung kodiert. Da dieses Thema allerdings so komplex und, was noch wichtiger ist, so standardisiert ist, wird es hier nur erwähnt und nicht besprochen.

↑ Nach oben

Die Enkodierung in der Praxis

Um nun ein Video umwandeln zu können, braucht man natürlich Software. Folgende Liste guter und kostenloser Software schlage ich vor:

Beim Programm TMpgENC ist noch anzumerken, dass MPEG2 Videos nur auf 30 Tage befristet sind.
Folgende Anleitungen stehen zur Verfügung:

  • Von AVI zu MPEG
  • Von VOB zu MPEG

Diese Anleitungen enthalten auch Hinweise wie das extrahieren von Audiospuren etc.

  ©2005 by Antonio Zangaro