Diit.cz - Novinky a informace o hardware, software a internetu

Analýza VP8 versus H.264: entropy coding, loop filter

WebM logo
Tento týden Google představil nový projekt WebM. Jde o formát určený pro internetové streamování videa v rámci nadcházejícího HTML5, který v sobě sdružuje nově otevřený video kodek VP8 (zakoupený spolu s jeho mateřskou firmou On2 Technologies loni) a zvuk ve formátu Ogg Vorbis, vše pak zastřešeno další nesmírně populární otevřenou technologií, souborovým kontejnerem Matroška (mkv). Jaký osud pro VP8 a HTML5 video vůbec Google plánuje? Jak se k němu (po)staví Chrome, Firefox, Internet Explorer 9 či Opera a co si o kvalitě kompresních algoritmů ve VP8 myslí špičkoví experti stojící za open-source implementací H.264 formátu známou jako x264? Přežije vůbec Flash jakožto přehrávač internetového videa rok 2010?

"Kódování entropie" je proces, který zpracovává všechny informace ze všech dosavadních kroků, tedy koeficienty diskrétní kosinové transformace, módy predikce, vektory pohybu a další, přičemž je následně bezztrátově komprimuje do výsledného datového souboru. A proč se tento podproces tak divně jmenuje? Inu každý, kdo se trochu zabýval teorií informace, už své ví. Nicméně pro ostatní, pojem entropie popisuje, jak moc je daný systém neorganizovaný (jinak řečeno "chaotický" či "neuspořádaný"). Kódování entropie je tak proces, který volně řečeno "do chaosu zavádí řád" tím, že přeuspořádá jednotlivé dílčí prvky do vhodné podoby.

VP8 používá aritmetický kodér jistým způsobem podobný tomu v H.264, ale s několika kritickými obměnami (ty zde opět nebudeme podrobněji rozebírat, přečtěte si v případě zájmu Jasonův blog), které vycházejí z toho, co On2 používala ve VP5, VP6 a pravděpodobně i ve VP7, kde byly nasazeny neadaptivní aritmetické kodéry.

Jak moc velkou penalizaci kompresního poměru přístup VP8 představuje, není známé. Každopádně zpět k věci. Dílčí část kódování entropie, a sice kódování vektorů pohybu, se skládá ze dvou částí: predikce založené na okolních vektorech pohybu a aktuální kompresi, což vyústí v rozdílovou hodnotu použitou pro kódování aktuálního (zpracovávaného) vektoru pohybu. Predikční metoda ve VP8 je "trochu zvláštní", ale na bližší povídání to prostě v tuto chvíli není, daná část specifikace toto popisující je jen zmateně napsaný kód v C bez jakéhokoli komentáře. Jason odhaduje, že kód provádí toto: vybírá kódování na základě okolních vektorů pohybu a pak se rozhodne, který z predikovaných vektorů použije, nebo jestli místo toho neuloží do výstupu jen deltu (rozdíl) oproti jinému.

Temnou stránkou této metody je, že (stejně jako VP3, resp. Ogg Theora), závisí silně na znovu užívání předchozích vektorů pohybu. To je nebezpečné v tom smyslu, že pokud kodér (a to nedávno zjistili i vývojáři Theory) zvolí vektor pohybu, který není skutečným vektorem pohybu, ale právě oním "potomkem jiného", aby tak uspořil datový objem, pak to může mít negativní dopad na vizuální stránku videa v daném snímku (snímcích). Každopádně Jason jasně říká, že v této dílčí podčásti specifikace VP8 si není jistý, jestli je lepší predikce ve VP8, nebo H.264.

WebM: ukákové nastavení H.264 (MeGUI)

Komprese výsledné delta je podobná H.264 s výjimkou velmi velkých delt, kde je VP8 trochu lepší.

Kódování Intra predikce je ve VP8 pravděpodobně o něco lepší než metoda v H.264, kterou Jason vždy považoval za trochu odfláknutou z hlediska specifikace.

Residuální kódování je ještě obtížnější na analýzu než vektory pohybu, protože je ve VP8 k dispozici pouze kus vysoce optimalizovaného a "zamlženého" C kódu, opět žádné komentáře. Každopádně jako CAVLC a CABAC (context-adaptive variable-length coding a context-adaptive binary arithmetic coding) v H.264 zakládá na stejných/podobných principech.

Jason dodává, že implementace schématu pro dělení dat do dílčích oblastí je noční můra pro hardwarové implementace, neboť velmi zvyšuje požadavky na paměťovou propustnost. Celkově pak kódování entropie Jason hodnotí jako v některých částech lepší, v jiných horší a v dalších zase jako velmi zvláštní. Pokud by v tomto mělo být H.264 hodnoceno jako lepší, pak to bude jen o příslovečný fousek.

Loop filtr

Loop filtr proběhne vždy po dekódování nebo kódování snímku a slouží k tomu, aby provedl další processing na snímku. Typicky jde o odstranění bloků (známý deblocking) u videí využívajících zmíněnou DCT. Není tu jen pro zlepšení vzhledu videa, ale také jako součást procesu, který připravuje predikci pro následující snímky. Z toho důvodu musí být shodný pro encoding i decoding videa. Implementace loop filtru ve VP8 je jakoby podobná H.264, opět ale s několika rozdíly. Za prvé má dva režimy: rychlý a normální. Rychlý je jednoznačně jednodušší implementace než ta v H.264, normální je zase o něco komplexnější. Za druhé, při filtraci mezi makrobloky se oba formáty trochu liší (VP8 používá větší rozsah, který H.264 používá jen pro intra části).

Do třetice pak VP8 neobsahuje to nejlepší z adaptivních mechanismů v H.264, adaptivní mechanismus implementuje pouze při přeskakování p16×16 bloků ("p" jsou ty, které nesou pouze změnu oproti předchozímu snímku(ům)). VP8 ve svém důsledku prochází bloky pořád dokola a dokola, i když se mezi snímky nijak nezměnily. Formát H.264 využívá více mechanismů, aby si tuhle zbytečnou práci ušetřil.

David "David Ježek" Ježek

Bývalý zdejší redaktor (2005-2017), nyní diskusní rejpal.

více článků, blogů a informací o autorovi

Diskuse ke článku Google uvolnil video kodek VP8: další krok v revoluci webového videa?

Úterý, 22 Červen 2010 - 10:20 | Stanislav Hodaň | Tak to jsou přesně záležitosti bez kterých se rád...
Úterý, 25 Květen 2010 - 14:16 | Marv-CZ | Specifikace Flashe je oficiálně volně dostupná....
Úterý, 25 Květen 2010 - 10:18 | JeCh | S tím nadpisem je mi to jasné. Je třeba psát tak...
Úterý, 25 Květen 2010 - 09:23 | David Ježek | k použití slova kodek v nadpisu: na "kodek...
Úterý, 25 Květen 2010 - 07:39 | JeCh | O použití slova kodek by se dalo polemizovat už v...
Pondělí, 24 Květen 2010 - 22:35 | David Ježek | kde konkrétně je chybně použit pojem kodek nebo...
Pondělí, 24 Květen 2010 - 15:19 | JeCh | Měla to být reakce na příspěvek nade mnou, nějak...
Pondělí, 24 Květen 2010 - 15:03 | JeCh | V jinak dobrém článku se bohužel vyskytlo několik...
Pondělí, 24 Květen 2010 - 10:13 | David Ježek | protože je toto v kořenu diskuse, předpokládám,...
Pondělí, 24 Květen 2010 - 10:02 | JeCh | Stejně špatně to podle mě pochopili i na Rootu....

Zobrazit diskusi