Zonder de MPEG video compressiefactor van 140 zouden er geen
YouTube en Netflix video's en DVD's bestaan. In dit artikel beschrijven wij
de wonderbaarlijke technieken die men heeft bedacht om die grote
datacompressie bij het digitaliseren van een film te realiseren: van 160
Mbit/s naar 1,14 Mbit/s.
Auteur: Jos Verstraten, Landgraaf, Nederland
Email: josverstraten@live.nl
Publicatiedatum: 12-10-2019
Een historische inleiding
Digitaal verzenden van data heeft beperkingen
Toen de elektronica industrie in het begin van de jaren tachtig begon te filosoferen over
digitale communicatie werd al snel duidelijk dat het nooit zou lukken foto's, video en audio
ongecomprimeerd te versturen. Immers, een gedigitaliseerde foto met een resolutie van
1.024 bij 1.024 pixels en met een kleurendiepte van 24 bit, een minimale vereiste voor
professioneel kleurendrukwerk, neemt ongeveer 3 MB aan opslagruimte in beslag. Nu waren
er wel een heleboel compressietechnieken ontwikkeld, maar de internationale industrie was
er gelukkig van overtuigd dat er één wereldstandaard voor de compressie van digitale audio
en video moest worden afgesproken. Die standaard zou flexibel moeten zijn, zodat een en
dezelfde hardware door software geprogrammeerd kon worden voor verschillende soorten
compressie algoritmen. Op deze manier zou de internationale standaard zonder grote
problemen aangepast kunnen worden aan verschillende toepassingen, die ieder hun eigen
eisen stelden.
JPEG
Op initiatief van twee internationale normeringsinstituten, de ISO (International
Standardisation Organisation) en de IEC (International Electrotechnical Committee) werd in
1988 een internationale werkgroep opgericht met als naam 'Joint Photographic Expert
Group'. Deze werkgroep ging door het leven onder de naam 'JPEG' en was samengesteld uit
internationaal toonaangevende experts op het gebied van compressie technieken en digitale
beeldverwerking. De werkgroep ontwikkelde op korte termijn een beeldcompressie techniek,
die geschikt was voor een breed scala van toepassingen met verschillende kwaliteiten,
resoluties, compressieniveaus en kleurmodellen. Deze techniek kreeg ook de naam 'JPEG'
en werd beschreven in de ISO/IEC-norm 10.918.
JPEG werd ontwikkeld voor de compressie van statische beelden zoals krantenfoto's.
Daarvoor wordt het algoritme nu nog steeds gebruikt. Vrijwel alle foto's en illustraties op
Internet staan in .JPG-formaat, een rechtstreekse afgeleide van de JPEG-standaard.
Natuurlijk dacht men er wel aan deze techniek ook toe te passen voor het comprimeren van
dynamische beelden, dus video. In de begintijd van deze techniek waren de noodzakelijke
processoren echter niet snel genoeg om beelden in real time te comprimeren en nadien weer
te decomprimeren.
Lossy en lossless JPEG
Alvorens de MPEG compressietechniek te bespreken moet er nog een opmerking over de
JPEG-standaard worden gemaakt. De standaard beschrijft twee compressieschema's:
- Lossy.
- Lossless.
Bij de lossy techniek zal het beeld dat wordt teruggewonnen uit de compressiegegevens niet
identiek zijn aan het originele beeld. Er worden dus bij de compressie gegevens verwijderd.
Nu valt dat nauwelijks op, omdat het menselijk oog een vrij ongevoelig instrument is. Zo is het
oog zeer ongevoelig voor kleine nuances in kleur. Van deze wetenschap wordt bij de lossy
techniek gebruik gemaakt om zeer hoge datareducties te verkrijgen.
Een foto als lossy JPG met diverse compressiefactoren. (© 2004 BenTheWikiMan)
MPEG
De ontwikkeling van beeldopslag op compact disks noopte de ontwikkelaars om ook voor
video een compressie algoritme te ontwikkelen. De uitdaging was groot. De originele CD had
immers een maximale datasnelheid van slechts 1,411 Mbit/s. Voor het aangaan van deze
uitdaging werd een nieuwe internationale werkgroep opgericht, die deze keer de naam
'Moving Picture Expert Group' kreeg, afgekort tot MPEG.
Natuurlijk is het duidelijk dat deze werkgroep voort borduurde op de JPEG-technologie. Het
grote verschil tussen JPEG en MPEG is dat JPEG beeldje voor beeldje comprimeert, zonder
rekening te houden met de samenstelling van een vorig en/of volgend beeldje. MPEG doet
dat wél en bereikt een zeer grote datareductie door alle gegevens die hetzelfde zijn in
opeenvolgende beeldjes simpelweg te negeren, of beter uitgedrukt, maar één keer te
comprimeren en te verzenden in een zogenoemd referentiebeeld. Nadien worden alleen de
verschillen tussen opeenvolgende beeldjes opgezocht en verzonden in verschilbeeldjes.
Deze techniek noemt men 'motion compensation' en het zal wel duidelijk zijn dat hierdoor een
immense datareductie wordt verkregen. Nadat de originele videobeeldjes op deze manier zijn
omgezet in weinig (omvangrijke) referentiebeeldjes en veel (minder omvangrijke)
verschilbeeldjes worden op sommige beeldjes de JPEG-algoritmen losgelaten.
Hierbij heeft men gekozen voor de lossy techniek, omdat het kwaliteitsverlies bij bewegende
beelden nog veel minder opvalt dan bij statische beelden. Door een combinatie van de lossy
JPEG-techniek en de motion compensation MPEG-techniek en enige compromissen wat
betreft resolutie en kleursamenstelling van het beeld is men in staat video die bestaat uit 25
beeldjes per seconde te verzenden met een datastroom van maximaal 1,2 Mbit/s.
Diverse MPEG compressie algoritmen
MPEG is een universele compressiestandaard voor video en audio, waarvan in de loop der
technische evolutie diverse versies zijn verschenen, met steeds meer mogelijkheden.
MPEG-1
Versie 1 uit 1991 is de initiële compressiestandaard voor video en audio, opgesteld door
de 'Moving Picture Experts Group'. Later werd deze gebruikt als standaard voor video-
CD. Het formaat beschrijft ook het populaire Layer 3 (MP3) audiocompressie formaat
dat nu nog steeds overal wordt gebruikt voor het gecomprimeerd verzenden van
audiostreams.
MPEG-2
Het MPEG-2 formaat is voornamelijk ontwikkeld voor het transporteren van digitale
kwalitatief hoogwaardige video en audio voor TV. Het wordt gebruikt voor digitale
televisie via conventionele aardse antennes (DVB-T), uitzending via de satelliet (DVB-
S) en voor digitale kabeltelevisie (DVB-C). Als u een abonnement hebt op kabel-TV van
Ziggo, dan komen de videostreams via MPEG-2 in uw meterkast. Het formaat
ondersteunt ook diverse surround sound systemen en is neerwaarts compatibel met
MPEG-1.
MPEG-4
Werd geïntroduceerd eind 1998, de standaard werd vastgelegd door de 'Moving Picture
Experts Group' als ISO/IEC JTC1/SC29/WG11 onder de formele standaard ISO/IEC
14496. MPEG-4 wordt gebruikt voor compressie van video voor streaming
toepassingen. Het op dit moment zeer bekende MP4-formaat, waarmee u digitale video
op al uw beeldschermen kunt bekijken is een afgeleide van deze MPEG-standaard.
Het MPEG-logo dat gereserveerd is voor apparatuur dat MPEG-streams
kan verwerken. (© worldvectorlogo)
De compressie technologieën bij MPEG-1
De algemene structuur van MPEG-1
In dit artikel gaan wij de video compressie technieken bespreken die bij MPEG-1 worden
toegepast. Deze technieken zult u ook onder de een of andere aangepaste vorm terugvinden
bij alle overige MPEG-formaten.
Bij het comprimeren van filmmateriaal moet de compressietechniek rekening houden met drie
zaken:
- De compressie van de video-informatie.
- De compressie van de audio-informatie.
- De synchronisatie tussen video en audio.
Dit laatste is een belangrijk punt, omdat de gegevens naar een seriële code worden omgezet
is die synchronisatie niet vanzelf sprekend. Toch is het de bedoeling dat de herwonnen
gegevens een lipsynchrone film opleveren!
Het algemene schema van een codering volgens MPEG-1 is samengevat in de onderstaande
figuur. Er zijn twee coders, een voor de video en een voor de audio, een systeemklok en een
multiplexer die zorgt dat de gecomprimeerde video- en audiogegegevens op de juiste manier
tot een seriële datastroom worden gecombineerd.
Het algemene schema van een MPEG-1 codering. (© 2019 Jos Verstraten)
MPEG pack's
De gegevens worden verpakt in blokken die 'pack's' worden genoemd. In één pack kunnen
video- en audio-gegevens worden gemengd. Ieder pack wordt voorafgegaan door een
zogenaamde 'header', waarin de voor het decodeersysteem noodzakelijke gegevens over het
soort gegevens in het pack en de toegepaste compressie algoritmen worden verwerkt. Een
pack bestaat uit verschillende zogenaamde 'packet's', die weer voorafgegaan worden door
een subheader en die alleen video- of audiogegevens bevatten. Dat algemene
verzendschema is samengevat in de onderstaande figuur en wordt in detail besproken in het
vervolg van dit artikel.
In de packet headers worden 'Presentation Time Stamps' opgenomen als tijdreferentie. Deze
geven de waarde van de systeemclock weer op het moment dat de gegevens aan de
coderingsschakeling worden aangeboden. In de pack header wordt bovendien een 'System
Clock Reference' opgenomen. Aan de hand van deze gegevens kan de decodeerelektronica
de clock herwinnen en kan ervoor worden gezorgd dat de video- en audiogegevens weer
volledig worden gesynchroniseerd.
De structuur van de gemultiplexte video- en audiogegevens in de seriële datastroom.
(© 2019 Jos Verstraten)
Open standaard
Zoals reeds geschreven heeft MPEG-1 een open structuur. De coderings- en
decoderingshardware is in staat verschillende soorten compressie schema's en algoritmen
door te voeren. De gebruikte algoritmen worden gecodeerd en in de 'headers' verzonden. Op
deze manier is het mogelijk dat een met MPEG-1 gecomprimeerde film van leverancier X na
decodering een betere kwaliteit levert dan dezelfde film, gecodeerd door leverancier Y. De
kwaliteit van de herwonnen gegevens wordt immers in hoge mate bepaald door de
compressie algoritmen die worden gebruikt. Die open architectuur maakt het bovendien ook
mogelijk dat bepaalde leveranciers over gaan tot het versleutelen van de gegevens. Aan de
decoderzijde kan men dan alleen via een gehuurde of gekochte softwaresleutel de gegevens
tot een te bekijken beeld herleiden.
De MPEG-1 codering van video
Datacompressie met een factor 140
De zware taak waar de bedenkers van het systeem voor gesteld stonden was het reduceren
van de datastroom met een factor van meer dan 140. De MPEG-1 norm schrijft immers een
maximale gegevensstroom van 1,411 Mbit/s voor, zodat de gegevens op een CD passen.
Zoals bekend bestaat een traditionele film uit een filmstrook die tienduizenden beeldjes bevat.
Die beeldjes worden met een snelheid van 24 beeldjes per seconde op het scherm
geprojecteerd.
Deze analoge filmbeeldjes worden een na een gescand met een resolutie van 480 lijnen die
ieder 720 pixels bevatten. Dit is in ieder geval de Amerikaanse norm. Per pixel worden geen
3 x 8, maar slechts 16 bit gebruikt (zie later). Per beeld levert dat ongeveer 5,5 Mbit aan
gegevens op. Als men 25 beelden per seconde wil versturen, de Europese TV-standaard,
heeft men daarvoor ongeveer 138 Mbit nodig! Natuurlijk moet men nog allerlei coderings en
compressie gegevens meesturen, zodat één seconde video een datastroom van ongeveer
160 Mbit oplevert. Een CD kan echter (afgerond naar een veilige ondermarge en rekening
houdende met ruimte voor de audio) slechts ongeveer 1,15 Mbit/s verwerken. De gegevens
moeten dus met een factor 140 worden gecomprimeerd! Het zal duidelijk zijn dat een
dergelijke zware compressie niet in één stap is te realiseren.
Datareductie in dertien bewerkingen
De codering van de videogegevens is erg ingewikkeld en doorloopt een heleboel stapjes. In
de meeste bewerkingen wordt iets bijgedragen aan de totale compressie, zodat uiteindelijk
toch de noodzakelijke totale compressiefactor wordt verkregen. In het kort komt de MPEG
verwerking van een analoog filmsignaal naar de uiteindelijke gecomprimeerde datastroom
neer op de volgende procedure:
Stap 1
Scannen van de filmbeelden met 3 x 8 bit volgens het RGB-kleurenschema en met een
resolutie van 720 bij 480 pixels.
Stap 2
Intelligent reduceren van de horizontale en verticale resolutie met een factor twee
(compressieslag 1).
Stap 3
Omzetten van de RGB-gegevens naar een YUV-schema en intelligente reductie van de
chrominantie gegevens (compressieslag 2).
Stap 4
Indelen van het beeld in 'macroblokken' van 8 bij 8 pixels.
Stap 5
Opslaan van een groot aantal macroblokken van opeenvolgende beeldjes in een
geheugen
Stap 6
Toepassen van 'motion compensation' door middel van 'motion vector' en 'prediction
error'.
Stap 7
Verdelen van de videostroom in zogenoemde I-, P- en B-frames en toepassen van
'forward prediction' en 'bidirectional prediction'.
Stap 8
Berekenen van 'motion vectors' (compressieslag 3).
Stap 9
Toepassen op de macroblokken van de I-beelden van 'DCT', afkorting van 'discrete
cosinus transformatie'.
Stap 10
De zuiver wiskundige gegevens die hieruit voortkomen onderwerpen aan een
'psychovisuele quantiseringsmatrix', waardoor de lossy compressie van JPEG ontstaat
(compressieslag 4).
Stap 11
De JPEG gecomprimeerde gegevens van de I-frames weer combineren met de
gegevens van de P- en B-frames en deze in een bepaalde volgorde samenvoegen tot
één datastroom.
Stap 12
De seriële gegevens onderwerpen aan een 'run length codering' (compressieslag 5).
Stap 13
De omgezette gegevens comprimeren door middel van een 'entropie codering' op basis
van het Huffmann algoritme (compressieslag 6).
Stap 1: het scannen
Het bronmateriaal zal in de meeste gevallen bestaan uit een ouderwetse analoge film. Er
bestaan al decennia lang filmscanners die beeldje na beeldje omzetten in een digitaal beeld.
Deze scanners werken met een resolutie van 720 bij 576 bij PAL-televisie en met 720 bij 480
bij het Amerikaanse NTSC-systeem. Dat wil zeggen dat ieder filmbeeld, zie de onderstaande
figuur, in 576 lijnen wordt afgetast en dat er in iedere lijn 720 beeldmonstertjes worden
genomen. Uit de aard van hun werking leveren scanners een 'RGB-schema' af. Ieder
monster wordt ontleed in de drie basiskleuren rood, groen en blauw. Afhankelijk van de
kleurverzadiging en de intensiteit wordt aan iedere basiskleur een code tussen '000' en '255'
toegekend. Dat levert in totaal een kleurenspectrum van meer dan 16 miljoen kleuren op (true
color). Op deze manier wordt het beeld omgezet in drie 'planes', een voor rood, een voor
groen en een voor blauw.
Het omzetten van één frame van de analoge film in drie RGB-planes.
(© 2019 Jos Verstraten)
Stap 2: het reduceren van de resolutie
Het zou erg fraai zijn als de beelden verder verwerkt konden worden in die hoge resolutie van
720 bij 576. Dat kan helaas niet, de resulterende datastroom zou te groot zijn. Vandaar dat de
resolutie wordt gereduceerd tot 352 bij 288. Dat gebeurt niet door eenvoudigweg ieder
tweede pixel te laten wegvallen. In horizontale richting wordt een intelligent reductieschema
toegepast, waarbij de elektronica gemiddelde kleurwaarden berekent van de pixels die
behouden blijven en de pixels die worden verwijderd. In verticale richting kan een identiek
proces worden toegepast, maar het is ook toelaatbaar dat simpelweg lijnen worden
geschrapt.
Stap 3: RGB naar YUV vertaling
Een kleurenbeeld kan niet alleen volledig worden beschreven door de R-, G- en B- waarden.
Het is ook mogelijk een beeld te definiëren door de luminantie Y en de chrominantie C. De
eerste grootheid geeft informatie over de helderheid van het beeld, de tweede bepaalt de
kleursamenstelling. Op een monochrome monitor wordt alleen de Y-waarde gebruikt. Om de
kleur te omschrijven moet men wel twee grootheden voor de chrominantie definiëren. Deze
worden Cu en Cv genoemd. Het grote voordeel van een definiëring volgens het YUV-schema
is dat luminantie en chrominantie elkaar niet beïnvloeden en volledig afzonderlijk verwerkt
kunnen worden. Het menselijke oog blijkt heel gevoelig voor variaties in de luminantie, maar
veel minder gevoelig voor variaties in de chrominantie. Vandaar dat men kan volstaan met
een kleinere resolutie bij het definiëren van de chrominantie. De verbanden tussen de R-, G-
en B- waarden en de Y-, Cu- en Cv-waarden volgt uit de onderstaande transformatieformules:
Y = [0,299 ● R] + [0,587 ● G] + [0,114 ● B]
Cu = -[0,169 ● R] - [0,3316 ● G] + [0,5 ● B]
Cv = [0,5 ● R] - [0,4186 ● G] - [0,08l3 ● B]
Voor het omrekenen moet de processor van de coder dus slechts eenvoudige rekenkundige
bewerkingen op de R-, G- en B-waarden uitvoeren, een fluitje van een cent. Er ontstaan nu
drie nieuwe 'planes', waarbij de plane van Y nog steeds een resolutie van 352 bij 288 heeft.
Omdat de informatie in de chrominantie niet zo belangrijk is, wordt de resolutie daarvan
dramatisch verminderd. Er wordt een gemiddelde waarde berekent per vier pixels, volgens
het schema van de onderstaande figuur. De kruisjes stellen de pixels van het gedigitaliseerde
beeld voor. Van ieder pixel wordt eerst de luminantiewaarde berekend. Nadien worden de
twee chrominatiewaarden van vier naast elkaar gelegen pixels berekend en wordt er de
gemiddelde waarde van bepaald. Deze gemiddelde waarde wordt voorgesteld door de
cirkeltjes. De planes van de twee C-waarden zijn door de reductie nu nog slechts 176 bij 144
pixels groot, alweer een aanzienlijke reductie waar de kwaliteit van het beeld nauwelijks door
wordt beïnvloed!
Het reduceren van de chrominantie gegevens. (© 2019 Jos Verstraten)
Stap 4: het maken van macroblokken
Voor de daaropvolgende ingewikkelde wiskundige bewerkingen zijn de volledige planes veel
te groot. Deze worden ingedeeld in zogenaamde 'macroblokken' die slechts 8 bij 8 pixels
groot zijn. De volledige definitie van een stukje beeld van 16 bij 16 pixels, op een standaard
monitor goed voor ongeveer 120 vierkante millimeter beeldoppervlak, bestaat uit vier
macroblokken voor de luminantie en twee macroblokken voor de chrominantie.
Stap 5: macroblokken opslaan in een geheugen
Vervolgens worden een heleboel van dergelijke macroblokken in een geheugen opgeslagen.
Niet alleen alle macroblokken van het beeld dat verwerkt wordt, maar ook deze van enige
voorgaande en volgende beelden.
Stap 6: motion compensation
Deze compressieslag vormt het hart van de MPEG technologie. Het filmbeeld bestaat uit 25
beeldjes per seconde. Nu zal het duidelijk zijn dat er in opeenvolgende filmbeeldjes veel
identieke informatie zit. Stel als voorbeeld het filmfragment dat in de onderstaande figuur is
voorgesteld. Een vrachtwagen rijdt van links onder naar rechts boven door het beeld. De
achtergrond, bomen langs de weg, blijft hetzelfde. Het is dan overbodig om deze video-
informatie in ieder beeld te gaan coderen door middel van de YUV-waarden. Dat kan in één
beeld, in de volgende beelden wordt op de een of andere manier duidelijk gemaakt dat de
informatie in de betreffende macroblokken ongewijzigd is gebleven. Ook de macroblokken die
de vrachtwagen voorstellen veranderen inhoudelijk niet. Het enige verschil is dat de
macroblokken in het beeld een andere positie innemen.
Het rechter beeld kan dus voor een groot deel samengesteld worden uit de macroblokken
van het linker beeld. Natuurlijk zijn er ook elementen in het beeld die nieuw zijn. Daar waar in
het linker beeld de vrachtwagen stond in nu een stuk weg plus omgeving te zien. Deze
macroblokken bevatten dus beeldspecifieke informatie en moeten wél gecodeerd worden.