Kompresní metody
Komprese videa

Video, anebo pohyblivý (dynamický) obraz, je v dnešní době nejpoužívanější složkou multimediálního obsahu. Množství video obsahu rapidně stoupá a v porovnání s jinými typy médií zabírá výrazně nejvíce prostoru. S rostoucími možnostmi osobních zařízení ve vytváření a přehrávání videa se množství přenášených dat zvětšuje každý den. Proto je potřebné snížit velikost videa kvůli snížení nákladů na přenos a ukládání dat.

Videosekvence se skládá ze samostatných snímků, anebo obrazů, které je v podstatě možné kódovat stejně jako statické obrazy. Avšak při sekvenci rychle se měnících obrazů se předpokládá výskyt stejného objektu s měnící se pozicí v čase, což znamená, že dva následující snímky jsou si podobné, tj. jen s minimálními rozdíly. Proto když zakódujeme jen tyto rozdíly, můžeme dosáhnout ještě účinnější komprese.

Metody kódování videa můžeme rozdělit na dvě hlavní kategorie:

- Kódování v časové oblasti
- Kódování na bázi modelování

Metody kódování v časové oblasti využívají transformační kódování s mezisnímkovou predikcí a jsou využívány v mnohých formátech. Metody kódování na bázi modelování se používají v aplikacích s omezeným přenosovým pásmem, jako je videotelefonie, s datovým tokem do 64 kbit/s. Metody využívají typický vzhled scén při video telefonování s neměnícím se obsahem, minimálním pohybem a sníženou frekvencí snímkování.

## Mezisnímková predikce a kompenzace pohybu

Pro snížení časové nadbytečnosti mezi dvěma snímky se používá mezisnímková predikce s kompenzací pohybu, která pracuje ve dvou krocích:

- Odhad pohybu
- Kompenzace pohybu

Během odhadu pohybu se vytváří vektor pohybu, který popisuje relativní pohyb obrazových bloků z předešlého do aktuálního snímku. Když je pozice předvídatelná, potom stačí přenést jen vektor pohybu. Na odhad pohybu se používají dva algoritmy:

- Iterační algoritmy (pel recursive algorithms)
- Algoritmy s blokovým prohledáváním (block matching algorithms)

Iterační algoritmy se iteratívním způsobem snaží minimalizovat chybu predikce. Protože velmi závisí na místních statistických vzdálenostech, nemohou se použít na odhad větších vzdáleností a jsou tak vhodné pro video s malým pohybem, např. videotelefonii. Algoritmy s blokovým prohledáváním předpokládají, že všechny části obrazového bloku se pohybují stejným směrem. Aktuální snímek se rozdělí na bloky, pro které se v předešlém snímku najdou nejpodobnější bloky.

Algoritmy na kompenzaci pohybu využívají vektory pohybu na přesouvání každého bloku z předešlého snímku do nové pozice v aktuálním snímku. Tím vznikne predikční snímek, který se zakóduje a přenáší.

## Techniky komprese videa

### Překládané video

Standardní (progresivní anebo nepřekládané) video je složeno z 25 (Evropa) anebo 29,97 (USA) snímků za sekundu. Překládané video se skládá z dvojnásobného počtu půlsnímků za sekundu (50 v Evropě anebo 59,94 v USA). Každý půlsnímek obsahuje buď sudé, anebo liché řádky celých video snímků, které se dekódují a přehrávají v překládaném pořadí.

Rozdíl mezi progresívním a překládaným videem. Celý snímek se rozdělí na sudé a liché řádky, čímž se vytvoří půlsnímky, které se střídavě uloží do sekvence. Video má dvojnásobnou snímkovou rychlost, avšak pro půlsnímky.

### Barevné podvzorkování

Další technikou kódování je barevné podvzorkování. Každý pixel videosnímku je kódován v barevném prostoru YUV skládajícím se ze třech subpixelů: jeden jasový (luminanční) a dva barevnostní (chrominanční). Čtverec čtyř takových pixelů se označuje 4:4:4. Protože lidské oko je citlivější na jasovou složku než na změny barvy, umožňuje to snížit počet chrominančních pixelů na polovinu, či dokonce na čtvrtinu. V prvém případě jsou čtyři luminanční pixely pokryty dvěma a dvěma chrominančními pixely (4:2:2) a v druhém případě jen dvěma, resp. jedním a jedním chrominančním pixelem (4:2:0 anebo 4:1:1).

