|
Prije enkodiranja videa u MPEG1 ili MPEG2 postavljaju se uvijek ista
pitanja: Šta uzeti ? Dugi GOP ? Ili je bolje, kraći? Koja je najbolja
matrica? Može li se koristiti za sve vrste filmova? I uopće, zbog čega
se nerviram oko toga, zbog čega to uopće radim ?
Odgovori nisu baš uvijek onakvi koje očekujete.
Ovo poglavlje
će se podijeliti na par djelova:
- DCT &
Matrix, šta je to?
- Motion
prediction i Estimation
- GOP-veličine
i šta se pri tome dešava
- Praksa:
kako predhodna tri dijela spojiti u vidljiv rezultat ?
Blok,
DCT i Matrix
Za
početak, najmanji dio MPEG slike nije pixel, već blok od 8x8
pixela. Na jednom bloku se izvode takozvane DCT (Discrete Cosinus Transformation).
Postupak pri čemu se blokovi razbijaju u frekvencijske djelove. Šta
pri tome nastane je, matrica sastavljena od Frekventne inteferencije, pri čemu svaka ćelija bloka,
predstavlja frekvencijski spektar prijašnjega 8x8 bloka (hrvatski rečeno,
slika je crno-bijela).
To
vrijedi sa malim ograničenjem, jer je prva ćelija, de fakto, jednostavna
siva boja koja daje prosječnu svijetloću kompletnog bloka. Ćeliji desno
su pridodate vertikalne linije, tako da se osma ćelija sastoji od "rešetaka".
Analogno tome, odozgo prema dolje radi se isto, samo sa vodoravnim linijama.
Dijagonalno gledajući, spajaju vertikalne i vodoravne ćelije. 64-ta
ćelija je u stanju, gledajući frekvencijski opseg, dati sliku bez gubitka
na kvaliteti.
Ovako
bi to trebalo izgledati.

Onaj
tko misli, da je dovoljno sanimiti sadržaj zadnje ćelije da bi dobio
savršenu sliku, u krivu je. Ne snima se samo jedan interferencijski
podatak, tek više njih čine nešto šta bi se moglo nazvati, prava slika.
Da bi se to detaljno objasnilo, treba vam jako dobro znanje iz matematike
(a nemam ga !!), ali evo jedna usporedba s "analogijom kamena":
Dobar matematičar je teoretski u stanju: izračunati
interferencije valova (element blok-matrice, po DCT-u) na moru (blok),
pri bacanju hrpe kamenja (pixel), različite težine (svijetloća slike),
na određena mjesta (pozicije pixela).
Jednostavno! Na isti način se kasnije stvara slika.
Važno
je da, ćelije sa većim brojevima snimaju kompleksniji spektar boja.
Ako izostavimo pojedine ćelije ili linije iz obrade, sama orginalna
slika gubi na kompleksnosti. Ona se gubi do nivoa kada ni ljudsko oko
to više ne primjećuje. Komplicirano jest, ali nam nije donijelo ni bajta
uštede na prostoru. Do toga dolazi tek u sljedećom koraku, kvantiziranju,
sa matricom koji već koristimo.
Šta
radimo sa matricom?

