MPEG-1,2 video


Na tejto stránke by som sa chcel venovať základným princípom a postupom, ktoré sú využívané pri kompresii videa v štandardoch MPEG-1,2. Nebudem sa tu venovať rôznym formátom video signálu, televíznym normám a podobne, ako ani kódovaniu zvuku, ktorý je neoddeliteľnou súčasťou dátového toku MPEG. Kódovaniu zvuku v štandardoch MPEG-1,2 sa venujem na inej stránke.

Krátka špecifikácia štandardov MPEG

MPEG-1 MPEG-2

(Pozn. Pre úplnosť treba dodať, že sú definované aj štandardy MPEG-4 a MPEG-7)

Prečo komprimovať?

Najlepšie si to vysvetlíme na príklade digitálnej televízie.
DVB_satelit Analógový signál v norme PAL vystačí s dátovým tokom a prenosovou rýchlosťou okolo 20Mbit/s a teda s prenosovým pásmom širokým približne 6 MHz. U digitálneho dátového toku objem vzrastie natoľko, že vyžaduje prenosové rýchlosti okolo 200 až 300 Mbit/s a u širokuhlého obrazu s vysokým rozlíšením HDTV až 1,2 Gbit/s. Digitalizácia celého televízneho reťazca t.j. od štúdia až po koncového užívateľa sa môže ubereť len dvoma smermi: radikálne zvýšime kapacitu záznamových médií a šírku prenosového pásma alebo zredukujeme objem zapisovaných a prenášaných dát. Jednoznačne výhodnejšia je druhá možnosť. Podľa projektu digitálneho vysielania DVB (Digital Video Broadcasting) ktorý prevzal kompresný štandard MPEG-2, je možné znížiť dátové toky pri štandardnej televízii (SDTV) odpovedajúcej svojou kvalitou norme PAL na 3-4 Mbit/s a pri HDTV na 20-40 Mbit/s . Úspory sú nesporné. Napríklad u satelitov doteraz mohol každý transpondér prenášať iba jeden kanál analógovej televízie, teraz môže šíriť dva až šestnásť kanálov digitálnej televízie podľa požadovanej kvality (pozri obrázok). O výhodách digitálnej televízie sa snáď netreba ani zmieňovať (lepšie využitie frekvenčného pásma, menšia citlivosť voči rušeniu, čistejší obraz, širokouhlý obraz 16:9, služby sprostredkované cez spätný kanál,.... )

Základnou myšlienkou pri kódovaní videa je zníženie:

Skupina snímok GOP (Group Of Pictures)

skupina_gop

V MPEG dátovom toku rozoznávame tri druhy snímok, ktoré sú organizované v skupinách GOP.

Snímky I (Intraframes) - sú kódované iba priestorovo pomocou DCT bez potreby informácií z predchádzajúcich či nasledujúcich snímok, identicky ako je tomu pri štandarde JPEG. Snímky I slúžia na priamy prístup do prúdu obrázkov MPEG. Znižujú celkový kompresný pomer, pretože ich kompresný pomer je najnižší zo všetkých troch typov snímok.
Snímky P (Predicted) - sú kódované pomocou jednosmernej (doprednej) predikcie. Teda aktuálna snímka P je zakódovaná vzhľadom k jej vzťahu k predchádzajúcej snímke typu I alebo B. Kompresný pomer dosahovaný pre snímky P je výrazne vyšší ako pri snímkach typu I. Jednosmernou predikciou znížime dátový tok asi dvojnásobne.
Snímky B (Bidirectional) - sú kódované pomocou obojsmernej predikcie. Aktuálna snímka je zakódovaná pomocou predchádzajúcej a nasledujúcej referenčnej snímky typu I alebo B. B snímky dosahujú najvyšší stupeň kompresie a zmenšujú výsledný dátový tok asi osemnásobne.

