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

Analýza VP8 versus H.264: úvod, metody predikce

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?

Následující text vychází z podrobné analýzy VP8, kterou provedl Jason Garrett-Glaser (známý též jako Dark Shikari), jeden z hlavních programátorů projektu x264, v současné době nejkomplexnější a přitom otevřené implementace formátu H.264. My pochopitelně nechceme jeho analýzu kompletně "vykrádat", proto si zmíníme pouze ty hlavní a zajímavé body, v případě hlubšího zájmu vás odkazujeme přímo na jeho blog, kde se k tématu už i rozvinula diskuse.

On2 Technologies, kteří VP8 vyvinuli a které Google loni koupil, uvádějí, že VP8 je o 50 % lepší než H.264, ale jak Jason píše, jejich zmínky jsou vždy takto nadnesené a neodpovídají realitě. Předchozí VP7 měl být o 15 % lepší než H.264 a současně i rychlejší, v reálu však byl pomalejší a poskytoval horší kvalitu videa.

Jak je to s těmi patenty, které jsme zmiňovali v průběhu článku? Dle Jasona ani to, že Google tento formát uvolnil pod otevřenou licencí a bez poplatků, neznamená, že je formát skutečně patenty nezatížen. Microsoft také kdysi uvolnil VC-1 podobným stylem a pár měsíců na to se na něj sesypala řada firem s tím, že používá její patenty.

Specifikace

Specifikace formátu je zatím doslova v plenkách a to pěkně "pokaděných". Pořádný dokument popisující celý formát vlastně neexistuje, specifikace je z velké části jen copy&pastnutý zdroják v Céčku, zahrnuje řadu TODOs či C-specifických hacků. Jistě většina vývojářů bude souhlasit, že zdroják v C rozhodně není žádná specifikace. Specifikace VP8 je tak v tuto chvíli poměrně nejasná a chaotická a je v podstatě nemožné jen podle ní napsat od základu třeba vlastní dekodér tohoto formátu.

VP8 samotné

Jason připomíná, že současné formáty této úrovně pracují následovně:

  • komprese: Predict -> Transform + Quant -> Entropy Code -> Loopfilter
  • dekomprese (přehrávání): Entropy Decode -> Predict -> Dequant + Inverse Transform -> Loopfilter

Predikce (intra + inter)

V této fázi se kodek snaží předpovídat, jaký je obsah scény. Intra analyzuje daný snímek jako samostatný, bez ohledu na okolní snímky (předcházející, následující, připomeňme, že daný snímek je často realizován tak, že obsahuje jen rozdíl oproti předchozímu - predicted frame, nebo rozdíl oproti předchozímu i následujícímu - bidirectional predicted; to vše pak ukládá v rámci analýzy motion vektorů - systému určujícím pohyb objektů ve scéně - jak směr, tak i rychlost).

Analýza sub-bloků je ve VP8 prakticky shodná s i4×4 módem v x264 a analýza celých bloků s i16×16. Totéž platí i pro chroma predikci, ale například "mezistupeň" i8×8 z H.264 High Profile svůj ekvivalent ve VP8 nemá. Jason je zde hodně zklamán. Zatímco intra predikce H.264 je obecně ve specifikaci dobrá, prošla i tak za posledních 7 let pořádným vývojem a On2 ji prostě převzali, což není zrovna "gentlemanská praktika", Jason čekal něco trochu kreativnějšího. Každopádně tohle Jason považuje za patentovou bombu, která čeká na vybouchnutí. Spatial intra predikce v H.264 je chráněna patenty a On2 (tedy Google) tohle asi jen těžko obhájí.

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

Inter predikce se používá k odhadu obsahu bloků s přihlédnutím k předchozím snímkům videa. Hlavními součástmi tohoto procesu jsou referenční snímky (to jsou ty, které jsou ve videu uloženy celé, nikoli jen jako změna oproti předchozím/okolním) a vektory pohybu (motion vectors). Daný snímek je pak sestaven tak, že se vezme počáteční hodnota z referenčního snímku a zjistí se, jaký posuv pro danou část definují vektory pohybu, tím se získá finální pozice daného objektu/pixelu ve snímku.

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

VP8 podporuje 3 referenční snímky: předchozí, "alt ref" a "golden frame" a partitions (oblasti obrazu) s proměnnou velikostí. H.264 umí 16 referenčních snímků a oproti typům oblastí z VP8 (16×16, 16×8, 8×16, 8×8, 4×4) umí i flexibilní, kde každá 8×8 může být 8×8, 8×4, 4×8, nebo 4×4. Jisté rozdíly jsou i v interpolačních filtrech. VP8 pak nepodporuje B-snímky (to jsou ty, které se odkazují na předchozí i následující) a weighted prediction (váhovou predikci).

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

Interpolační filtrace ve VP8 je dle Jasona sice o něco lepší než v H.264, ale její implementace také bude o něco pomalejší (tj. náročnější na výpočetní výkon). Absenci B-snímků považuje za zabijáka VP8, dávají totiž 10 až 20% kompresní bonus při jen minimálním snížení výkonu (tj. minimálním nárůstu výpočtů potřebných pro zpracování videa). Absence B-snímků bude VP8 patrně stát více než cokoli dalšího.

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