Većini
je poznat ovaj prozor u TMPGenc-u. Posao matrice je da sadržaje ćelija,
što je moguće više, homogenizira, znači da usporedi jednu sa drugom.
Ovo uspoređivanje je bitno, jer se u sljedećem koraku bira metoda kompresije
- RLE ), koja je zadužena za to da što
moguće više istih ili sličnih vrijednosti dolaze jedna za drugom.
Kao što sad znamo, za sada ćelije određuju kompleksnost cijelog bloka.
Kvantizirana matrica sama sadrži brojeve koji se uspoređuju/izračunavaju
sa sadržajem ćelija. Trik je u tome da se izaberu brojevi u matrici,
koji će što više ćelija dovesti na istu vrijednost. Cilj nije dovesti
što više ćelija na nultu vrijednost, iako je i to moguće.
Postigli
smo to da RLE kodiranje bolje funkcionira, jer kodiranje pazi da li
idu nekoliko istih vrijednosti, jedna za drugom. Ako su na kraju kvantiziranja
primjer: u četiri ćelije zaredom (koje su u pitanju ovisi o redosljedu
skeniranja, koji se traži iz samih ćelija) sa istim vrijednostima, recimo
8, onda se ne zapisuju četiri osmice nego količina i vrijednost. Znači
umjesto 8,8,8,8 piše se samo 4,8. To je pozitivna stvar kvantiziranja
(uštedimo dosta mjesta). Cijela stvar ima i malu kvaku: samim postupkom
mjenjmo ranije frekvencijske informacije, koje se "omekšavaju"
- primjetimo kod "pikselizacije" (moja oznaka) slike! Što
brutalnije matrica omekšava, to je veća kompresija slike (iznimka: CG-Matrix),
jer se gube podaci o slici, a to baš i nije cilj.
Tko
je upoznat sa tematikom reći će: Što su više frekvencije, šum slike
je jači, i samim time smo rješili problem pikselizacije. To je ono što
dosta korisnika želi, ali to je samo donekle točno. Sjetite se, DCT
pravi inteferencijski uzorak! I to za svaku ćeliju, gledajući cijeli
blok, a ne samo za jednu frekvenciju ili frekventni opseg. I uopće ne
za bilo koji piksel unutar bloka. Visoka kvantizacija ne uklanja šum,
već samo povećava kompleksnost same slike. Samim time, šum slike nje
tako vidljiv, ali je uvijek tu.
OK,
nakon što smo sliku "pokvarili", pitamo se, kako dobiti opet
gledljivu sliku, i u čemu je bila poanta priče o kamenu, moru i matematičaru
?
Matematičari
pokušavaju, iz uzoraka valova (sadržaj ćelija), koje oni vide, izračunati,
koja su kamenja (pikseli koje želimo natrag), bačena i gdje u vodu (pozicija
pixela). Pri tome za tri kamena potrebne informacije od samo dva kamena,
vrijednost trećega automatski se izračunavaju od predhodna dva. Hrvatski
rečeno: računaju se pozicije (i ostali podaci) dvaju kamena, i vide
se, valovi od trećeg kamena. Iz prijašnjih podataka, se izračuna, šta,
kad i gdje je se to desilo. To isto radi iDCT
(inverse Discrete Cosinus Transformation). Svaka ćelija bloka je jedan
kamen (pixel) tj. informacija. Svaka ćelija je jedan interferencijski
uzorak (val) više ćelija, koji su nastale padom jedog od kamena.
Sada
se matricom okreće efekt kvantiziranja (radi se obratno), što bi bilo
bez gubitka informacija, da nije malog problema: pri kvantiziranju nastaju
"granične greške" i samom tim, nulte vrijednosti.
Za
objašnjenje probat ću to objasnit zbrajanjem i oduzimanjem (matematički
potpuno netočno). Recimo da su ranije vrijednosti ćelija, po DCT-u;
24, 16, 22, 23, 22, 11... koje će biti kvantizirane (zbrojit ćemo ih)
sa istim (na koji se odnose) vrijednostima matrice 22, 22, 22, 24, 24,
24... Na kraju dobijemo rezultat: 2, 0, 0, 0, 0, 0. Sada matricu obrnemo
postupkom kvantizacije i dobijemo: 24, 22, 22, 24, 24, 24, i to sa prvobitnom
slikam nema neke velike veze (ali se dobro kompresira): "Jipiiii! Nema
više blokova pri brzim pokretima, super-matrica", kaže (l)user. A svizac
je na to rekao: "Za upišat se, slika je tako nejasna! A tek pumpe!
Savršeno! Kako se zove umjetnik?" interna
šala: Je li netko razumio vic ?!?
Tako,
sad bar znamo šta je najmanja jedinica slike kod MPEG-a, upoznali smo
se sa DCT-om i kvantiziranjem (barem ugrubo). E, sad dolazi pitanje:
šta treba dobra matrica uraditi?
Odgovor
je jasan, složiti što je moguće više ćelija, u ispravnom rasporedu,
sa istim vrijednostima, i pri tome izbjeći visok stupanj kvantizacije
slike. Matrice sa vrijednostima 99 se daju jako dobro komprimirati,
ali dovode do jakih efekata kvantizacije i nejasnim slikama. Zato je
interlaced matrica mb1, dobar primjer: obraća pažnju na redosljed skeniranja,
i stupanj kvantizacije nije visok.
I
ovdje postoji jedan "ali", zbog niske kvantizacije slike,
smanjuje se i vjerovatnost, da se pojavi više ćelija sa istim/sličnim
vrijednostima.
Samim time, RLE kompresija ne djeluje tako dobro i potreban nam je veći
bitrate.
Iz
rečenoga se može izvući: nominalna vrijednost Q-levela kvantizacije,
pri željenom bitrateru, je sa oprezom za upotrebu.
Viši
stupanj nam donosi to da blok nakon kvantizacije sadrži puno istih vrijednosti,
a to može biti rezultat savršene "igre" između kvantiziranja
i RLE-kodiranja ! A to opet znači, da je u ovom slučaju čak i pri visokoj
kvantizaciji kvalitet slike na najvišem nivou !
Iz dosta razloga neću objašnjavati kakve to ima veze sa Q-Levelom, pa
ćemo to sljedeći put interpretirati. Pametne glave, koje su nešto razumile,
od ovoga mogle bi doć na ideju:"Hmm, onda je optimalna matrica
ona kod koje vrijednosti ćelija ravnomjerno rastu". Ako ste to
pomislili razumili ste veliki dio ove teme, ali i to ne štima u potpunosti.
Ni jedna slika, pa tako i ni jedan blok, nema ravnomjeran rast kompleksnosti
frekvencijskog spektra, to je manje-više kaotično. Kod crtanih filmova
ovakva matrica stvarno funkcionira, ali SAMO kod crtanih filmova. Unatoč
tome, ovakva matrica bi dala najbolju moguću sliku, da ne postoji granica
dozvoljenog bitrate-a (važi za sve matrice). Ako nema dovoljno bitrate-a
za obradu svih informacija, enkoder to rješava na brutalan način: kvantizira
više nego matrica propisuje ! Dosta ljudi (uključujuči i mene) to naziva
"podkvantizacija". Gdje i kad se to dešava, to je najčuvanija
tajna programenra raznih enkodera, jer je to odlučujuće za kvalitet
slike.
Usporedbom
TMPGEnc i Cinemacraft-Encodera, kada dođu do djela kad se potriši bitrate,
vidimo da TMPGenc odmah pokaže vidljive blokove (pojedini blokovi se
jako kvantiziraju) ali i jako oštru sliku, dok kod CCE se blokovi javljaju
kasnije, ali je slika zamućenija. Oba enkodera rade na različitim strategijama.
Onaj
tko želi eksperimentirati sa matricama, treba imati na umu, da enkoderi
imaju svoje "zahtjeve". Najbolja matrica nema efekta ako ne
koristimo dovoljno bitrate-a.
Objašnjenje
"Scanordera".
Ide se od teorije da, pri DCT-u i kvantizaciji dva susjedna elementa
imaju slične/iste vrjednosti (gledajući dvodimenzionalno). Time se nije
mislilo na susjedne vrijednosti u istom redu ili stupcu, već na frekvencijski
spektar, jer se pri traženju sadržaja ćelija ide za
"hopa-hala" uzorkom. Kod Interlaced-videa
koristi se tkz. Alternate Scan.
I on ide za "hopa-hala"
uzorkom, mada na prvi pogled izgleda kaotično.

