NOVINKY:

29. srpna 2011 (09:00)
Vyšla dlouho očekávaná distribuce Mandriva Linux 2011. Nově se soustředí pouze na prostředí KDE a obsahuje vylepšení od ROSA labs.
[Představení hlavních novinek] [Jak upgradovat z 2010] [Poznámky k vydání]
[Download] [CZ mirror] [Errata]

další novinky >>

Novinky jinde:
Root | Abclinuxu | Linuxsoft

Vyhledávání:

 


Proč používat Linux  Wikipedie - největší otevřená encyklopedie na internetu v češtině.
 MENU: Články a návody | Jak na to | Překlady | Odkazy | Obrázky z Linuxu  | Download |

VIDEO: TEORETICKÁ PŘÍPRAVA

Obsah:

 

Základy MPEG-4

Volný překlad části The Unofficial XviD FAQ.

Zkomprimovat dvouhodinový film v plné kvalitě do něčeho, co se vejde na jedno CDčko samozřejmě vyžaduje uplatnění nějaké seriózní kompresní taktiky. MPEG-4 na to jde částečně tak, že odstraní informace, které stejně nevnímáme a částečně používá transformaci skutečných surových obrazových dat na přibližné matematické hodnoty. Pro nás, obyčejné smrtelníky, je přibližná hodnota dostatečná a rozdílu mezi originálem a výsledkem komprese si ani nevšimneme (tedy alespoň teoreticky).

Nejprve je barevný rozsah (color space - způsob, kterým jsou obrazové body, jejich barva a jas uloženy v každém snímku) převeden ze své původní formy do barevného rozsahu zvaného YV12. Lidské oko je méně citlivé v barevné (taktéž zvané Chroma) oblasti a mnohem citlivější v jasové (nebo-li Luminance nebo Luma) oblasti, takže myslitelé z MPEGu si sedli kolem stolu a rozhodli, že barevná Chroma informace je méně důležitá než jasová Luma informace. Výsledkem je, že zatímco hodnota jasu se ukládá pro každý obrazový bod (pixel) zvlášť, barevná Chroma hodnota je ukládána pro 4 pixely společně. (Chroma hodnota sestává ze dvou oddělených jednobajtových hodnot).

Následující krok komprimačního procesu je pozoruhodně popsán v Compression FAQ @ www.faqs.org:

Základní princip spočívá v předvídání směru pohybu mezi snímky v čase a následném použití DCT (discrete cosine transforms = diskrétní cosinové transformace » popis) k organizaci přebytečných částí prostoru. DCT transformace se provádějí na blocích 8x8 a předvídání směru v jasovém luminance (Y) kanálu na blocích 16x16.

Následující krok procesu je tedy odvozen z poznatku, že mnoho informací v obrazovém záznamu se dá považovat za "statické", pokud vezmete správným způsobem v úvahu pohyb těchto informací.

Pro ilustraci vezmeme televizní přenos ze závodů grand prix formule 1. Většina obrazu sestává z aut, které se ve výřezu televize mírně pohybují, jak se kameraman snaží udržet auto (auta) ve středu pohledu. Obrázek auta se v celém záběru téměř nemění (možná chvílemi ztrácí ostrost), ale jaksi "kmitá" kolem středu.

V praxi se ukazuje, že většina video záznamů ze skutečného života spadá do této kategorie. Pokud správně zachytíte pohyb, komprese obrazu může být velmi vysoká a stále přijatelně přesná.

Potom, co je určen směr pohybu, se ke kompresi texturové informace použije technika zvaná Discrete Cosine Transformation nebo-li DCT. (Při dekódování se tento proces obrátí a říká se mu Inverse Discrete Cosine Transformation nebo-li IDCT).

Kodek rozdělí obrázek na bloky velikosti 8x8 a na ně aplikuje DCT. Čtyři tyto 8x8 bloky jsou seskupeny dohromady a vytvoří jeden makroblok. Informace v těchto blocích rozhoduje o úrovni detailů, která může být vysoká nebo nízká. Dobrá analogie vysoké a nízké úrovně detailů ve filmu jsou dvě stránky knihy, kde jedna je zcela popsaná a druhá zcela prázdná čistá stránka. Samozřejmě, že popsaná stránka má mnohem více detailů než čistá.

DCT vezme detaily z těchto bloků a použije na ně techniku zvanou kvantovací (quantization) proces. Bloky o velikosti 8x8 potom už neobsahují pixely, ale frekvenční hodnoty. Vysoká frekvence představuje vysokou úroveň detailů, nízká frekvence nízkou. Tyto frekvence jsou následně přepočítány s použitím kvantovací matrice, která kodeku určuje, které frekvence se vypustí a kdy. To je dost složitý proces a vyžadoval by složité vysvětlení. Jedno pěkné najdete tady (forum na doom9 - anglicky).

Když je obraz pomocí DCT převeden do detailových signálů, jsou tyto signály ořezány (coefficient cutting), aby byly menší. Čím větší část signálu odříznete, tím více detailů ztratíte a více artefaktů (čtverečků, ringingu čili moskytového šumu) dostanete. Kvantizér (quantizer) je faktor odstraňování detailů (DivX3/Nandub říká kvantizéru DRF). Vyšší kvantizace znamená ořezání většího množství detailů a nižší kvalitu obrazu. Takže například, kvantizér kolem 2 znamená, že ponecháme skoro všechny detaily, zatímco kvantizer s hodnotou pohybující se na úrovni 31 vypustí skoro všechno.

