MPEG - Formatul de compresie video si audio

MPEG este numele popular pentru ISO/IEC DIS 11172, standardul de compresie video dezvoltat sub auspiciile ISO (Intenational Standards Organization) de către grupul de experti Moving Picture Experts Group. MPEG-1, primul algoritm ce a fost implementat, acoperă domeniul compresiei video si audio la o rată de 1,8 Mbits/secundă. Primul scop urmărit prin MPEG-1 este asigurarea calitătii imaginilor video (în miscare-animatie, nu numai statice) la înregistrarea lor pe CD-ROM. Comitetul finalizează în prezent o extensie a primului algoritm, numit MPEG-2, care se adresează rezolutiilor înalte si transmiterii emisiunilor TV (inclusiv HDTV - High Definition TV).

Ca si în cazul standardului JPEG, MPEG este un algoritm derulat în mai multe faze, construit în jurul transformării cosinus discrete. Cele două standarde folosesc aceleasi metode pentru conversia spatiului de culoare, pentru împărtirea imaginii în blocuri, cuantificare, ordonarea frecventelor sub forma zig-zag, codificare RLE, compresie Huffman. Totusi MPEG merge mai departe adăugând metode pentru compresie diferentială, între cadre de imagini, respectiv permite intercalarea datelor audio. Ca si multi alti algoritmi de compresie diferentială, MPEG este asimetric - comprimarea necesită mult mai mult efort decât decomprimarea.

După transformarea spatiului de culoare si aplicarea subesantionării se ajunge în faza în care, în functie de tipurile de cadre, MPEG va alege continuarea potrivită a procesului de comprimare-codificare. MPEG utilizeză trei tipuri de cadre: INTRA (sau cadre de referintă), anticipate (predicted în limba engleză) si respectiv bidirectionale. Tipul de cadre INTRA, notate în continuare cu I, sunt similare cu imaginile de tip JPEG. Fiecare bloc de 8 x 8 pixeli al imaginii este codificat fără a se face vreo referire la alte cadre. Cadrele anticipate, notate cu P, se codifică prin referire la un cadru precedent de tip I sau P. Cadrele asa-zise bidirectionale, notate cu B, se codifică prin referire atât la cadrele precedente cât si la cele următoare de tip I sau P. Aplicatiile existente la ora actuală permit specificarea distributiei cadrelor de tip I, B, P astfel încât să poată fi satisfăcute cerintele specifice (de exemplu, existenta mai multor cadre de tipul I permite mărirea perfomantei de acces aleatoriu).

Dacă respectiv cadrul curent este de tip I, decodificarea decurge ca în cazul fisierelor JPEG. În cazul unui cadru de tip P trebuie procesată corelarea inter-cadre. Cum are loc acest proces ? Relativ simplu. Pentru fiecare bloc de 8 x 8 pixeli din cadrul curent, se caută în cadrul anterior blocul cu care se potriveste cel mai bine. Dacă se găseste o potrivire exactă sau aproximativă este nevoie să codificăm un pointer care să indice spre pixelii asemenea. Acest pointer, numit vector de miscare, necesită doar câtiva biti ca spatiu de stocare. Codificarea unui bloc în mai putin de un octet este o comprimare uluitoare într-adevăr. Totusi, în spatele acestei eficiente deosebite stă un timp foarte mare de căutare - este faza cea mai consumatoare de timp din întreg procesul de codificare-comprimare. Trebuie să spunem că o potrivire perfectă între două cadre nu va fi posibilă niciodată deoarece obiectele nu plutesc doar pe ecran, ele se rotesc, îsi schimbă forma, se apropie sau se depărtează de privitor. În aceste cazuri va trebui să ne multumim cu o potrivire partială.

Noutatea apare la cadrele de imagine notate cu B în care caz raportarea imaginii curente se face atât la imaginea precedentă cât si la imaginea următoare. Această tehnică de folosire a două imagini ca si cadre de referintă produce o corelatie mai bună si deci o rată de compresie mai înaltă. Să ne închipuim de exemplu un film în care automobilele intră în câmpul vizual prin stânga si ies prin dreapta. Când apare masina din stânga va fi imposibil să găsim potriviri în raport cu cadrele precedente. În acest caz, la codificare se va selecta ca referintă cadrul următor. Situatia se inversează atunci când masina iese din câmpul vizual. Abilitatea de a alege între cadrele pe care le vom folosi ca referintă în codificarea imaginii, reprezintă o posibilitate demnă de luat în seamă.

