Metódy kompresie
Kompresia videa

Video, alebo pohyblivý (dynamický) obraz, je v dnešnej dobe najpoužívanejšou zložkou multimediálneho obsahu. Množstvo video obsahu rapídne stúpa a v porovnaní s inými typmi médií zaberá výrazne najviac priestoru. S rastúcimi možnosťami osobných zariadení vo vytváraní a prehrávaní videa sa množstvo prenášaných dát zväčšuje každý deň. Preto je potrebné znížiť veľkosť videa na zníženie nákladov na prenos a ukladanie.

Video sekvencia pozostáva zo samostatných snímok, alebo obrazov, ktoré je v podstate možné kódovať rovnako ako statické obrazy. Avšak pri sekvencii rýchlo sa meniacich obrazov sa predpokladá výskyt toho istého objektu s meniacou sa pozíciou v čase, čo znamená, že dve nasledujúce snímky sú si podobné, iba s minimálnymi rozdielmi. Preto ak zakódujeme iba tieto rozdiely, môžeme dosiahnuť ešte vyššiu kompresiu.

Metódy kódovania videa môžeme rozdeliť na dve hlavné kategórie:

- Kódovanie v časovej oblasti
- Kódovanie na báze modelovania

Metódy kódovania v časovej oblasti využívajú transformačné kódovanie s medzisnímkovou predikciou a sú využívané v mnohých formátoch. Metódy kódovania na báze modelovania sa používajú pri aplikáciách s obmedzeným prenosovým pásmom, ako je videotelefónia, s dátovým tokom do 64 kbit/s. Metódy využívajú typický vzhľad scén pri videotelefonovaní s nemeniacim sa obsahom, minimálnym pohybom a zníženou frekvenciou snímkovania.

## Medzisnímková predikcia a kompenzácia pohybu

Na zníženie časovej nadbytočnosti medzi dvomi snímkami sa používa medzisnímková predikcia s kompenzáciou pohybu, ktorá pracuje v dvoch krokoch:

- Odhad pohybu
- Kompenzácia pohybu

Počas odhadu pohybu sa vytvára vektor pohybu, ktorý popisuje relatívny pohyb obrazových blokov z predošlej do aktuálnej snímky. Ak je pozícia predvídateľná, potom stačí preniesť iba vektor pohybu. Na odhad pohybu sa používajú dva algoritmy:

- Iteračné algoritmy (pel recursive algorithms)
- Algoritmy s blokovým prehľadávaním (block matching algorithms)

Iteračné algoritmy sa iteratívnym spôsobom snažia minimalizovať chybu predikcie. Keďže veľmi závisia od miestnych štatistických vzdialeností, nemôžu sa použiť na odhad väčších vzdialeností a sú tak vhodné pre video s malým pohybom, napr. videotelefóniu. Algoritmy s blokovým prehľadávaním predpokladajú, že všetky časti obrazového bloku sa pohybujú rovnakým smerom. Aktuálna snímka sa rozdelí na bloky, pre ktoré sa v predošlej snímke nájdu najpodobnejšie bloky.

Algoritmy na kompenzáciu pohybu využívajú vektory pohybu na presúvanie každého bloku z predošlej snímky na novú pozíciu v aktuálnej snímke. Tým vznikne predikčná snímka, ktorá sa zakóduje a prenáša.

## Techniky kompresie videa

### Prekladané video

Štandardné (progresívne alebo neprekladané) video pozostáva z 25 (Európa) alebo 29,97 (USA) snímok za sekundu. Prekladané video sa skladá z dvojnásobného počtu polsnímok za sekundu (50 v Európe alebo 59,94 v USA). Každá polsnímka obsahuje buď párne alebo nepárne riadky celých video snímok, ktoré sa dekódujú a prehrávajú v prekladanom poradí.

Obr. 5.17: Rozdiel medzi progresívnym a prekladaným videom. Celá snímka sa rozdelí na párne a nepárne riadky, čím sa vytvoria polsnímky, ktoré sa striedavo uložia do sekvencie. Video má dvojnásobnú snímkovú rýchlosť, avšak pre polsnímky.

