Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

Komprese pro video

23.3.2001, Emil Pavelka, zpráva
Komprese pro video
Komprese pro video může být bezeztrátová (lossless) s vynikajícím výstupem, která ovšem nedosahuje velkých kompresních poměrů. Nebo ztrátová (lossy), kde mohou být kompresní poměry voleny v podstatě libovolně, ale obraz je adekvátně tomu degradován.
Komprese pro video může být bezeztrátová (lossless) s vynikajícím výstupem, která ovšem nedosahuje velkých kompresních poměrů. Nebo ztrátová (lossy), kde mohou být kompresní poměry voleny v podstatě libovolně, ale obraz je adekvátně tomu degradován.

V oblasti komprese se můžete setkat s pojmy spatial a temporal compression. Jaký je mezi nimi rozdíl?

Spatial - prostorová - pokud má skupina bodů v určité oblasti podobnou barvu, jsou jejich hodnoty, nesoucí informace o barvě nahrazeny jejím průměrným odpovídajícím odstínem. Čím větší rozptyl pro zprůměrování povolíme, tím dosáhneme většího stupně komprese a zároveň degradace původního obrazu.

Temporal - sledujeme změny v po sobě jdoucích snímcích. Pokud nejsou tyto změny příliš rozsáhlé, stačí nám zaznamenat jen rozdíly. Tady nám tedy velmi závisí na rychlosti a rozsahu změn scény.
Navzájem se nevylučují, lze je tedy použít současně (po sobě).

RLE - Run Lenght Encoding - je založeno na tom, že hodnoty určující odstín sousedních bodů v obraze, bývají často shodné. Princip využití této skutečnosti je potom takový, že místo AAAAA zapíšeme 5A. V pokročilejším RLE to může být i například namísto ABABAB jen 3AB. Jde o bezeztrátovou kompresi, pokud ovšem navíc nevyhodnocujeme sousední body tak, že je při určité zanedbatelné odchylce považujeme za shodné. Z dříve uvedeného je patrné, že tuto metodu je vhodné aplikovat po spatial kompresi.

MJPEG - Motion JPEG (Joint photographics expert group). Všichni tenhle formát jistě znáte z webu. Ano, je to ten stejný JPEG. Jde tedy o ukládání sekvence kompletních, samostatně komprimovaných snímků (každý půlsnímek zvlášť, takže nemá problémy s prokládáním).

Nejdříve se redukují barvy. To se děje zprůměrováním sousedních dvojic, nebo čtveřic bodů. Tak ušetříme třetinu nebo polovinu kapacity pro barvonosné informace. Jasová složka zůstává nedotčena. Pak jsou obrazová data brána po čtvercích 8x8, na kterých je provedena diskrétní kosinová transformace (DCT). Výsledkem jsou frekvenční koeficienty které se podle požadovaného stupně komprese vydělí kvantizačními konstantami, které jsou dále závislé na významu jednotlivých výsečí obrazu. Celá záležitost není zrovna jednoduchá, ale mi ji nemusíme přesně rozebírat. JPEG je charakteristický mírným zvlněním obrazu na hranách. Zvětšíte-li si JPEG, pak krásně rozpoznáte jednotlivé čtverce 8x8 a i to, že jejich levý horní roh nese nejpřesnější informaci.

Při nastaveném stupni komprese 8:1, což odpovídá přibližně kvalitě JPEGu 95% je vizuální výsledek stále velmi dobrý. Nastavitelný kompresní poměr se u videa většinou pohybuje mezi 4:1 až 16:1. Při kompresi 6.6:1 máme datový tok 3 MB za sekundu a je po problémech. Kvalita se jeví jako dobrá a díky tomu, že to jsou to v podstatě samostatné snímky, se dá střih provést s přesností na jeden snímek.

Byl to kdysi můj oblíbený formát. Používal jsem jej s hardwarovým kodekem od společnosti Zoran a umožňoval mi, na z dnešního pohledu vcelku směšném počítači (P166/64 MB RAM) kvalitu obrazu vskutku dobře přijatelnou, spojenou se stravitelnou rychlostí zpracování. Čas ovšem pokročil. Stroje jsou silnější. Existují i softwarové kodeky MJPEG. Jako příklad lze uvést PICvideo nebo Morgan. Jejich kvalita je dobrá. Máte-li tedy výkonný stroj, nepotřebujete nutně hardwarový kodek.

Kde je tedy problém? MJPEG není běžně podporován, takže je problematicky přenositelný (i když to jde). Ale hlavně. Toto není nejlepší formát pro převod výsledného nastříhaného videa do nějakého MPEG formátu (ať už 1,2 nebo 4) a tedy ani DV. To nám může vadit ve chvíli, kdy se rozhodujeme kam s ním (pro přímé uložení v domácích podmínkách je stále příliš velký). Když se chyby těchto kompresí sečtou (MJPEG+MPEG) dojde již k citelnému zhoršení kvality.

Huffmanovo kódování. To je založeno na tom, že máme tabulku, kde jsou různým datům přiřazeny zástupné kódy, podle četnosti jejich výskytu, přičemž nejčastěji se vyskytující data mají nejkratší kódy. Celý tok dat je tedy zapsán v těchto zástupných kódech. Používá se i v kombinaci s jinými technikami, jako součást jiných kodeků (je to například poslední krok MJPEGU). Volně dostupný bezeztrátový softwarový kodek, využívající tohoto principu - HuffYUV dosahuje komprese cca 2.4:1 s datovým tokem pod 9 Mb za sekundu, což zvládají i moderní EIDE disky. Výsledná kvalita je potom bez ztráty kytičky. Vyžaduje ovšem alespoň Celeron 400 MHz a rychlé disky. Taky je vhodné, pokud se dostanete přímo k YUY2 zdroji (z důvodu šetření výkonu systému).

Považuji jej za dobrou volbu při práci s analogovým signálem. Pro použití efektů, filtrů a pro převod do MPEG formátu dává skvělou kvalitu výsledného videa. Není to formát vhodný pro výsledek ale pro zdroj k dalšímu zpracování.

Audio je vhodnější při analogovém videu zachytávat bez komprese, můžete se tak vyhnout spoustě problémů se synchronizací, kterým ušetřený prostor neodpovídá (projekt zkomprimujete až po střihu).

Tak, to bylo k analogovému videu, u kterého bych se chtěl ještě zmínit o velmi dobrém volně šiřitelném programu pro zachytávání, kterým je VirtualDub autora Avery Lee. Má spoustu možností, filtrů a umí při zachytávání segmentovat soubory.