Ljevo:
hopa-hala, desno: Alternate Scan
OK,
nakon dosadne torije, malo prakse.
Na
kvaliteti slike možemo jedva nešto promijeniti, bet obzira koju matricu
koristili. Nakon kvantizacije slika nikad nije ista kao orginal. Uvijek
će biti malo mutnija i bljeđa. Ono što možemo uraditi je, da odvijemo
kompresijski vijak i minimiramo pojavljivanje blokova. Iz do sada
rečenog, možemo zaključiti da, se orginalna slika može rekonstruirati
i kada imamo jako malo informacija, znači kad su kompletni frekvencijski
dijelovi izgubljeni. U prijevdu, što više informacija izbacimo pri kvantizaciji,
to bolje se slika kompresira. To plaćamo gubljenjem oštrine slike.
Matrica
za kvantizaciju nije ništa drugo nego filter određenih frekvencija,
što nam je poznato iz MP3-a. Kod muzičkih CD-a maksimalna audio frekvencija
22 kHz. Više frekvencije čovjek jako slabi ili nikako razaznaje, što
se koristi koa audio-kompresije, jer se frekvencije iznad 16 kHz jednostavno
otkodaju. Isto se dešava sa matricom pri MPEG-kompresiji.
Matrica se sastoji od 8x8 polja. Sa ljeva na desno se koriste
visoke vrijednosti vodoravne frekvencije, a odozgo prema dolje okomite
frekvencije.
Jedan
od filtera koji propušta niske frekvencije, a visoke odsjeca izgledao
bi ovako (crvenom bojom su označena promjenjena polja. Osnova je standardna
postavka TMPGEnc):
Slika 1.
Kod
ove matrice su kompletne više frekvencije odbačene.