### Farebné podvzorkovanie

Ďalšou technikou kódovania je farebné podvzorkovanie. Každý pixel video snímky je kódovaný vo farebnom priestore YUV pozostávajúcom z troch subpixelov: jeden jasový (luminančný) a dva farebnostné (chrominančné) pixely. Štvorec štyroch takýchto pixelov sa označuje 4:4:4. Keďže ľudské oko je citlivejšie na jasovú zložku než na zmeny farby, čo nám umožňuje znížiť počet chrominančných pixelov na polovicu, či dokonca na štvrtinu. V prvom prípade sú štyri luminančné pixely pokryté dvoma a dvoma chrominančnými pixelmi (4:2:2) a v druhom prípade iba dvoma, resp. jedným a jedným chrominančným pixelom (4:2:0 alebo 4:1:1).

Obr. 5.18: Príklady farebného podvzorkovania. Ľavý obrázok ukazuje, že každý luminančný subpixel má svoju dvojicu chrominančných subpixelov. Uprostred dva luminančné subpixely zdieľajú pár chrominančných subpixelov. Napravo sú pre štyri luminančné subpixely dostupné iba dva chrominančné.

Podobne ako pri statických obrazoch sa kompresné techniky pri videu opierajú o hybridné metódy kombinujúce kódovanie v časovej oblasti s transformačným kódovaním (ako napríklad diskrétna kosínusová (DCT) alebo diskrétna waveletová transformácia (DWT)). Predikčná snímka vytvorená v procese kompenzácie pohybu sa odčíta od aktuálnej snímky a vytvorí sa chybová snímka. Tá sa po blokoch zakóduje pomocou DCT, transformačné koeficienty sa kvantizujú, zoradia cik-cak čítaním a zakódujú pomocou kódu s premenlivou dĺžkou (VLC). Potom sa posiela len VLC sekvencia.

Na strane prijímača sa rekonštrukcia vykoná inverzným postupom, teda inverzným VLC, inverznou kvantizáciou a IDCT.

Popísaný postup sa s malými odlišnosťami používa v kódovacích štandardoch MPEG aj H26x.

## MPEG

Expertnú skupinu pre pohyblivý obraz (Motion Picture Experts Group, MPEG) zriadili organizácie ISO a IEC, aby vytvorila štandardy pre kompresiu videa a zvuku. Ako výsledok boli navrhnuté nasledujúce štandardy zameriavajúce sa na rôzne aplikácie:

- MPEG-1
- MPEG-2
- MPEG-4

Štandard MPEG-1 sa zameriava na interaktívne systémy na báze médií CD-ROM. MPEG-2 rozširuje schopnosti MPEG-1 pre digitálnu televíziu a TV s vysokým rozlíšením (HDTV). MPEG-4 sa zameriava na multimediálne aplikácie s veľmi nízkymi bitovými tokmi.

### MPEG-1

Štandard bol vyvinutý na kódovanie video signálov s dostatočnou kvalitou pri bitovom toku 1,4 Mbit/s. Podporuje rýchle pretáčanie a posun vpred a pozastavenie obrazu. Hoci typická veľkosť video snímky je 352x288 pixelov (CIF), kodek podporuje veľkosť snímky do 720x576 pixelov pri 30 snímkach/sekunda a bitovom toku 1,86 Mbit/s.

Medzisnímkové kódovanie v MPEG-1 je založené na medzisnímkovej predikcii a DCT kódovaní. Sú definované 3 typy makroblokov (sád štyroch luminančných a dvoch chrominančných blokov), z ktorých vyplývajú tri druhy snímok:

- I snímky – Intra snímky – kódovanie snímok
- P snímky – Predikované snímky – medzisnímkové kódovanie s priamou predikciou
- B snímky – Obojsmerné snímky – dvojsmerná predikcia/interpolácia

Snímky I sa v blokoch 8x8 kódujú DCT, kvantizujú a po cik-cak zoradení entropicky zakódujú. Nevykonáva sa žiadny odhad pohybu, takže snímka sa správa ako fotografia, je nezávislá od ostatných snímok a slúži ako bod zastavenia pri rýchlom pretáčaní a posune vpred.