Další důležitá věc, se kterou byste se měli seznámit je, že v MPEG-4 existují různé druhy snímků. Většinou se jim říká klíčové snímky (neboli keyframes, I-frames, IVOPs nebo INTRA-frames), předvídané P-snímky (P-frames, Predicted frames, PVOPs, také inter-frames) a obousměrné B-snímky (B-frames, BI-directional frames). Jsou i další druhy snímků, ale většinou se nepoužívají.

  • Klíčové snímky (keyframes) si vystačí sami. Jsou v nich zakódovány všechny obrazové informace. Klíčový snímek můžete prohlížet, aniž byste cokoliv věděli o ostatních snímcích. Něco jako fotografie.
  • P-snímky obsahují pouze rozdíly proti předchozímu snímku. Řekněme, že v předchozím snímku máme obrázek semaforu a v aktuálním snímku se přepne z červené na zelenou. Náš snímek bude obsahovat jen změnovou informaci, což je přepnutí červené na černou v horní části obrázku a černé na zelenou v dolní části. To samozřejmě znamená, že zakódovat se musí mnohem méně informací, takže P-snímky jsou obyčejně o hodně menší než klíčové snímky. P-snímky prostě říkají kodeku, že všechny ostatní informace, které potřebuje, jsou v předchozím snímku, který je třeba vzít jako základ. Předchozí snímek může být klíčový nebo jiný P-snímek. Typický sled snímků vypadá nějak takhle: I–PPPPP–I–PPPPP–I–PPPPP ("I" jsou klíčové snímky).
  • B-snímky jsou obousměrně předvídané snímky, které neodkazují jen na předchozí snímek, ale i na následující (pokud je následující snímek klíčový). Kodek se pokouší rozhodnout, jestli bude lepší získat údaje z předchozího snímku, z následujícího, nebo kombinovat oba dva. Pokud snímek nakonec odkazuje jen na svého předchůdce, stane se P-snímkem, jinak je z něj B-snímek. Protože B-snímky mají na vybranou ze dvou možností (na rozdíl od P-snímků), mohou volit tu nejúspornější a následkem toho jsou ještě menší než P-snímky.

 

Co je to kodek

K nacpání dvouhodinového filmu na jedno CDčko je zapotřebí opravdu dobrého kompresního algoritmu. Ten musí zvládat kompresi, ale i dekompresi, tj. také v reálném čase načíst, co je sbaleno, a vyrobit z toho data pro zobrazení. Algoritmus je prováděn softwarem, který komprimuje a dekomprimuje, a proto se mu říká kodek (anglicky samozřejmě codec = compressor decompressor). Komprese může být ztrátová a bezztrátová. Bezztrátová umožňuje obraz obnovit v původní dokonalé podobě, ale má samozřejmě nízký poměr komprese. XviD je vyspělý ztrátový kompresní algoritmus založený na MPEG4.

 

Historie XviD

V roce 1999 byli u Microsoftu názoru, že je třeba prorazit do slibných oblastí distribuce videa po síti a vypustili do světa tři kodeky založené na MPEG-4. Jak je u této firmy zvykem, použití těchto kodeků bylo možné jen v úplně novém a s ničím neslučitelném formátu ASF. To se pochopitelně nesetkalo s přílišným úspěchem, a tak se kodek V3 stal předmětem zájmu "zlých hackerů" a po násilném zásahu se dal, pod názvem DivX 3, použít v .AVI souborech. Nelegální DivX 3 se stal velmi populárním a dodnes má své příznivce. Microsoft pod tlakem okolností nakonec V3 uvolnil, ale už bylo pozdě.

V lednu 2001 odstartoval za účelem legalizace projekt OpenDivX, který si dal za cíl napsat zcela od začátku úplně nový, otevřený MPEG-4 kompatibilní kodek. Původci této snahy byli staří známí "zlí hackeři". S tou otevřeností to ale nebylo moc horké, protože nakládání se zdrojovými kódy bylo omezeno a zápis do CVS byl povolen jen vybraným lidem. Sparky, jeden z programátorů, do projektu přispěl novým enkódovacím jádrem encore2, které bylo o hodně lepší než původní a někteří usoudili, že by se na tom dalo vydělat. Zlanařili Sparkyho, kód byl uzavřen, Encore2 bylo z CVS bez varování odstraněno a stalo se základem komerčního DivX 4. Tento podraz rozezlil ostatní programátory, kteří byli názoru, že jejich práce byla zneužita. Použili všechny části kódu, které ještě měly vyhovující licenci a v projektu pokračovali. Následně byl všechen kód původního OpenDivX nahrazen a vznikl XviD, který je pod veřejnou licencí GPL.

 

Proč používat zrovna XviD

Proč tedy používat XviD a ne DivX, nebo něco jiného? Zjednodušeně řečeno: protože XviD je stejně dobrý, nebo lepší než ostatní ztrátové kodeky, je zcela otevřený a zdarma.

 

Části tohoto článku se dostaly do encyklopedických hesel XviDKodek v české Wikipedii.


» [Celá sekce VIDEO]

 

Verze tohoto dokumentu:

  • 09.06.2004 - původní verze, Základy MPEG-4
  • 23.06.2004 - drobné úpravy v popisech druhů snímků
  • 30.06.2004 - přidáno: Co je to kodek, Historie XviD, Proč používat zrovna Xvid

 


© Aleš Tošovský - linux.tosovsky.info