Příklady barevného podvzorkování. Levý obrázek ukazuje, že každý luminanční subpixel má svojí dvojici chrominančních subpixelů. Uprostřed dva luminanční subpixely sdílejí pár chrominančních subpixelů. Napravo jsou pro čtyři luminanční subpixely dostupné jen dva chrominanční.

Podobně jako u statických obrazů se kompresní techniky u videa opírají o hybridní metody kombinující kódování v časové oblasti s transformačním kódováním (jako například diskrétní kosinusová (DCT) anebo diskrétní waveletová transformace (DWT)). Predikční snímek vytvořený v procesu kompenzace pohybu se odčítá od aktuálního snímku a vytvoří se chybový snímek. Ten se po blocích zakóduje pomocí DCT, transformační koeficienty se kvantizují, seřadí cik-cak čítáním a zakódují pomocí kódu s proměnlivou délkou (VLC). Potom se posílá jen VLC sekvence.

Na straně přijímače se rekonstrukce provádí inverzním postupem, tedy inverzním VLC, inverzní kvantizací a IDCT.

Popsaný postup se s malými odlišnostmi používá v kódovacích standardech MPEG a H26x.

## MPEG

Expertní skupinu pro pohyblivý obraz (Motion Picture Experts Group, MPEG) zřídili organizace ISO a IEC, pro vytvoření standardů pro kompresi videa a zvuku. Jako výsledek byly navrženy tyto standardy zaměřující se na různé aplikace:

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

Standard MPEG-1 se zaměřuje na interaktivní systémy na bázi médií CD-ROM. MPEG-2 rozšiřuje schopnosti MPEG-1 pro digitální televizi a TV s vysokým rozlišením (HDTV). MPEG-4 se zaměřuje na multimediální aplikace s velmi nízkými bitovými toky.

### MPEG-1

Standard byl vyvinut pro kódování video signálů s dostatečnou kvalitou při přenosové rychlosti 1,4 Mbit/s. Podporuje rychlé přetáčení, posun vpřed a pozastavení obrazu. I když typická velikost videosnímku je 352x288 pixelů (CIF), kodek podporuje velikost snímku do 720x576 pixelů při 30 snímcích za sekundu a přenosové rychlosti 1,86 Mbit/s.

Mezisnímkové kódování v MPEG-1 je založeno na mezisnímkové predikci a DCT kódování. Jsou definovány 3 typy makrobloků (sad čtyřech luminančních a dvou chrominančních bloků), ze kterých vyplývají tři druhy snímků:

- I snímky – Intra snímky – kódování snímků
- P snímky – Predikované snímky – mezisnímkové kódování s přímou predikcí
- B snímky – Obousměrné snímky – dvojsměrná predikce/interpolace

Snímky I se v blocích 8x8 kódují DCT, kvantizují a po cik-cak seřazení entropicky zakódují. Neprovádí se žádný odhad pohybu, takže snímek se chová jako fotografie, je nezávislý na ostatních snímcích a slouží jako bod zastavení při rychlém přetáčení a posunu vpřed.

Snímky P se kódují s použitím mezisnímkové predikce a porovnáním s předešlým snímkem. Tím se vytvoří chybový snímek (reprezentovaný vektorem pohybu), který se rozdělí na makrobloky velikosti 16x16 pixelů. Ty se zakódují pomocí DCT, kvantizují a entropicky zakódují podobně jako u I snímcích. Přesto tyto snímky neobsahují celou obrazovou informaci, protože závisí na předešlých snímcích, slouží jen jako referenční snímky při predikci, ne pro rychlé přehrávání.

Snímky B jsou získány jen pomocí dopředné a zpětné predikce z I anebo P snímků. B snímky obvykle slouží jen jako výplň anebo přidání detailů v rychlých scénách mezi I a P snímky, protože obsahují stejné informace jako P snímky. Z B snímků se neprovádí predikce.

Řazení I, P a B snímků a závislosti mezi nimi

Rámce je možno kombinovat flexibilně podle požadavků aplikací. Sekvence IIIIIIIIII nabízí výborný přístup ke snímkům a rychlému přehrávání a posunu vpřed, avšak nízká komprese u I snímků zvyšuje nároky na přenosové prostředky. Obvykle se proto používá sekvence IBBPBBPBBPBB(I) (nazývaná Group of pictures - GOP), při které se I snímek používá jen přibližně dvakrát za sekundu.