Snímky P sa kódujú s použitím medzisnímkovej predikcie a porovnaním s predošlou snímkou. Tým sa vytvorí chybová snímka (reprezentovaná vektorom pohybu), ktorá sa rozdelí na makrobloky veľkosti 16x16 pixelov. Tie sa zakódujú pomocou DCT, kvantizujú a entropicky zakódujú podobne ako pri I snímkach. Napriek tomu tieto snímky neobsahujú celú obrazovú informáciu, pretože závisia od predošlých snímok slúžia len ako referenčné snímky pri predikcii, nie pre rýchle prehrávanie.

Snímky B sú získané iba pomocou doprednej a spätnej predikcie z I alebo P snímok. B snímky zvyčajne slúžia iba na výplň alebo pridanie detailov v rýchlych scénach medzi I a P snímkami, pretože obsahujú rovnaké informácie ako P snímky. Z B snímok sa nevykonáva predikcia.

Obr. 5.19: Radenie I, P a B snímok a závislosti medzi nimi

Rámce je možné kombinovať flexibilne podľa požiadaviek aplikácií. Sekvencia IIIIIIIIII ponúka výborný prístup k snímkam a rýchlemu prehrávaniu a posunu vpred, avšak nízka kompresia pri I snímkach zvyšuje nároky na prenosové prostriedky. Zvyčajne sa preto používa sekvencia IBBPBBPBBPBB(I) (nazývaná Group of pictures, GOP), pri ktorej sa I snímka používa iba približne dvakrát za sekundu.

### MPEG-2

MPEG-2 je rozšírením predošlého štandardu (so spätnou kompatibilitou) s možnosťou prekladaného videa, vylepšeným maximálnym rozlíšením obrazu, TV kvalitou videa pri bitových tokoch 4 až 8 Mbit/s a HDTV kvalitou videa pri 20 Mbit/s.

Vlastnosti dekodérov sú dané prostredníctvom profilov a úrovní. Každá úroveň definuje sadu parametrov určujúcich cieľovú aplikáciu videa, zatiaľ čo profily určujú zložitosť použitých algoritmov. Nasledujúce tabuľky podrobne popisujú úrovne a profily.

Prehľad úrovní v MPEG-2
Úroveň | HIGH (vysoká) | HIGH 1440 (vysoká 1440) | MAIN (hlavná) | LOW (nízka)
Parametre | 1920x1152 pix. 60 sn/s 80 Mbit/s | 1440x1152 pix. 60 sn/s 60 Mbit/s | 720x576 pix. 30 sn/s 15 Mbit/s | 352x288 pix. 30 sn/s 4 Mbit/s

Prehľad profilov v MPEG-2
Profil | Algoritmy
High (vysoký) | Všetky funkcie profilu Spatial Scalable, navyše režimy kódovania s 3-vrstvovým priestorovým a SNR škálovaním Farebný model YUV 4:2:2 pre náročné úlohy
Spatial Scalable (priestorové škálovanie) | Všetky funkcie profilu SNR Scalable, navyše režim kódovania s 2-vrstvovým priestorovým škálovaním Farebný model YUV 4:2:0
SNR Scalable (SNR škálovanie) | Všetky funkcie profilu Main, navyše režim kódovania s 2-vrstvovým SNR (signal-to-noise ratio) škálovaním Farebný model YUV 4:2:0
Main (hlavný) | Bez škálovania, kódovanie prekladaného videa Náhodný prístup k snímkam, režim predikcie s B snímkami Farebný model YUV 4:2:0
Simple (jednoduchý) | Podporuje všetky funkcie profilu Main okrem režimu predikcie s B snímkami Farebný model YUV 4:2:0

### Škálovanie videa