Zo spôsobu akým sú kódované snímky P a B, musí byť poradie dekódovania iné ako poradie pri kódovaní. Sled snímkou pri dekódovaní je znázornený na obrázku. Tak napríklad štvrtá snímka typu P musí byť dekódovaná pred snímkami typu B (2,3). Podiel snímok I,P a B v dátovom toku MPEG má vplyv aj na "charakter" videa. Napr. ak je potrebné umožniť rýchly prístup k obrázkom je najlepším riešení zakódovať celé video ako postupnosť I snímok, tím sa MPEG stane identický s M-JPEG. Naopak, pokiaľ chceme dosiahnuť vysoký kompresný pomer, môžeme ho dosiahnuť iba vysokým podielom B snímok.

Základnou jednotkou kódovania vo vnútri snímku (I,P alebo B) je makroblok. Každý makroblok sa skladá zo 4 jasových blokov 8x8 spojených do jedného celku 16x16 bodov a dvoch blokov 8x8 chrominančného rozdielového signálu Cb a Cr. Spôsob akým sa kódujú makrobloky v danej snímke závisí od typu snímky (I,P a B). Ako už bolo spomenuté, časovú redundanciu redukujeme tak, že budeme prenášať a kódovať iba rozdiely medzi snímkami. Toto realizujeme pomocou DPCM, ktorou vytvárame rozdiel medzi súčasnou a predchádzajúcou snímkou. Stav predchádzajúcej snímky je predpoveďou pre aktuálnu snímku, ktorá je kódovaná rozdielom od predchádzajúcej snímky, čo predstavuje doprednú predikciu využívanú pri snímkach P. Ak predpovedáme súčasnú snímku na základe rozdielu súčasnej snímky pomocou predchádzajúcej (dopredná predikcia) a nasledujúcej (spätná predikcia) vzniká obojsmerná predicia používaná pri snímkach typu B. Rozdiely medzi snímkami sú zaznamenané pomocou DPCM a následne spracovávané transformačným stratovým kódovaním založenom na DCT a tvoria tak hybridné komprimačné kódovanie.

Tvorba snímok P a vektorov pohybu

vektor_pohybu detail

Pri vytváraní snímok pomocou DPCM je potrebné vytvoriť rozdiel v hodnotách vzoriek na odpovedajúcich si miestach pre všetky makrobloky jak v snímke práve kódovanej tak aj v predchádzajúcej. Oveľa účinnejší spôsob kompenzácie pohyby dvoch časovo susediacich snímok je odhad a kompenzácia pohybu pomocou tzv. vektoru pohybu. Princíp spočíva v tom, že makroblok je zakódovaný pomocou vektoru pohybu, ktorý odhadne jeho predpokladané hodnoty na základe predchádzajúcej referenčnej snímky typu I alebo P. Potom nieje potrebné vytvárať rozdiely sebe odpovedajúcich miest v obraze. Úlohou odhadu pohybu je nájsť najlepšie vyhovujúci makroblok v dostupných referenčných snímkach I alebo P vzhľadom na kódovaný makroblok v aktuálnej snímke. Najlepšie si tvorbu vektorov pohybu vysvetlíme na príklade na obrázku. V aktuálnej snímke Sn chceme kódovať makroblok označený ako N, ktorý svojím obsahom odpovedá makrobloku M z predchádzajúcej snímky Sn-1 a vznikol pohybom trojuholníku. Dôležité je poznamenať , že makroblok sa nehľadá v celej predchádzajúcej snímke, ale iba vo vyhľadávacej oblasti označenej čiarkovane, pretože vyhľadávanie v rámci celej snímky by bolo výpočtovo nesmierne náročné. Makroblok hľadáme v oblasti veľkosti +/- 16 pixelov horizontálne a +/- 8 pixelov vertikálne vzhľadom na kódovaný makroblok N. Vyhľadávanie sa robí s presnosťou na 1/2 pixelu a dosahuje sa interpoláciou medzi susednými pixelmy. V našom príklade algoritmus našiel v prehľadávanej oblasti makroblok M, ktorý svojím obsahom odpovedá kódovanému makrobloku N. Výstupnou informáciou je potom iba hodnota vektora pohybu (diferencia dSn=0 sa neprenáša!). Vektor pohybu je spoločný pre 4 jasové bloky a 2 chrominančné bloky a je umiestnený v záhlaví vrstvy makrobloku. V prípade väčších rozdielov medzi makroblokmy (pokiaľ je prekročená určitá hranica) sa vytvára rozdielový makroblok, čo je matica rozdielov navzájom si odpovedajúcich vzoriek. Tento rozdielový makroblok je potom transformačne kódovaný a kvantovaný obdobne ako pri snímkach I. V prípade, že sa vo vyhľadávacom poli nenájde žiadny makroblok, ktorý by súčtom hodnôt 16x16 neprekračoval hornú hranicu tolerancie rozdielu, nedochádza k prenosu makrobloku pomocou vektorov pohybu a makroblok sa nekóduje diferenčne, ale sa spracovávajú skutočné hodnoty ako u snímkov I. Pri statickom obraze je rozdiel odpovedajúcich si hodnôt v makroblokoch nulový a vektory pohybu sú tiež nulové.

