Recenze  |  Aktuality  |  Články
Doporučení  |  Diskuze
Filmy a seriály, streamovací služby
Televize  |  Projektory
Audio a domácí kina
Multimediální centra  |  Ostatní
Svět hardware  |  Digimanie
Svět mobilně

Formáty obrazu videa

3.10.2001, Radek Jahoda, návod
Na tom, že možností uložení digitálního obrázku je nepočítaně, se asi všichni shodneme. Stačí se jen zamyslet a každý by vymyslel alespoň jeden jiný. V tomto by ale nastal brzy zmatek, a tak Microsoft přišel s myšlenkou tzv. FourCC, tedy Four Character Code (čtyřpísmenný kód), které označují jednotlivé formáty. Bylo to již v dávných dobách Windows 3.11, kdy byl uveden na svět formát AVI a rozhraní Video for Windows (zkráceně VfW).
Formáty

Nejprve se zkusme podívat na základní typy formátů nekomprimovaného videa a jak vůbec vznikly. Základním požadavkem bylo uložení tak, aby bylo ekvivalentní analogovému formátu. Budeme se zabývat pouze formátem PAL, i když pro digitalní zpracovaní se liší pouze počtem řádků a snímků za vteřinu - PAL a SECAM má 576 viditelných řádek a 25 smímků/s a NTSC 480 řádků resp. 29.97 sn/s - princip uložení v digitální formě je shodný. Všechny systémy se dále liší jen kódováním barev v analogové verzi, černobílý základ je stejný - je to jasová složka, barevná je pak namodulována s dvakrát nižší šířkou pásma - barva má tedy dvakrát nižší rozlišení než jasová složka a proto jsou velké kontrasty zatíženy i "barevnou duhou", při střídajících se svislých pruzích v obraze je pak vidět barevné moiré - to není způsobenou nízkou kvalitou tuneru, vychází to z principu přenosu obrazu (a barevné složky). Je viditelné jak na TV kartě v PC, tak na klasické "bedně". Novější televizory vyšší cenové kategorie se snaží tyto nectnosti skrýt.

Z tohoto také vychází základní formáty videa v PC. Před převodem do číslicové formy se nejprve oddělí jasová složka (Y) od barevné a barevná se rozdělí na dvě složky U a V jak ukazuje obrázek:




Následuje převod pomocí rychlých A/D převodníků, každá složka zvlášť, přičemž barevné složky se samplují poloviční frekvencí než jasová, protože informace v signálu stejně není. Většinou se ještě používá oversampling, tedy vzorkování vyšší frekvencí než potřebnou a následná digitální úprava do požadované velikosti. Ve výsledku pak máme pro jeden frame 576 řádků po 720 jasových a 360 barevných bodech, což odpovídá šířce pásma (rozlišení) normy PAL. Někdy se používá horizontální rozlišení 768 bodů, aby byla zachována velikost poměru stran jednoho bodu 1:1 (TV má poměr stran 4:3, ale 720:576=5:4 -> 768:576=4:3).

Máme tedy tři složky: jasovou Y a barevné U,V, tomuto formátu se pak říká YUV. Existuje spoustu možností, jak uložit tyto složky do paměti - po bodech (YUVYUVYUV...), po řádcích, po plochách atd. Zdigitalizovaný formát je vždy ve formátu YUV 4:2:2, co znamenají tato čísla, si povíme později. S těmito formáty se ale pracuje špatně, protože je nelze jednoduše sčítat, průměrovat apod., tedy editovat. Převádí se proto do formátu RGB, kdy se přepočítá jasová a barevné složky na známou trojici červená R, zelená G a modrá B. Vše se už dělá digitálně, což je jednodušší a kvalitnější - samozřejmě hardwarově.

Formáty YUV

Formáty YUV se dělí do dvou skupin - packed a planar, lišící se uložením jasové a barevná složky v paměti. Formáty packed mají uloženy všechny složky YUV do tzv. makropixelů (shluk několika pixelů, např. 4) a jdou po sobě, planar formáty mají uloženy všechny složky zvlášť, tvoří tedy tři virtuální plochy, které jsou ve výsledku složeny dohromady.

Dále se pro YUV formáty vžilo tříčíselné označení, např. YUV 4:2:2. Udává vždy poměr mezi počtem barevné složky vůči jasové a někdy i počet bytů na makropixel (někdy se to ale nedodržuje). V tomto případě je poměr 4:2 a barevná složka tedy obsahuje polovinu bodů vůči jasové - na dva jasové body odpovídá pouze jeden barevný. Podobně YUV 4:1:1 obsahuje pouze čtvrtinu barevné složky oproti jasové a YUV 4:4:4 má rovnocené kódování jasové i barevných složek - měla by tedy být kvalitnější, jenže se přepočítává z YUV 4:2:2 a žádná informace navíc zde tedy není (výhodné pouze pro zpracování, tam se ale používá RGB32).

Existuje mnoho způsobů, jak jsou uloženy v paměti a proto každému způsobu (formátu) byl přiřazen identifikační znak, tzv. FourCC - Four Character Code. Ve čtyřech bytech (tedy jednom 32-bitovém slovu) jsou pomocí ASCII tabulky přiřazeny znaky odpovídající zkratce. Tyto zkratky (a tedy i kódy) jsou registrovány Microsoftem, pokud tedy chcete zaregistrovat svůj, obraťte se na ně ... Jednotlivé formáty lze mezi sebou libovolně převádět, ne vždy jde ale o bezeztrátový převod - lišit se mohou počet bitů na pixel (počet dostupných barev) a kódování (poměr barvy k jasu).