Škálovanie umožňuje dekodérom prehrávanie videa s nízkym dátovým tokom, ak nie sú schopné prehrať video s vysokým dátovým tokom. Dekodér prijme video s nízkou kvalitou a doplňujúce informácie, ktoré mu umožnia zvýšiť kvalitu videa. Pomocou SNR škálovania sa DCT koeficienty škálujú nahrubo, čím vznikne video s nízkym dátovým tokom. Potom sa rozdiel medzi hrubou kvantizáciou a skutočnými hodnotami znova kvantizuje pomocou jemnejšej kvantizácie a táto informácia sa prenáša samostatne. To umožňuje zvýšenie kvality videa na požiadanie. Pri priestorovom škálovaní sa video kóduje najskôr pri nižšom rozlíšení a vyššie rozlíšenie sa dosiahne doplnkovými dátami. Ak dekódovacie zariadenie nepodporuje vyššie rozlíšenie, vynechá doplnkové dáta a dekóduje iba video s nízkym rozlíšením. Časové škálovanie funguje podobne. Vytvorí sa video s nízkym počtom snímok a pomocou doplnkových dát je možná rekonštrukcia videa s vyšším počtom snímok. Priestorové a časové škálovanie sa dá kombinovať, čo prináša variabilitu pri kódovaní videa, napríklad na podporu HDTV aj TV v štandardnom rozlíšení.

Organizácie ISO a ITU-T vytvárali štandard MPEG-2 spoločne, pričom ITU-T ho nazvalo H.262.

### MPEG-4

Štandard MPEG-4 bol vyvinutý na podporu veľmi nízkych bitových rýchlostí do 64 kbit/s. Jeho cieľom je podpora videa na Internete, v mobilných zariadeniach a sieťach a podpora interaktivity s objektmi na scéne. To vyžadovalo vylepšenie kompresných metód, ktoré využívajú kódovanie video objektov v prirodzenom (štandardnom) a syntetickom (kódovanie modelov objektov) videu.

Štandard MPEG-4 existuje v dvoch verziách. Prvá z nich sa označuje Časť 2 a používa ju množstvo kodekov vrátane DivX, XviD, Nero Digital a ďalších. Druhá verzia sa označuje Časť 10 alebo tiež MPEG-4/H.264 AVC (Pokročilé kódovanie videa), a používa sa v kodekoch x264, Quicktime alebo pre médiá HD video, ako napríklad Blu-ray Disc.

Kódovanie prirodzeného videa sa deje prostredníctvom detekcie a kódovania videoobjektových rovín (video object planes, VOP). Každá VOP obsahuje informácie o tvare a textúre objektu na scéne. Sekvencia VOP-ov predstavujúcich ten istý objekt sa nazýva videoobjekt (VO). Každý videoobjekt je možné kódovať s iným dátovým tokom, čo umožňuje flexibilné priraďovanie bitového toku a ďalšie úkony s objektmi (škálovanie, rotácia zmena jasu a farby).

Obr. 5.20: Ukážka použitia video objektov

Videoobjekt je určený svojím tvarom daným binárnou maskou alebo maskou v odtieňoch sivej. Kódovanie pohybu je založené na podobných princípoch, aké sú použité v predošlých štandardoch MPEG, ale aplikujú sa na videoobjektové roviny, čím sa vytvárajú IVOP, PVOP a BVOP snímky. Priestorová nadbytočnosť sa odstráni pomocou DCT a časová nadbytočnosť použitím kompenzácie pohybu. Textúry videoobjektov sa kóduje prostredníctvom Shape Adaptive (SA) DCT, modifikácie DCT. Alternatívne sa môže použiť kódovanie pomocou SA DWT (diskrétnej waveletovej transformácie).

Syntetické video umožňuje vytváranie umelých objektov a ich vkladanie medzi existujúce videoobjekty na scéne. Hlavným dôvodom je umožnenie animácie tváre pre multimediálne aplikácie.

## Štandardy H.261 a H.263