Tvorba snímok B

Pri tvorbe týchto snímok je využívaná obojsmerná predikcia. Pri kódovaní aktuálneho makrobloku v snímke Sn vyhľadá algoritmus v predchádzajúcej snímke (I alebo P) a v nasledujúcej snímke (P alebo I) podobný makroblok ako je práve kódovaný. Z toho vyplýva, že vektory pohybu budú dva. Obvod predikcie vytvorí z predchádzajúcej a nasledujúcej snímky (sú uložené v pamäti) priemer u každej vzorky v makrobloku. Táto predpoveď je odčítaná od hodnôt práve kódovaného makrobloku a snímka je označená ako B. Pokiaľ algoritmus kódera nenájde v snímkach určených k predikcii aspoň čiastočne zhodné makrobloky, realizuje sa predpoveď len v jednom smere, prípadne sa predpoveď nerealizuje vôbec a kóduje sa ako v prípade snímky I. Pri kódovaní sa postupuje tak, že najprv sa zakóduje snímka I a jej pôvodná hodnota sa uloží do pamäti. Nasledujúce dva snímky B sa uložia do pamäti. Následne sa kóduje snímka P a jej originál sa uloží do pamäti. Snímky B sa kódujú až teraz pomocou snímok I a P (resp. P a P) uložených v pamäti.

Hierarchia MPEG video-toku

video_tok gop m_blok

Videsekvencia (Sequence)
Skladá sa z hlavičky sekvencie (sequence header) v ktorej sú uvedené informácie napr. o pomere strán obrazu, snímkovej frekvencii, prenosovej rýchlosti, požiadavkách na vyrovnávaciu pamäť, údaje o kvantovaní, formát vzorkovania televízneho signálu a iné. sekvencia je ukončená kódom konca sekvencie (end of sequence code)
Skupina snímok GOP (Group Of Pictures)
Skupina GOP začína tiež záhlavím v ktorom sú uvedené informácie o počte snímok a ich druhu (I,P alebo B).
Snímka (Picture)
V záhlaví sú uvedené informácie o tom či bolo použité prekladané riadkovanie (len u MPEG-2) alebo neprekladané, či bol použitý formát SIF 4:2:0, typ snímku (I,P alebo B), doba naplnenia vyrovnávacej pamäti od prázdneho do naplneného stavu.
Rez (Slice)
Je skupina jedného alebo viacerých makroblokov. V záhlaví je uvedená poloha jedného rezu v snímke a dĺžda rezu (počet makroblokov). Rezy sú potrebné z dôvodu dobrej synchronizácie dekóderu a sú tiež dôležité z hľadiska spracovania chýb. Ak kanál obsahuje chyby, môže ich dekóder preskočiť a prejsť na začiatok ďalšieho rezu (obrázok).
Makroblok (Macroblock)
Pre formát obrazu 4:2:0 obsahuje 4 bloky jasovej zložky Y a 2 chrominančné bloky Cb a Cr. V záhlaví sú uvedené vektory pohybu a typ kvantizačnej tabuľky.
Blok (Block)
8x8 hodnôt jasovej alebo chrominančnej zložky