Slika 2.
Ovakav
filter šalje niske frekvencije u Nirvanu (briše ih)...
Drugi
filter, bi onda ovako izgledao:

Slika 3.
Svi
frekventi djelovi su jednako obražšeni. Ima smisla kod slika koje, same
po sebi, nisu kompleksne, crtani filmovi npr. (ne kompjuterski animirani
crtani filmovi).
Dosta vas je vidilo matrice za jače kompresije koje drugačije izgledaju.
Istina, a razlog je banalan: televizija! Zato jer su kod telkaća
jako vidljive linije, za razliku od monitora, koji je više pixel-orjentiran.
Kod Cinemacraft Encodera (CCE) postoji Low-Bitrate-Matrix sa sljedećom
strukturom ("xx" pokazuje šta se nije mjenjalo) :

Slika 4.
Ova
matrica briše samo vodoravne frekvencije, dok okomite ne dira. Super
stvar, gubi se jako malo na kvaliteti slike. Razlog tome je televizijska
slika koja, digitalno gledajući, ima uvijek 576 linija.
CCE nudi mogućnost, transponiranja (rotiranja) matrice:
Slika 5.
To
je razlog zašto je ovakva slika na monitoru jako dobra, ali na
telkaću izgleda lošije.
Svi smo upoznati sa Angels matricom koja dijagonalne vrijednosti postavlja
na 99. Šta ona radi ? Pogledajmo jednostavniju varijantu:

Slika 6.
Pogledajmo
scanorder, i vidimo u čemu je trik: vrijednosti
se jako kvantiziraju ali ispravnom redosljedu, što RLE-Kompresijom odlično
funkcionira. Problematično je samo to da su vertikalne frekvencije uklonjene,
što je za telkač loše (struktura linija).
Onaj tko želi eksperimentirati sa Scanorderom, nema drugi izbor.
Skoro optimalna stvar bi bila kada bi kombinirali dvije matrice:
CCE Low Bitrate i Angel-matricu:

Slika 7.
Nadam
se da vam je sad malo jasnije, šta rade matrice pri kompresiranju.
Trik pri istraživanju mogučnisti optimiranja je, pronaći ne samo
ispravan redosljed, već i prikladne vrijednosti. Vrijednost 99 uništava
frekvencije, što dovodi do mućenja slike. Ako uspijemo složiti vrijednosti
tako da frekvencijske vrijednosti ostanu očuvane, i da RLE-Kompresija
uredno odradi svoj posao, onda imamo optimum. ... Moj prijedlog
je izbjegavati vrijednosti 99 u matrici !
Ovo su bili primjeri Intra-Matrice, non-Intra nije obrađena jer za nju
vrijede druga pravila. Jedno od njih je uopćeno: ne kvantizirati previše.
Osim toga sve matrice, ovdje obrađene, su samo za progresivni
video, ne za Interlaced-Video. |