După efectuarea acestei operatii de corelare între cadrele de imagine se aplică transformarea cosinus discretă (DCT). Practic un bloc de 8 x 8 pixeli este transformat în 64 de coeficienti de frecventă - frecventele joase descriu „structura grosieră" a imaginii pe când frecventele înalte oglindesc detaliile. Fiecare coeficient reprezintă un „factor de greutate" (sau altfel spus - reprezintă ponderea) corespunzător unei anumite curbe cosinus. Prin compunerea celor 64 de curbe cosinus (ponderate conform coeficientilor calculati) se vor putea reproduce cei 64 de pixeli originali. Datorită lipsei detaliilor fine în multe imagini, coeficientii frecventelor înalte devin egali sau aproape egali cu zero. În scopul cresterii numărului frecventelor de valoare zero si pentru reducerea numărului de biti necesari stocării frecventelor diferite de zero, se împarte fiecare coeficient printr-o valoare numită cuantificator (în unele documetatii tehnice este numit coeficient de normalizare). Ca urmare a sensibilitătii diferentiate a ochiului în raport cu frecventele mici si frecventele mari, valoarea cuantificatorului creste odată cu valoarea frecventei. MPEG utilizează un anumit tablou de cuantificatori pentru cadrele de tip I si alt tablou de cuantificatori pentru cadrele de tip P si B. Procesul de cuantificare produce o pierdere a continutului imaginii. Valorile mari ale cuantificatorilor produc pierderi mari dar asigură rate de compresie mari. Organizarea de tip zig-zag a frecventelor produce siruri lungi de zerouri - acest lucru este ideal pentru codificarea RLE (run length encoding). Ca pas final urmează compresia folosind algoritmul Huffman.

Pe măsură ce se scriu datele în fisier, trebuie inserate si header-e ce vor fi de mare ajutor în timpul procesului de decodificare. La începutul fisierului MPEG trebuie specificate o serie de mărimi cum sunt: frecventa de derulare a cadrelor, rezolutia imaginilor, dimensiunile etc. În acelasi timp va fi nevoie de un tablou care să indice locul cadrelor de tip I în fisier, pentru a eficientiza procesul de accesare a informatiilor. Fiecare cadru în parte va prezenta un identificator ce specifică tipul: B, I sau P. În final trebuie inserate coduri de control ce permit decodificatoarelor să execute o resincronizare în cazul detectării unei erori.

Algoritmul de compresie audio folosit de standardul MPEG foloseste un filtru spectral pentru divizarea semnalului pe benzi de frecventă. Practic se foloseste un model psiho-acustic sofisticat în acest scop. Prin alocarea de biti mai putini benzilor de frecventă mai putin audibile se poate mentine o calitate foarte bună a sunetului la rate de compresie de până la 8:1. Dacă este permisă o calitate mai slabă a semnalului audio atunci se poate ajunge la un nivel al ratei de compresie de ordinul a 20:1. Ca pas final în procesul de codificare se execută o interclasare a pachetelor de date video si audio. În cadrul fisierului, vor apare si informatii referitoare la timp (time stamp) pentru a veni în ajutorul decodificatorului. Având aceste informatii la dispozitie, programul de decodificare are posibilitatea de a separa si sincroniza datele audio si video.

Decomprimarea decurge prin parcurgerea fazelor, aproape, în ordine inversă necesitând un timp mult mai mic de procesare. Rezultatul trebuie să se concretizeze într-un „film" ce utilizează o frecventă de aproximativ 30 cadre/secundă (această valoare fiind recunoscută de majoritatea aplicatiilor existente). Uneori, pentru a mentine sincronizarea audio-video, este necesară trecerea peste anumite cadre de imagine. În cazul MPEG acest lucru este usor deoarece cadrele B nu sunt folosite niciodată ca referintă si deci se poate trece usor peste ele fără ca acest lucru să provoace efecte secundare.


(C) Copyright Computer Press Agora