Compressie basis: Codecs We comprimeren videobestanden, die van zichzelf nogal groot zijn, om ze kleiner te maken voor transport over het web, mobiel (en dvd/cd-rom). Er zijn meerdere goede gratis cross-platform mediaspelers zoals Windows Media Player, Real Player, VCL en Quicktime, maar ik beperk me tot de codecs van QT omdat het zo’n krachtige en betrouwbare speler is voor ons doel, namelijk onlinevideotransport. Codec staat voor “compressor-decompressor.” Het zijn kleine plugins die in de spelers zitten en je bestand als het ware inpakken om verstuurd te worden over het web om bij de gebruiker weer uit te worden gepakt. Denk aan Quicktime als aan een programma als Photoshop en analoog aan de codecs als de verschillende grafische formaten in Photoshop zoals JPEG, TIFF, een PICT of BMP enz. Welke codecs zijn nu geschikt voor welk soort videotransport dat we gaan doen?
Van bovengenoemde codecs zul je er hooguit 4 of 5 gebruiken en de meeste mensen gebruiken er niet meer dan twee. De meeste
codecs die je hier ziet, worden niet meer gebruikt omdat ze verouderd zijn. Ze worden alleen voor redenen van compatibiliteit nog genoemd, want je zult altijd rekening moeten houden met de (eventueel oudere) computers en spelers van je doelgroep. Keyframes binnen compressie Voordat we daar naar gaan kijken eerst iets over het begrip keyframes binnen compressie, dat totaal verschillend is van het keyframes-begrip dat je misschien kent uit Flash of After Effects.
Voorbeeld:
i
Boven zie je hoe vijf niet-gecomprimeerde videoframes er uit zouden zien. Je ziet dat de mond van de jongen open gaat om te praten, maar heel veel informatie in de verschillende frames is hetzelfde. Het is erg inefficiënt om alle mediaframes zo op te slaan omdat het onnodig veel ruimte in beslag neemt. In compressie hoef je een hoop onnodige informatie niet op te slaan en dat doe je door je media op te breken in keyframes en deltaframes. Onder zie je dezelfde sequentie, maar dan gecomprimeerd. Het eerste en laatste frame zijn keyframes en de andere frames waarvan slechts delen info zijn opgeslagen noem je deltaframes. Het betekent dat de mediaplayer de niet veranderde info voor het 2de frame kan reconstrueren uit het 1ste keyframe; alleen de veranderde delen zijn opgeslagen. Het 3de frame wordt opgebouwd uit de veranderde info in het 3de frame + de info van het 2de frame enz. In frame 5 wordt alle info uit het keyframe (5) gewoon gebruikt. Overtollige “data” hoeven niet te worden opgeslagen, maar er zijn meer dingen die “keyframes” doen.
Als je bijvoorbeeld in de QT-player scrubt door een (After Effects) video, zie je alleen de keyframes, waardoor je een vloeiend beeld krijgt. Mocht je bij het scrubben met je cursor op een deltaframe stoppen, bijvoorbeeld op frame 2 hierboven (wat aannemelijk is omdat er veel meer deltaframes zijn) moet het de ontbrekende info uit het voorgaande keyframe halen. Een fout die wel wordt gemaakt is “0 keyframes” aan te vinken bij compressie, om de video heel klein te maken, maar als je in het begin van je film stopt (bijv. 50ste frame) met scrubben moet het alle info halen uit het allereerste keyframe (het eerste videoframe is altijd een keyframe) en alle voorgaande 49 veranderingen in deltaframes tonen, zo ook als je aan het eind stopt......dan moet alle info vanaf frame 1 opgebouwd worden met alle veranderingen in de voorgaande deltaframes, wat een nachtmerrie voor je computer is...... Hoeveel keyframes je nodig hebt, varieert en soms is uitproberen het beste, maar we zullen bij de verschillende codecs ook het aantal te prefereren keyframes bekijken. Hoe specificeer je het aantal keyframes in de QTP; je gaat naar het filemenu en kiest Export om een nieuwe QTmovie te exporteren. Onder de settingstap van de video vul je in hoeveel keyframes je wilt. Bijvoorbeeld als je 25 frames per seconde hebt, kan je iedere 25 frames, dus 1x per seconde een keyframe kiezen; dat is meestal goed. Mocht je minder keyframes willen, bijv. de helft dan vul je in dat je ieder 50ste frame een keyframe wil, dus 1x in de 2 seconden. Tijd- versus ruimte compressie Compressie in tijd (temporal) speelt zich af tussen framesdata onderling (hoe verhouden de data in frame 1 zich tot frame 2 en 3 enz.), terwijl ruimtelijke compressie (spatial) gaat over hoe de data binnen het frame zich tot elkaar verhouden; zo zal het donkere vlak achter het gezicht goed te comprimeren zijn omdat het allemaal dezelfde kleur is. Lossey versus lossless Een lossless compressieformaat maakt je bestand kleiner zonder data te verliezen; je uiteindelijke video zal dezelfde kwaliteit hebben als de ongecomprimeerde video waarmee je begon. Er zijn maar weinig lossless formats zoals none, dat absoluut ongecomprimeerd is, i.t.t. DV dat al gecomprimeerd is. TIFF is nog zo’n lossless formaat, dat nauwelijks gecomprimeerd is. Animation kan zowel lossless zijn als een lossey codec. Als je de kwaliteit bij de compressiesettings op medium zet, waarbij je data verliest zal de gecomprimeerde film niet zo goed zijn als het origineel. Maar in de best positie is het lossless, dus animation is veel beter dan none.
Constant Bit Rate versus Variabel Bit Rate Bij CBR is de grootte van de output niet afhankelijk van de content. DV is een voorbeeld van CBR; het heeft precies 3.5 MB footage per seconde of je nou een witte muur of wilde actie filmt. (Op een harddrive van 10 GB kan je ongeveer 45 minuten DV opslaan). MP3 is een andere bekende constant bit rate codec met 1.28 of 1.92 kilobits per seconde (hoe hoger de bitrate hoe beter de kwaliteit). MP3 kan ook als variabele bitrate codec gebruikt worden, maar is niet populair als zodanig. Bij VBR is de grootte van de outputvideo geheel afhankelijk van de content. Graphics is een goed voorbeeld van een variabele bitrate codec; als je 10 sec. zwart opneemt comprimeert Graphics het tot een ongelooflijk klein bestand, maar 10 seconden gecomprimeerde wilde sportscène levert een heel groot bestand op. Streaming video Je hebt een progressive streaming protocol (PSP) en realtime streaming protocol(RSP). Bij realtime streaming zoals bij live broadcasting waarbij je een stream van het web krijgt is geen vertragingsmechanisme zoals bij progressive streaming en je kan er niet doorheen scrubben zoals bij PSP. Het is veel complexer om te doen en heeft vaak een veel lagere kwaliteit, zodat het voor ons doel nu niet erg geschikt is. Een PSP video kan je makkelijk in je website toevoegen, zoals ieder grafisch element en er worden daarbij geen specifieke servereisen gesteld. Het overgrote deel van de video’s op het web hanteren het progressive streaming protocol.
Fast start – Compressed Header is een technologie die vanaf QT 3 is toegevoegd; je kunt er wel vanuit gaan dat de meeste mensen QT3 of hoger hebben en deze setting gebruiken. Hinted streaming voor het realtime streaming protocol voegt zgn. hintmarks toe aan de data voor de realtime server. Ze maken het bestand groter zonder kwaliteit toe te voegen.
Live action compressie: Live action content is erg complex - de pixels in het frame zijn bijna zeker allemaal verschillend. Van frame tot frame is er veel beweging en veel verandering in kleur. Sommige CGI (computer generated imaginary) zoals Toystory vallen hier ook onder. Het analoge Europese PAL-video kleuren tv-systeem met 25 fps(625 lijnen) is evenals het Amerikaanse NTSC (National Television System met 30 fps/525 lijnen) en het Franse SECAM (Séquentiel couleur à mémoire) momenteel interlaced, d.w.z. dat het beeld in twee velden gescand wordt. Dat is historisch gegroeid vanuit het Amerikaanse National Television Commitee dat 60 frames per seconde een goede beeldkwaliteit vond leveren, maar helaas was dit technisch niet mogelijk. Men heeft er toen voor gekozen het frame in twee velden te scannen van 30 frames per seconde. Op de computer die via progressive scan hele frames toont, zie je de twee velden op hetzelfde moment. We moeten de video die op de TV perfect werkt voor de computer “deinterlacen” .
Voor het “deinterlacen” van de video om extra data te verwijderen zodat er beter gecomprimeerd kan worden en om de kwaliteit te verhogen (je wil de strepen niet op je computer) heb je in veel edit-programma’s deinterlace mogelijkheden, maar is soms een applicatie als Cleaner (voorheen Media Cleaner Pro) Sorenson Squeeze of een andere 3th party applicatie nodig.
Als je geen geavanceerde deinterlace-opties tot je beschikking hebt kan je specificeren welk veld je wilt verwijderen; dat is altijd beter dan een “blend” optie kiezen waarbij de beelden gemengd worden. Dit kan smoezelige beelden geven. Je codeert de video weer terug in DV, maar dan nu “deinterlaced” voor het gebruik op het web. Als je alleen voor het web wil filmen kan je ook een camera aanschaffen die alleen progressive-video opneemt, zoals bijvoorbeeld de Canon JL2. Het is een war duurdere 3CCD camera, maar het kan je een heleboel moeite en tijd besparen wat de compressie betreft, want het neemt op in vol frame zonder interlace en de video ziet er goed uit.
H.264 een MPEG-4 variant Voor het comprimeren van life-action is H.264 een goede codec voor webstreaming video. Divx is ook een MPEG-4 variant die populair is bij Windows Media gebruikers die AVI bestanden gebruiken, maar H.264 geeft de beste resultaten.
De + gebruik je alleen als je alpha kanalen hebt gebruikt, die informatie over transparantie opslaan. Met de qualityslider kan je kiezen voor medium om het bestand kleiner te maken. De meeste codecs hebben aan 1 keyframe per seconde genoeg, maar MPEG-4 codecs hebben iedere 5 à 10 seconde een keyframe nodig, dus in het geval van 25 frames per seconde bij PAL-video wordt dat 5 x 25 = 125 frames.
Je wilt ook een limit data rate in KBytes/sec invullen (een goed voorbeeld van de Constant Bit Rate encoderings methode). Als je een waarde invult speelt de video altijd volgens die vaste waarde af. We willen dus een waarde invullen die zowel geschikt is voor onze bewegende wilde beelden van de video; maar die niet te hoog is voor onze statische beelden. Je zult een gemiddelde willen kiezen om filesize te sparen. Hier is een formule die kan helpen bij filmpjes die een redelijke hoeveelheid beweging bevatten maar niet extreem wild zijn: Hoogte x Breedte x Frames per seconde : 48000 = Datarate in Kilobytes Dus bijvoorbeeld 720 x 480 x 25 : 48000 = ongeveer 100 Kbytes, maar als je een hele wilde opname hebt, zul je dat getal 2x moeten nemen = 200 Kbytes. Voor een interviewsituatie, waarbij je
een camera op een statief gebruikt en alleen de persoon een beetje zal bewegen voor een statisch décor heb je de helft nodig, dus 50 Kbytes. Probeer met deze formule te experimenteren om tot een goed resultaat te komen.
Cinepak is een erg oude codec met niet zo’n hoge kwaliteit, maar compressie duurt even lang als het afspelen van de video. Een reden om Cinepak nog te gebruiken is dat oude computers moeilijkheden bij het afspelen van een gecomprimeerde H.264-clip (bijv. 640 x 480) kunnen hebben, zoals de oude i-macs. Cinepak is een veel makkelijkere codec om af te spelen als file-grootte niet zo belangrijk is, maar het wel belangrijk is dat de meeste computers het filmpje kunnen afspelen. Je kunt de kwaliteit op hoog instellen; Cinepak is een VBR-codec dus de bestandsgrootte zal afhangen van de inhoud. Je kunt Cinepak wel gebruiken als CBR-codec door een waarde in te vullen onder Limiet data rate ....KBytes/sec. Je kunt de kwaliteit van Cinepak aanzienlijk verhogen door een hele hoge waarde in te vullen zoals 5000 KBytes per seconde; dan ziet het er echt goed uit. Het is nog steeds veel kleiner dan ongecomprimeerde video en op bijna alle computers makkelijk afspeelbaar. Afspeel overwegingen: test Misschien is 480 x 360 het grootste formaat dat je maakt om rekening te houden met de afspeelmogelijkheden van de meeste computers. Misschien kan jouw computer wel de volle resolutie van een clip van bijvoorbeeld 640 x 480 aan, omdat je als ontwikkelaar meestal een betere computer bezit dan de doorsnee gebruiker waarvoor je je content maakt. Het is handig om een oude computer te bewaren als testcomputer of bij vrienden je video te gaan bekijken om te kijken of het goed afspeelt. Je kunt de resolutie van je video aanpassen tot bijvoorbeeld een kleinere afmeting (320 x 240), die op veel mobiele telefoons speelt; je kunt een 10 seconden clip tot ongeveer 0,5 MB terugbrengen
door aanpassing van de afmeting en door het lager instellen van datarate/seconde. Als je daarna de afmeting op het scherm in QT verdubbeld (Mac:command-2) (PC:control-2) wordt de video 2x groter zonder het aantal pixels te verdubbelen, zodat het op oudere computers goed afspeelbaar wordt. Beter is misschien om de video tot 75% terug te brengen, encoderen tot 480 x 360 en het dan te vergroten tot 640 x 480 zoals hierboven; dit levert een heel goede kwaliteit op, die bijna gelijk aan het origineel is en toch op oude computers kan spelen. Als je de clip bewaart op de vergrote afmetingen zal het ook bij de gebruiker groot openen. Computer Generated Als ik het nu over CG heb, praat ik over beeldvlakken met veel van dezelfde vlakke kleur erin, dat zich makkelijker laat comprimeren dan life action waardoor we andere codecs kunnen gebruiken, bijvoorbeeld bij het leveren van instructievideo’s (die bijv. met een applicatie als Snapz Pro X(Mac) of Camtasia(PC) gemaakt zijn; Snaps filmt je bureaublad tijdens je instructies). De Animation codec (lossless) wordt gebruikt om een hoge kwaliteit clip te behouden met een klein bestand. In programma’s als Compressor of Cleaner kan je meer settings instellen dan in QT, zoals “spatial” en “temporal” quality en compare uncompressed frames, die de kwaliteit nog kunnen verhogen. Dit is verschillend per gebruikte codec! De originele instructie-film was bijvoorbeeld 28.5 MB en nu is hij 2.5 MB voor een halve minuut materiaal met miljoenen kleuren en bijna dezelfde kwaliteit; een uitstekende codec voor hoge kwaliteit cd-rom aflevering. Graphic comprimeert veel beter dan Animation en is van dezelfde kwaliteit, maar voor materiaal met 256 kleuren per frame. Het levert bijvoorbeeld een bestand van 728 K tegen 1.3 MB in de Animatiecodec en is heel goed afspeelbaar op bijna alle computers.
Audio compressie: stereo versus mono De ACC (Advanced Audio Codec) is de opvolger voor MP3 en levert over het algemeen een betere geluidskwaliteit digitale audio dan MP3. ACC wordt daarom op het web onder andere door Vimeo- en YouTube als audio-codec aangeraden. Is het echt belangrijk om stereo te comprimeren zoals bij muziek of verschillend gebruik van de twee kanalen met bijvoorbeeld twee verschillende talen. Of kan je met mono hetzelfde resultaat bewerkstelligen? Als mono genoeg is, scheelt dat de helft van de data. 16 bit versus 8 bit: signalen en ruis 16 bit neemt 2x zoveel ruimte als een 8 bit, maar 8 bit geeft teveel ‘noise’. Je kan beter op 24.000 kHz kwaliteit en 16 bit comprimeren voor dezelfde bestandsgrootte. Dus gebruik altijd 16 bit en reduceer de filesize met een lagere kHz of een andere codec. TIP: In Cleaner kan je met dezelfde filesize betere kwaliteit krijgen door onder de volumetab normalize te kiezen en met de slider naar 90% te gaan, waarmee je beter comprimeert met de meeste codecs en het bestand kleiner maakt.
mp3 en mp4 Er zijn net als bij video heel veel codecs die verouderd zijn en alleen voor compatibileit nog genoemd worden. Je zult voor crossplatform doeleinden vooral mp3 en/of mp4 gebruiken omdat deze codecs een goede kwaliteit/bestandformaat verhouding hebben, maar misschien dat IMA 4:1 en QDesign Music ook nog van pas komen. Een goede setting voor behoorlijke audio is een 64 bitrate per kanaal, maar als je cd-kwaliteit wil zal je 80 per kanaal kiezen of 160 voor stereo. De mp4 codec geeft bij dezelfde bitrate (iets van 64 mp3 tegen 48/56 mp4) een iets hogere kwaliteit (ongeveer 10%). Denk ook bij audio aan de doelgroep die je wilt bereiken; zijn het oude of nieuwe computers met mp4 (bij mp3 zal je je gebruikers ook moeten zeggen dat ze minimaal QT 6 voor Windows
of QT 5 voor Mac moeten hebben voor een goede kwaliteit). Een file van 1.8 MB is in mp3 slechts 80 KB. In oudere software worden ook andere audio-codecs ondersteund als QDesign Music die ongeveer gelijkwaardig zijn aan mp3, afhankelijk van de versie mp3. QDesign is in QT in versie 3 verschenen en kan dus hele oude computers aan voor bijvoorbeeld gesproken tekst. Voor hogere bitrates dan 48 kbits/sec moet je wel upgraden naar een pro-versie van QDesign. IMA 4:1 gebruik je als je alle computers of cd-romspelers wil bedienen met een goede kwaliteit (wel 3 of 4 x zo groot dan mp3). TOT SLOT NOG EEN PAAR COMPRESSIETIPS Gebruik een statief, als je bijvoorbeeld iemand interviewt. Misschien zal alleen het hoofd en de mond bewegen van frame tot frame in een ‘temporal’ compressie, terwijl bij handheld camerawerk ieder frame anders zal zijn en dus complexer voor de compressie, die ieder frame moet vertalen wat de bestandsgrootte en de kwaliteit van de belangrijke bewegende delen niet ten goede komt. Noisereductie in een programma als Cleaner of enige blur (door bijvoorbeeld je materiaal een fractie onscherp te filmen) komen de compressie ten goede en kan de datarate verkleinen en de kwaliteit voor de belangrijke delen verhogen. Je kunt bijvoorbeeld scherpstellen op de persoon en de achtergrond door korte dieptescherpte (hoog diafragma) out of focus opnemen. De codec comprimeert de belangrijke bewegende delen dan veel beter en je kunt een lager datarate gebruiken. Je kunt het comprimeren ook verbeteren door sommige kleuren te elimineren door een lagere Bit Depth in te stellen (als je de kleuren niet echt nodig hebt natuurlijk).
Bewerking G.v.Iersel naar instructievideo’s van Sean Blumenthal voor Lynda.com (2009)