Štandard H.261 bol publikovaný v roku 1990 s použitím vo videotelefónii a video konferenciách s nízkymi dátovými tokmi od 64 do 1920 kbit/s a nízkym oneskorením. Zjednocuje rôzne televízne štandardy s rôznym počtom riadkov a frekvenciou polsnímok (PAL a SECAM s 625 riadkami pri 50 Hz, NTSC s 525 riadkami pri 60 Hz). V základe kodek používa rozlíšenie CIF (352x288) a QCIF (176x144), z ktorých jedno rozlíšenie sa používa pre video konferencie s viacerými účastníkmi a druhé pre videotelefóniu, v ktorej sa zvyčajne prenáša iba hlava a ramená jedinej osoby.

Rozlíšenia CIF a QCIF sa skladajú zo skupín blokov (GOB): CIF z GOB 1-12 a QCIF z GOB 1, 3 a 5. Každá GOB sa skladá z 33 makroblokov pozostávajúcich zo 6 blokov: 4 jasových (luminančných) a dvoch farebných (chrominančných – CR, CB), každý zložený z 8x8 pixelov.

Kodek H.261 využíva iba I snímky (označované ako kľúčové snímky) a P snímky, ktoré sa získajú pomocou predikcie pohybu z I snímok alebo predošlých P snímok. Štandard nevyužíva B snímky.

Kódovací algoritmus využíva hybridné blokové kódovanie s medzisnímkovou predikciou a kompenzáciou pohybu a transformačné kódovanie na báze DCT, ktoré je podobné kódovaniu MPEG-1. Po odstránení priestorovej a časovej nadbytočnosti sa každý blok transformuje DCT, kvantizuje, pomocou cik-cak čítania zoradí do vektora a zakóduje Huffmanovým (bezstratovým) kódovaním. Navyše sa používa iteračný filter, ktorý vyhladzuje rozdiely medzi blokmi predikovaného obrazu, čím sa vylepšuje medzi snímková predikcia.

Iteračný filter pracuje so sekvenciou snímok a odstraňuje blokové artefakty vzniknuté DCT transformáciou každého bloku. Jeho úlohou je vyhladiť ostré hrany medzi blokmi snímky. Vyhladzovanie prebieha opakovane v slučke, až kým sa dosiahne žiadaná hranica. Hoci spracovanie slučky môže zabrať viac času než samotné dekódovanie, no po procese odhadu pohybu tak môže byť potrebné zakódovať menší vektor pohybu.

Štandard H.263 prináša v porovnaní s H.261 efektívnejšie kódovanie. Vďaka použitiu niektorých techník z MPEG-1 dosiahol kodek zníženie bitovej rýchlosti o 50%, pričom zachováva rovnakú subjektívnu kvalitu. V porovnaní s H.261 štandard H.263 prináša širšiu podporu video formátov (SQCIF, 4CIF, 16CIF), vylepšený odhad vektoru pohybu, modifikované VLC kódovanie a zavádza PB snímky.

Odhad pohybu v H.263 pracuje s polpixelovou (half-pel) predikciou. Zatiaľ čo vektory pohybu v H.261 pracujú s celými číslami, vektory v H.263 sú reprezentované s presnosťou 0,5. Okrem toho sa vektor pohybu makrobloku odhaduje porovnaním s vektormi pohybu okolitých makroblokov (výpočet mediánu) a prenáša sa iba rozdiel medzi odhadovaným a skutočným vektorom pohybu (nazýva sa mediánová predikcia).

Režim PB snímok pracuje podobným spôsobom ako v kodeku MPEG-1. P snímka sa získa z I snímky alebo P snímky. B snímka sa získa obojsmernou predikciou z okolitých snímok. Rozdiel medzi MPEG-1 a H.263 je v tom, že B snímka v H.263 je uložená priamo v P snímke, čím sa vytvára PB snímka. Je to výhodné najmä pre video s nízkym dátovým tokom.

Rozšírenie štandardu H.263, štandard H.263+, prináša odolnosť voči chybám prenosu, dynamické rozlíšenie scény a škálovanie snímok.

## MPEG-4 AVC/H.264

Ďalšia (a novšia) verzia štandardu MPEG-4, označovaná ako pokročilé kódovanie videa (Advanced Video Coding, AVC), je v súčasnosti najpoužívanejším štandardom. Spravovaný je spoločne organizáciami ISO a ITU-T a je vhodný najmä na kompresiu videa vo vysokom rozlíšení.