### MPEG-2

MPEG-2 je rozšířením předešlého standardu (se zpětnou kompatibilitou) s možností překládaného videa, vylepšeným maximálním rozlišením obrazu, TV kvalitou videa při přenosových rychlostech 4 až 8 Mbit/s a HDTV kvalitou videa při 20 Mbit/s.

Vlastnosti dekodérů jsou dány prostřednictvím profilů a úrovní. Každá úroveň definuje sadu parametrů určujících cílovou aplikaci videa, zatímco profily určují složitost použitých algoritmů. Následující tabulky podrobně popisují úrovně a profily.

Přehled úrovní v MPEG-2
Úroveň | HIGH (vysoká) | HIGH 1440 (vysoká 1440) | MAIN (hlavní) | LOW (nízká)
Parametry | 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

Přehled profilů v MPEG-2
Profil | Algoritmy
High (vysoký) | Všechny funkce profilu Spatial Scalable, navíc režimy kódování s 3-vrstvovým prostorovým a SNR škálováním Barevný model YUV 4:2:2 pro náročné úlohy
Spatial Scalable (prostorové škálování) | Všechny funkce profilu SNR Scalable, navíc režim kódování s 2-vrstvovým prostorovým škálováním Barevný model YUV 4:2:0
SNR Scalable (SNR škálování) | Všechny funkce profilu Main, navíc režim kódování s 2-vrstvovým SNR (signal-to-noise ratio) škálováním Barevný model YUV 4:2:0
Main (hlavní) | Bez škálování, kódování překládaného videa Náhodný přístup ke snímkům, režim predikce s B snímky Barevný model YUV 4:2:0
Simple (jednoduchý) | Podporuje všechny funkce profilu Main kromě režimu predikce s B snímky Barevný model YUV 4:2:0

### Škálování videa

Škálování umožňuje dekodérům přehrávání videa s nízkou přenosovou rychlostí, když nejsou schopny přehrát video s vysokou přenosovou rychlostí. Dekodér přijme video s nízkou kvalitou a doplňující informace, které mu umožní zvýšit kvalitu videa. Pomocí SNR škálování se DCT koeficienty škálují nahrubo, čímž vznikne video s nízkou přenosovou rychlostí. Potom se rozdíl mezi hrubou kvantizací a skutečnými hodnotami znovu kvantizuje pomocí jemnější kvantizace a tato informace se přenáší samostatně. To umožňuje zvýšení kvality videa na požádání. Při prostorovém škálování se video kóduje nejprve při nižším rozlišení a vyššího rozlišení se dosáhne doplňkovými daty. Když dekódovací zařízení nepodporuje vyšší rozlišení, vynechá doplňková data a dekóduje jen video s nízkým rozlišením. Časové škálování funguje podobně. Vytvoří se video s nízkým počtem snímků a pomocí doplňkových dat je možná rekonstrukce videa s vyšším počtem snímků. Prostorové a časové škálování se dá kombinovat, což přináší variabilitu při kódování videa, například na podporu HDTV a TV v standardním rozlišení.

Organizace ISO a ITU-T vytvářely standard MPEG-2 společně, přičemž ITU-T ho nazvalo H.262.

### MPEG-4

Standard MPEG-4 byl vyvinut na podporu velmi nízkých přenosových rychlostí do 64 kbit/s. Jeho cílem je podpora videa na Internetu, v mobilních zařízeních a sítích a podpora interaktivity s objekty na scéně. To vyžadovalo vylepšení kompresních metod, které využívají kódování video objektů v přirozeném (standardním) a syntetickém (kódování modelů objektů) videu.

Standard MPEG-4 existuje ve dvou verzích. První z nich se označuje Část 2 a používá jí mnoho kodeků včetně DivX, XviD, Nero Digital a dalších. Druhá verze se označuje Část 10 anebo též MPEG-4 / H.264 Pokročilé kódování videa, a používá se v kodecích x264, Quicktime anebo pro média HD video, jako například Blu-ray Disc.

Kódování přirozeného videa se děje prostřednictvím detekce a kódování videoobjektových rovin (video object planes - VOP). Každá VOP obsahuje informace o tvaru a textuře objektu na scéně. Sekvence VOP-ů představujících ten samý objekt se nazývá video objekt (VO). Každý video objekt je možné kódovat s jiným datovým tokem, což umožňuje flexibilní přiřazování bitového toku a další úkony s objekty (škálování, rotace změn jasu a barvy).