Teď už seznam používaných FourCC kódů, nejprve packed formáty:

FourCCHex kódKódováníPočet bitů na pixelPoznámka
YUY2325955594:2:216Macropixel obsahuje dva pixely v jednom 32bitovém slově - 2x Y a 1xUV, spolus UYVY nejpoužívanější
UYVY595659554:2:216Stejný jako YUY2, pouze s jiným sledem YUV složek.
UYNV564E59554:2:216Přejmenovaný UYVY, registrovaný firmou NVidia kvůli řešení problému více overlay bufferů stejného formátu.
YUNV564E55594:2:216Přejmenovaný UYVY, registrovaný firmou NVidia kvůli řešení problému více overlay bufferů stejného formátu.
cyuv767579634:2:216Stejný jako UYVY, pouze řazení řádků naopak - spodní řádek nejdříve
Y41P503134594:1:112Macropixel obsahuje 8 pixelů ve 3 32-bitových slovech. Někdy nazýván BTYUV.
Y41T543134594:1:112Stejný jako Y41P, ale nejnižší bit složky Y značí průhlednost (transparency)
Y42T543234594:2:216Stejný jako UYVY, ale nejnižší bit složky Y značí průhlednost (transparency)
V422323234564:2:216Stejný jako YUY2
CLJR524A4C434:1:18Macropixel obsahuje 4 pixely ve 32-bitovém slově. Y složky mají 5 bitů a UV složky jsou 6bitové.
YUVP505655594:2:224Jako YUY2, ale vyšší počet bitů na pixel.
UYVP505659554:2:224Jako UYVY, ale vyšší počet bitů na pixel.
Y211313132592:1:18Sampluje pouze každé druhé Y a každé čtvrté UV
Y800303038598:0:08Obsahuje pouze Y pro monochromatický obraz

A planární formáty:

FourCCHex kódKódováníPočet bitů na pixelPoznámka
YV12323156594:1:112Nejprve 8bitový Y (celý obraz) následovaný 2x2 subsamplovaný UV (horizontální i vertikální směr). Používá se u MPEG-1/2 formátů.
YVU9395556598:1:19Nejprve 8bitový Y následovaný 4x4 subsamplovaný UV
I420303234494:1:112Nejprve 8bitový Y následovaný 2x2 subsamplovaný UV
IYUV565559494:1:112Shodný s I420
CLPL4C504C434:1:112Registrovaný firmou Cirrus Logic, podobný YV12
IF09393046498:1:19.58bitový Y plane následovaný 4x4 subsamplovaným UV s delta kódováním (rozdíl vůči předchozímu pixelu)
Y800303038598:0:08Obsahuje pouze Y pro monochromatický obraz

Jak je vidět, nejčastějšími formáty a také nejpoužívanějšími jsou packed formáty s kódováním YUV 4:2:2 - a mezi nimi YUY2 a UYVY. Tyto se také nejvíce používají pro hardwarový overlay na grafických kartách - je to buffer v paměti graf. karty, obsahující definici obrazu a dále je hardwarově zpracovám pro zobrazení (změna velikosti, jas, obtékání, transparence apod.), což ulehčuje procesoru při zobrazování. Pro overlay buffery se nepoužívají RGB formáty.

Formáty RGB

Formáty RGB byly zavedeny pro snadnější práci s obrazem. Obsahují tři barevné složky - červenou, zelenou a modrou - které tvoří vždy jeden pixel. Není zde tedy definováno subsamplování barevné složky, ostatně jasová a barevná složka zde nejsou odděleny. Jednotlivé formáty se prakticky liší jen počtem bitů na pixel.

Převod mezi YUV a RGB formáty lze provést příslušnými vzorci. Pro RGB->YUV:

Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
U (Cb) = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
V (Cr) = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128

YUV->RGB:

R = 1.164(Y - 16) + 1.596(Cr - 128)
G = 1.164(Y - 16) - 0.813(Cr - 128) - 0.391(Cb - 128)
B = 1.164(Y - 16) + 2.018(Cb - 128)

Seznam používaných FourCC kódů pro RGB formáty:

FourCCHex kódPočet bitů na pixelPoznámka
BI_RGB000000001,4,8,16,24,32Základní formát pro kódování BMP souborů a obrazu videa. Podle počtu bitů na pixel se dále označují RGB8, RGB24, atd.
RGB324247521,4,8,16,24,32Identické BI_RGB
BI_RLE8000000018Komprimovaný obraz pomocí metody Run Length Encoding plus možnost skoku mezi pixely a další vylepšení. Princip lze ho najít v API od Microsoftu, používá se jen u statických snímků (BMP)
RLE838454C528Indentické BI_RLE8
BI_RLE4000000024Komprimovaný obraz pomocí metody Run Length Encoding. Princip metody neznám, lze ho ale najít v API od Microsoftu, používá se jen u statických snímků (BMP)
BI_BITFIELDS0000000316,24,32Jako RGB, ale s libovolným kódováním uvnitř pixelů a sledem pixelů
RGBA4142475216,32Jako RGB, ale navíc je alpha kanál a kódování jako u BI_BITFIELDS
RGBT5442475216,32Jako RGB, ale navíc je kanál určující průhlednost (transparency) a kódování jako u BI_BITFIELDS

Těchto formátů již není tolik, ono ani není příliš možností, jak tímto způsobem uložit obraz. Některé metody jsou již složitější a umožňují určitou dávku komprese bez znatelné ztráty kvality (oproti YUV, kde k redukci velikosti dat docházelo odstraněním části informace).