WebP: Google VP8 pro kompresi obrázků a fotografií
Kapitoly článků
Co je WebP zač?
Po technické stránce je WebP v podstatě klíčový snímek VP8 videa. Principielně je to jasné, protože jde o jeden snímek, nemůže to být ani P (predicted), ani B (bi-predicted) snímek, nýbrž I (intra). Kompresní mechanismus je plně založen na VP8, nebudeme se tedy k němu vracet a odkážeme vás na analýzu VP8 sepsanou předním vývojářem x264.
WebP používá logicky příponu souborů .webp, na internetu se identifikuje jako "image/webp" a jako systém metadat používá klasicky RIFF (Resource Interchange File Format, jako třeba AVI).
Analýza WebP v podání vývojáře x264
Tak jako u WebM, i v případě WebP se okamžitě po uvolnění podíval na jeho schopnosti Jason Garrett-Glaser, přední vývojář x264. Jeho porovnání zahrnuje právě i kompresi statických obrázků pomocí x264 a také Ogg Theora.
A začíná pěkně zostra: WebP totiž nepodporuje všechny schopnosti starého JPEGu. Barvy totiž kóduje pouze v 4:2:0, zatímco JPEG podporuje i 4:2:2 a 4:4:4. Podle Jasona Google neuvažuje o rozšíření možností WebP, proto toto můžeme brát jako faktickou definicii standardu. Přiznejme si však, že pro běžné použití, na nějž WebP cílí, tedy fotografie na webu, to zas tak významný problém nepředstavuje (ale je to rozhodně škoda).
Jak zaznělo v analýze VP8, tak jeho intra predikce je svým způsobem shodná s tou, kterou definuje H.264 standard. V čem, ale VP8, potažmo tedy i WebP zaostává, je absence i8x8 režimu, VP8 podporuje pouze i4x4 a i16x16 - a máme z hlediska komprese problém nejen u videa, ale i u statické fotografie.
Srovnání jednotlivých formátů se zúčastnili:
-
x264 s nastavením
--tune stillimage --preset placebo -
VP8 prezentované kvalitnější než Googlovou implementací libvpx s nastavením
--best - JPEG komprimovaný skrze ffmpeg a poté prohnaný bezztrátovým zmenšovadlem JPEGů zvaným jpgcrush (jistě existují lepší JPEG kompresory, ale berme to zkrátka tak, že Jason použil tento postup)
Pro test byl použit 200. snímek z Park-joy videa, výsledné velikosti souborů byly 154, resp. 155, resp. 156 kB, Jason je prezentoval převedené do bezztrátového PNG (neboť statický x264 a WebP nemají zrovna moc podporu v prohlížečích).
Svůj dojem již máte, Jason to vidí tak, že libvpx je nejhorší z testované skupiny. Ale proč? VP8 má přece daleko, opravdu daleko lepší kódování entropie (podrobně vysvětleno v článku o WebM) než JPEG, má lepší intra predikci než JPEG, tak kde je problém?
Jak již bylo řečeno, VP8 neumí 8x8 tranformaci, proto musí použít 4x4 a ztratí tak víc detailů, ale to není to hlavní. Dle Jasona prostě VP8 optimalizuje na PSNR (peak signal-to-noise ratio alias špičkový poměr signálu k šumu - dogma, kterým se zaklíná většina testerů porovnávajících kvalitu video formátů z hlediska komprese) a přitom ignoruje veškeré psychovisuální záležitosti, tedy to, jak subjektivně a nedokonale vnímá obraz lidské oko a jak flexibilně to pak mozek dekóduje. Pro srovnání ukazuje, co se stane s nejkvalitnějším výstupem z x264, když místo na kvalitu výstupu komprimujete s nastavením pro co nejlepší PSNR volbou
Optimalizace na PSNR "pošle do kytek" visuální kvalitu i u H.264. Jason k tomu dodává pouze to, co "tluče do hlavy" čtenářům svého blogu stále dokola: kvalita encoderu je důležitější než specifikace formátu samotná. x264 je stále H.264 bez ohledu na to, jestli je použit přepínač "PSNR", nebo "psy", ale rozdíl v kvalitě výstupu je obrovský.
Na závěr tu máme pro srovnání ještě výstup z Ogg Theora, a to z nejkvalitnějšího buildu známého jako Theora 1.2 (Ptalarbvorm) - jeho schopnosti ve vidu posuďte sami na vlastní stránce. Právě o tom Ptalarbvorm build je: přidává Theoře psychovisuální optimalizace a rozdíl je obrovský (a to Theora zakládá na VP3, o mnoho generací starším formátu!).
Dovolte nám malou poznámku na závěr: Jasonův test berte s určitou rezervou. Jako zdroj pro srovnání je totiž použit kus "nějakého videa", poněkud nám uniká, proč Jason nepředhodil encoderům jako zdroj nějakou pořádnou fotografii z D-SLR exportovanou z RAWu třeba do PNG, prostě kvalitní bezztrátový zdroj s vysokým rozlišením. Snímek z videa o rozlišení 1920×1080 se nám k posuzování kvality komprese obrázků zdá jako nevhodný a nedostatečný.