Ukázka použití video objektů

Video objekt je určen svojím tvarem daným binární maskou anebo maskou v odstínech šedé. Kódování pohybu je založeno na podobných principech, jaké jsou použity v předešlých standardech MPEG, ale aplikují se na video objektové roviny, čímž se vytvářejí IVOP, PVOP a BVOP snímky. Prostorová nadbytečnost se odstraní pomocí DCT a časová nadbytečnost použitím kompenzace pohybu. Textury video objektů se kódují prostřednictvím Shape Adaptive (SA) DCT, modifikace DCT. Alternativně se může použít kódování pomocí SA DWT (diskrétní waveletové transformace).

Syntetické video umožňuje vytváření umělých objektů a jejich vkládání mezi existující video objekty na scéně. Hlavním důvodem je umožnění animace tváře pro multimediální aplikace.

## Standardy H.261 a H.263

Standard H. 261 byl publikován v roce 1990 s použitím ve videotelefónii a videokonferencích s nízkými přenosovými rychlostmi od 64 do 1920 kbit/s a malým zpožděním. Sjednocuje různé televizní standardy s různým počtem řádků a frekvencí půlsnímků (PAL a SECAM s 625 řádky při 50 Hz, NTSC s 525 řádky při 60 Hz). Kodek používá rozlišení CIF (352x288) a QCIF (176x144), z kterých jedno rozlišení se používá pro videokonference s více účastníky a druhé pro videotelefónii, ve které se obyčejně přenáší jen hlava a ramena jediné osoby.

Rozlišení CIF a QCIF se skládají ze skupin bloků (GOB): CIF z GOB 1-12 a QCIF z GOB 1, 3 a 5. Každá GOB se skládá z 33 makrobloků složených z 6 bloků: 4 jasových (luminančních) a dvou barevných (chrominančních – CR, CB), každý složený z 8x8 pixelů.

Kodek H. 261 využívá pouze I snímky (označované jako klíčové snímky) a P snímky, které se získají pomocí predikce pohybu z I snímků anebo předešlých P snímků. Standard nevyužívá B snímky.

Kódovací algoritmus využívá hybridní blokové kódování s mezisnímkovou predikcí a kompenzací pohybu a transformační kódování na bázi DCT, které je podobné kódování MPEG-1. Po odstranění prostorové a časové nadbytečnosti se každý blok transformuje DCT, kvantizuje, pomocí cik-cak čítání seřadí do vektoru a zakóduje Huffmanovým (bezeztrátovým) kódováním. Navíc se používá iterační filtr, který vyhlazuje rozdíly mezi bloky predikovaného obrazu, čímž se vylepšuje mezisnímková predikce.

Iterační filtr pracuje se sekvencí snímků a odstraňuje blokové artefakty vzniklé DCT transformací každého bloku. Jeho úlohou je vyhladit ostré hrany mezi bloky snímky. Vyhlazování probíhá opakovaně ve smyčce, až se dosáhne žádaná hranice. I když zpracování smyčky může zabrat více času než samotné dekódování, ale po procesu odhadu pohybu tak může být potřebné zakódovat menší vektor pohybu.

Standard H. 263 přináší v porovnání s H.261 efektivnější kódování. Díky použití některých technik z MPEG-1 dosáhl kodek snížení bitové rychlosti o 50%, přičemž zachovává stejnou subjektivní kvalitu. V porovnání s H. 261 standard H. 263 přináší širší podporu video formátům (SQCIF, 4CIF, 16CIF), vylepšený odhad vektoru pohybu, modifikované VLC kódování a zavádí PB snímky.

Odhad pohybu v H. 263 pracuje s půl pixelovou (half-pel) predikcí. Zatímco vektory pohybu v H. 261 pracují s celými čísly, vektory v H. 263 jsou reprezentovány s přesností 0,5. Kromě toho se vektor pohybu makrobloku odhaduje porovnáním s vektory pohybu okolních makrobloků (výpočet mediánu) a přenáší se jen rozdíl mezi odhadovaným a skutečným vektorem pohybu (nazývá se mediánová predikce).