Štandard prináša množstvo vylepšení predošlých štandardov oboch organizácií, ako je vyššie rozlíšenie farebnej informácie, škálovateľné kódovanie videa a viacpohľadové kódovanie videa, ktoré umožňuje kódovanie viacerých uhlov videa, a teda podporuje stereoskopické (3D) video.

Variabilná veľkosť blokov umožňuje precíznu segmentáciu pohyblivých regiónov s veľkosťou od 16x16 do 4x4 pixelov. Z jedného makrobloku môže byť odvodených viacero vektorov pohybu smerujúcich k rôznym referenčným obrazom. Algoritmus kompenzácie pohybu pracuje so štvrťpixelovou presnosťou (v porovnaní s polpixelovou presnosťou u H.263), čo umožňuje vyššiu presnosť vektorov pohybu. DCT transformácia bola vylepšená a upravená tak, aby poskytovala jednoznačné dekódovanie. Navyše sa na hladké oblasti môže použiť sekundárna Hadamardova transformácia, ktorá ešte viac zlepšuje kompresný pomer.

Okrem toho bolo zavedené bezstratové kódovanie makroblokov, ktoré umožňuje dokonalú reprezentáciu vybraných oblastí obrazu. Pracuje v dvoch režimoch: PCM makroblok alebo vylepšený bezstratový makroblok (efektívnejší). Entropické kódovanie používa nové algoritmy na kódovanie prvkov syntaxe a kvantizovaných hodnôt transformačných koeficientov: Kontextovo adaptívne binárne aritmetické kódovanie a Kontextovo adaptívne kódovanie s premenlivou dĺžkou, ktoré kódujú efektívnejšie než v predošlých štandardoch.

Množstvo ďalších vylepšení zachováva rovnakú subjektívnu kvalitu videa ako predošlé štandardy, no pri polovičnom, či dokonca menšom bitovom toku, čo je zjavné najmä pri vysokom dátovom toku a videu s vysokým rozlíšením.

Podobne ako pri MPEG-2 štandard MPEG-4 AVC/H.264 podporuje kódovacie profily na použitie pre rôzne cieľové aplikácie a úrovne definujúce požadovaný výkon dekodéra.

## WebM

WebM je audio a video kodek s otvoreným zdrojovým kódom od spoločnosti Google určený na použitie s HTML5 videom. Je to multimediálny kontajner založený na kontajneri Matroska, ktorý obsahuje zvuk kódovaný štandardom Ogg Vorbis a video kódované kodekom VP8.

Kodek VP8 vyvinula spoločnosť On2 Technologies a po tom, ako ju v roku 2010 odkúpila spoločnosť Google, bol uvoľnený pod licenciou s otvoreným zdrojovým kódom. Hoci VP8 využíva mnohé techniky zavedené štandardmi MPEG a H.26x, prináša ďalšie vylepšenia, ktoré umožňujú zachovanie vysokej subjektívnej kvality pri znížení výpočtovej náročnosti. Niektoré z nich teraz uvedieme.

Kodek využíva tzv. konštruovanú referenčnú snímku, ktorá slúži ako referenčná snímka pre kompenzáciu pohybu niekoľkých snímok. Vzhľad konštruovanej referenčnej snímky nie je určený, takže je ponechaný na voľbu návrhárov. Proces iteračného filtrovania, ktorý odstraňuje blokové artefakty po znížení priestorovej nadbytočnosti (DCT transformácii) môže pri každom bloku použiť rôzny počet blokov v sekvencii. Entropické kódovanie využíva najmä binárne aritmetické kódovanie, ktoré sa prispôsobuje každej snímke zvlášť.

Okrem už spomínaných kódovacích štandardov existuje množstvo ďalších video formátov, napríklad Windows Media Video (WMV) od spoločnosti Microsoft alebo Ogg Theora, založený na staršom kodeku VP3 od On2 Technologies, a mnohé ďalšie štandardy, ktoré nepokrývajú organizácie ISO ani ITU-T.