Hoe werkt MPEG

De compressietechniek mpeg staat voor ‘Moving Pictures Experts Group’, een collectief van wetenschappers die een methode bedachten om bewegende beelden te comprimeren. De methode maakt daarbij onderscheid tussen de beelden van een film en het geluid. De compressietechniek voor geluid wordt MPEG audio Layer-3 genoemd. Deze techniek is natuurlijk vooral bekend onder de naam mp3.

Datahonger

Het weergeven van videobeelden vergt enorme hoeveelheden informatie. Kort door de bocht gezegd bestaat film uit stilstaande beelden die snel achter elkaar worden afgespeeld. In Europa gebruiken we hiervoor 25 beelden (frames) per seconde. De afzonderlijke beelden zijn in standaard beeldkwaliteit (dus geen HDTV) opgebouwd uit 720 pixels in horizontale richting en 576 verticale pixels. Iedere pixel wordt opgebouwd uit de drie primaire kleuren rood, groen en blauw, die alledrie een kleurdiepte hebben van 8-bit (256 mogelijke grijswaarden of 1 byte). Dit betekent dat een film van anderhalf uur het aantal van 3600 seconden x 1,5 uur x 25 frames x 720 x 576 x 3 byte is maar liefst 167.961.600.000 bytes in beslag neemt. Deze enorme datahonger leidt dus tot een film ter grootte van 168 gigabyte, en dat is veel te veel voor de 4,8 gigabyte die de eerste generatie dvd’s aan data kunnen bevatten. Als een film met een lengte van anderhalf uur op een dvd moet passen, betekent dit dat de hoeveelheid data dus met en factor 37 moet worden verkleind.

Informatielagen

Mpeg deelt een filmbestand allereerst op in een aantal lagen (‘layers’), die onder andere bedoeld zijn om fouten in het bestand af te handelen, geluid en beeld te synchroniseren en zoekopdrachten te kunnen uitvoeren. Beeld en geluid worden afzonderlijk van elkaar gecomprimeerd. Dat kan ook omdat het geluid in ‘Layer 3’ van het videobestand is ondergebracht. Het zijn overigens geen fysieke lagen in de zin van een cd die is opgebouwd uit diverse lagen van verschillende materialen die op elkaar liggen, maar informatielagen. Eén van de informatielagen bevat alle afzonderlijke beelden (frames) van de film. Hier vindt de compressie plaats.

Grijswaarden

Een film bestaat zoals gezegd uit een lange reeks van afzonderlijke beelden. Dat zijn dus feitelijk gewone afbeeldingen, dus lijkt het logisch om al die beelden met behulp van bijvoorbeeld de jpeg-methode te comprimeren. De mpeg-compressie past inderdaad een methode toe die vrijwel volledig overeenkomt met jpeg. Deze compressietechniek wordt uitgebreid besproken in het tweede deel van deze serie over datacompressie. Nog even kort het basisprincipe van jpeg: een afbeelding wordt verdeeld in een aantal matrices van 8 bij 8 pixels. Van iedere pixel wordt de lichtsterkte of grijswaarde vastgesteld. Met behulp van een wiskundige transformatie worden al die waarden zodanig aangepast, dat bepaalde gebieden in één keer gecomprimeerd kunnen worden. Alhoewel een afbeelding met behulp van jpeg behoorlijk kan worden verkleind met behoud van een redelijke kwaliteit, kan deze compressietechniek een film toch onvoldoende sterk comprimeren. Er moeten dus krachtigere middelen worden toegepast.

mpeg_01
Afbeelding 1
Voorspelling