Režim PB snímků pracuje podobným způsobem jako v kodeku MPEG-1. P snímek se získá z I snímku anebo P snímku. B snímek se získá obousměrnou predikcí z okolních snímků. Rozdíl mezi MPEG-1 a H. 263 je v tom, že B snímek v H.263 je uložen přímo v P snímku, čímž se vytváří PB snímek. Je to výhodné zvláště pro video s nízkým datovým tokem.

Rozšíření standardu H. 263, standard H.263+, přináší odolnost vůči chybám přenosu, dynamické rozlišení scény a škálování snímků.

## MPEG-4 AVC/H.264

Další (a novější) verze standardu MPEG-4, označovaná jako pokročilé kódování videa (Advanced Video Coding, AVC), je dnes nejpoužívanějším standardem. Spravován je společně organizacemi ISO a ITU-T a je vhodný zejména pro kompresi videa ve vysokém rozlišení.

Standard přináší mnoho vylepšení předcházejících standardů obou organizací, jako je vyšší rozlišení barevné informace, škálovatelné kódování videa a více pohledové kódováni videa, které umožňuje kódování několika úhlů videa, a tedy podporuje stereoskopické (3D) video.

Variabilní velikost bloků umožňuje precizní segmentaci pohyblivých regiónů s velikostí od 16x16 do 4x4 pixelů. Z jednoho makrobloku může být odvozených více vektorů pohybu směřujících k různým referenčním obrazům. Algoritmus kompenzace pohybu pracuje se čtvrtpixelovou přesností (v porovnání s půlpixelovou přesností H.263), což umožňuje vyšší přesnost vektorů pohybu. DCT transformace byla vylepšena a upravena tak, aby poskytovala jednoznačné dekódování. Navíc se na hladké oblasti může použít sekundární Hadamardova transformace, která ještě více zlepšuje kompresní poměr.

Kromě toho bylo zavedeno bezeztrátové kódování makrobloků, které umožňuje dokonalou reprezentaci vybraných oblastí obrazu. Pracuje ve dvou režimech: PCM makroblok anebo vylepšený bezeztrátový makroblok (efektivnější). Entropické kódování používá nové algoritmy na kódování prvků syntaxe a kvantizovaných hodnot transformačních koeficientů: Kontextově adaptivní binární aritmetické kódování a Kontextově adaptivní kódování s proměnlivou délkou, které kódují efektivněji než v předešlých standardech.

Množství dalších vylepšení zachovává stejnou subjektivní kvalitu videa jako předešlé standardy, ale při polovičním, či dokonce menším bitovém toku, což je zřejmé zejména při vysokém datovém toku a videu s vysokým rozlišením.

Podobně jako u MPEG-2, standard MPEG-4 AVC/H.264 podporuje kódovací profily pro použití na různé cílové aplikace a úrovně definující požadovaný výkon dekodéru.

## WebM

WebM je audio a video kodek s otevřeným zdrojovým kódem od společnosti Google, určený na použití s HTML5 videem. Je to multimediální kontejner, založený na kontejneru Matroska, který obsahuje zvuk kódovaný standardem Ogg Vorbis a video kódované kodekem VP8.

Kodek VP8 vyvinula společnost On2 Technologies a po tom, jak jí v roce 2010 odkoupila společnost Google, byl uvolněn pod licencí s otevřeným zdrojovým kódem. I když VP8 využívá mnohé techniky zavedené standardy MPEG a H.26x, přináší další vylepšení, které umožňují zachování vysoké subjektivní kvality při snížení výpočetní náročnosti. Některé z nich nyní uvedeme.

Kodek využívá tzv. konstruovaný referenční snímek, který slouží jako referenční snímek pro kompenzaci pohybu několika snímků. Vzhled konstruovaného referenčního snímku není určen, takže je ponechán na volbě návrhářů. Proces iteračního filtrování, který odstraňuje blokové artefakty po snížení prostorové nadbytečnosti (DCT transformace) může u každého bloku použít různý počet bloků v sekvenci. Entropické kódování využívá zejména binární aritmetické kódování, které se přizpůsobuje každému snímku zvlášť.

Kromě už zmíněných kódovacích standardů existuje množství dalších video formátů, například Windows Media Video (WMV) od společnosti Microsoft anebo Ogg Theora, založený na starším kodeku VP3 od On2 Technologies, a mnohé další standardy, které nepokrývají organizace ISO ani ITU-T.