vrstvy_datoveho_toku

 

mpeg_koder

Signál prichádza po makroblokoch do rozdielového obvodu, kde sa od neho odčíta referenčný makroblok uložený v obrazovej pamäti a tým sa vytvorí rozdiel, ktorý sa transformuje pomocou DCT po blokoch 8x8 pixelov a následne sa kvantuje. Kvantizačné tabuľky sú odlišné pre I a P,B snímky (pozri obrázok). Kvantované koeficienty po DCT sa po inverznej DCT opäť prevedú do tvaru diferencií a pridajú sa k pohybovo kompenzovanému referenčnému makrobloku na vstupe obrazovej pamäti, ktorá ukladá kompletnú snímku pre ďalšiu predikciu. V prípade, že na vstup príde snímka typu I, rozpoja sa oba vypínače a snímka sa kóduje len pomocou DCT bez použitia DPCM. Kvantované spektrálne koeficienty sa kódujú kódom s premenlivou dĺžkou VLC a po multiplexovaní s pohybovými vektoromi sa ukladajú do výstupnej vyrovnávacej pamäti.

Veľmi dôležitou súčasťou každého kódera a dekódera je vyrovnávacia pamäť, ktorá vyrovnáva premenný dátový tok v závislosti na charaktere obrazu a použitých kompresných prostriedkoch. Na výstupe kódera pri plynulom zásobovaní signálom môže prenosová rýchlosť kolísať. Napr. statický záber komentátora správ má nižšiu bitovú rýchlosť ako dynamicky zostrihaný reklamný spot. Tím by na vstup vyrovnávacej pamäti prichádzalo v jednom okamžiku buď príliš veľa dát a pamäť by sa preplnila, alebo príliš málo dát a pamäť by sa nenaplnila. Preto je treba vstupnú bitovú rýchlosť do kódera regulovať tak, aby bola pamäť vždy takmer úplne naplnená a výstupný tok tak mohol pokračovať konštantnou bitovou rýchlosťou ďalej. Aby sa zamedzilo pretečeniu vyrovnávacej pamäti, je táto trvalo monitorovaná a pomocou spätnej väzby sa zaisťuje priemerané zaplnenie pamäti. Spätná väzba obvykle ovláda jemnosť kvantovania koeficientov DCT a tím zmenšuje bitový tok. Toto má vplyv aj na kvalitu a preto sa koeficient DC, ktorý odpovedá priemernému jasu bloku, kóduje oddelene s najväčším počtom bitov.

Dekóder MPEG je oveľa jednoduchší ako kóder, pretože neobsahuje obvod pre vyhľadávanie zhodných makroblokov za účelom tvorby vektorov pohybu. Pre ilustráciu je na obrázku znázornené približné zaťaženie MPEG dekódera.

Ešte treba spomenúť, že štandardy MPEG definujú iba formáty dát a dekódovacie metódy, ale nie metódy kódovania s ktorými sa môže každý vývojár vysporiadať ako uzná za vhodné.

Z hľadiska náročnosti kompresie a dekompresie môžu byť aplikácie MPEG:


Informačné zdroje:

[1] www.volny.cz/mills1/digital/mpeg1/mpeg1.htm
[2] Líška, D.: "Digitálna terestriálna televízia DVB-T", Telekomunikace č.4/2000
[3] Halamiček, R.: "Digitální televize", Streo & Video č.10/97
[4] Čapek, J., Fabian, P.: "Komprimace dat principy a praxe", Computer Press, 2000
[5] Sestrienka, Ľ.,Hudec, J.: "Kompresia obrazu a štandard MPEG", Sdělovací technika č.12/92
 

[hlavná strana]

Dušan SOVIČ