Een andere manier om film te comprimeren baseert zich daarom op de voorspelling over de verschillen tussen de frames. De afbeeldingen (frames) worden hier opgedeeld in matrices (macroblocks) van 16 bij 16 pixels. In ieder macroblock worden de objecten geanalyseerd en vergeleken met hetzelfde macroblock in een volgend frame. Hieruit wordt informatie gehaald over de snelheid waarin een object zich in een bepaalde richting beweegt (of juist niet beweegt). Dit soort informatie kan perfect en met zeer weinig data (bits) worden omschreven met een vector. Ter vergelijking: een programma als Adobe Illustrator werkt ook met vectoren om tekeningen te omschrijven met relatief weinig bits. Frames die volgens deze methode zijn gecomprimeerd, heten ‘predictive-coded’ of ‘P-Frame’. De methode werkt extreem goed in een film waar grote delen van de set niet of nauwelijks veranderen. Een studio waar een nieuwslezer het journaal ‘doet’ bijvoorbeeld. Het is dan namelijk heel eenvoudig om het volgende beeld te voorspellen: er verandert namelijk bijna niets. Feitelijk bestaat de analyse er dan uit dat object ‘x’ in frame ‘y’ verscheen in macroblock 24 en duizend frames later nog steeds op dezelfde plek staat. Een dergelijke film kan met bijzonder weinig bits worden omschreven!

Tweerichtingsverkeer

De meeste films zijn helaas een stuk dynamischer dan de voorgaande scène. Zelfs tijdens het journaal maakt een nieuwslezer af en toe plotselinge, heftige bewegingen, of maakt de camera een zwenkbeweging. Dan zijn de veranderingen van frame tot frame dus behoorlijk groot. Dan kan het gebeuren dat een bepaald object dat zich in een frame bevindt, in het daaraan voorafgaande frame nog helemaal niet te zien was, of zich op een extreem andere plek bevond. De voorspellende methode van de voorgaande paragraaf voldoet dan niet meer. Voor dat soort gevallen maakt mpeg gebruik van een voorspelling op basis van een voorafgaand frame én een volgend frame, een soort tweerichtingsverkeer dus. De techniek is verder hetzelfde: de frames worden ingedeeld in macroblocks van 16 bij 16 pixels en de snelheid en richting van de objecten daarin worden voorspeld. Frames die volgens deze methode zijn gecomprimeerd, heten ‘bidirectionally-predictive-coded’ of ‘B-Frame’

mpeg_02
Afbeelding 2
Anker

De kracht van de hiervoor geschetste voorspellende vectormethoden is dat ze bewegend beeld heel goed kunnen comprimeren. De kracht is helaas ook tevens het zwakke punt, want het is gebaseerd op een voorspelling. En die kan er naast zitten. Het probleem is dat er dan een frame wordt opgebouwd dat niet helemaal correct is. Maar dat frame is wel weer de basis van een volgend frame, of misschien zelfs wel van invloed op twee frames. De volgende voorspelling van een frame baseert zich dan al op een foutje, hetgeen de kans op een volgende fout vergroot, enzovoort. Er is daarom behoefte aan een regelmatig terugkerend ‘anker’, een beeld dat op zichzelf staat en altijd terug is te ‘rekenen’ naar het origineel. Dat zijn dus de frames die met de op jpeg gelijkende methode worden gecomprimeerd. Ze worden Intra-frame (I-frame) genoemd, omdat ze worden gecomprimeerd met slechts hun eigen data.

Heidens karwei

Zoals we allemaal weten, lijkt een jpeg heel behoorlijk op het originele plaatje. Het I-frame blijft na compressie dus altijd zeer dicht in de buurt van het origineel en is daarmee een zeer solide referentie voor de voorgaande en voorafgaande frames uit de film. Alhoewel de mpeg-methode niets zegt over het gebruik van de twee typen voorspellende compressiemethoden, wordt toch vaak een vast patroon gebruikt: I-frame, B-frame, B-frame, P-frame, B-frame, B-frame, P-frame, B-frame, B-frame, P-frame; dan weer dezelfde reeks beginnend met een I-frame, enzovoort. Op deze manier worden alle 3600 (seconden) x 25 (frames) x 1,5 (uur) = 135.000 frames van de anderhalf uur durende film ingedeeld. Vervolgens moeten al die frames geanalyseerd worden, vergeleken met één of twee andere frames en volgt aan het eind van dit proces nog het samenvoegen van alle data in de in het begin van dit artikel beschreven informatielagen. Een heidens karwei! Het is dus niet zo verwonderlijk dat het omzetten van een film in een mpeg heel veel tijd in beslag neemt, zelfs op de krachtige pc’s waarover we tegenwoordig kunnen beschikken!

mpeg_03
Afbeelding 3
Scroll Up

Pin It on Pinterest