ALGORITEM STISKANJA PRI AVI

Poizvedi, kako stiskamo AVI datoteke in kakšen algoritem stiskanja je pri tem uporabljen.

Kot smo že omenili, so AVI datoteke zelo velike, nestisnjene pa še bolj. Kodeki, ki jih uporabljamo za stiskanje močno zmanjšajo velikost datotek, pri tem pa ohranjajo optimalno kakovost. Format AVI nam da možnost, da se odločimo, kateri kodek želimo uporabiti, s tem pa nam da proste roke, da izbiramo med manjšimi datotekami s slabšo kakovostjo ali med večjimi datotekami z boljšo kakovostjo.

Obstaja ogromno kodekov in izbira enega lahko predstavlja velik izziv. Vendar pa se moramo vedno vprašati samo dvoje, kot je napisano že zgoraj: kakšno kakovost ter kakšno velikost datoteke želimo. To je odvisno predvsem od namena uporabe AVI datoteke.

Spodaj je na kratko predstavljenih nekaj najboljših kodekov za AVI datoteke:

CINEPAK

Kodek, ki dobro obdeluje videoposnetke, ki vsebujejo veliko gibanja.

MICROSOFT MPEG-4 VIDEO

Obstaja veliko kodekov, ki ustrezajo standardu MPEG 4, vključno s kodeki vodilnih proizvajalcev, kot so Apple, Ligos, DivX itd. Kodek Microsoft MPEG-4 zagotavlja visokokakovostno kompresijo, je enostaven za uporabo in je dobro združljiv.

MICROSOFT VIDEO 1

To je priljubljen kodek, ki je priložen vsem različicam sistema Windows. Microsoft Video 1 zagotavlja odlično kakovost videa in primerno razmerje stiskanja.

MJPEG (MOTION JPEG)

To je video prilagoditev JPEG standarda za slike. Idealen je za urejanje in zajem videa. Ena glavnih prednosti je, da je stiskanje hitro in ga je mogoče izvajati v realnem času. Obstaja pa veliko izvedb MJPEG, ki povzročajo težave z združljivostjo med videoposnetki, stisnjenimi v različnih sistemih.

DIVX

Ta kodek zagotavlja visokokakovostno stiskanje. Kodek se ponaša s podporo za več jezikov, dobro vizualno kakovostjo, hitrostjo in stiskanjem.

XVID

Je kodek, zasnovan kot odprtokodna alternativa DivX.

(Understanding Compression in AVI, b.d.).

Ko stiskamo AVI datoteke, se odločimo, s katerim kodekom/formatom bomo stisnili zvočne podatke in s katerim video podatke. Zvočne podatke lahko stisnemo na primer s formatom MP3, ki je bolj podrobno opisan pri algoritmu stiskanja MP3, video podatke pa stisnemo z algoritmom, ki je značilen za kodek, ki smo ga izbrali. Spodaj je bolj podrobno opisan algoritem stiskanja DCT (discrete cosine transform oziroma diskretna kosinusna transformacija), saj je ta algoritem prisoten v večini kodekov, ki se trenutno najbolj uporabljajo (na primer XviD, DivX, MJPEG, MPEG-1, MPEG-2, MPEG-4, H.261, H.263, …).

Sistem za stiskanje video datoteke je sestavljen iz video kodirnika (na strani oddajnika, ki kodira video v zaporedje bitov) in video dekodirnika (na strani prejemnika, ki rekonstruira video iz bitnega zaporedja). Torej kodirnik + dekodirnik = kodek.

PREVERI SVOJE ZNANJE

1. POSTOPEK STISKANJA

Video datoteka je sestavljena iz številnih okvirjev. Najprej to datoteko pretvorimo v zaporedje okvirjev, ki ni nič drugega kot zaporedje slik.

Stiskanje poteka v petih korakih:

1. ZMANJŠANJE LOČLJIVOSTI

Najprej pretvorimo vsak okvir iz barvnega prostora RGB v komponente YCbCr, kjer Y predstavlja svetilnost, Cb modro komponento barvne razlike, Cr pa rdečo komponento barvne razlike (Mitrovic, b.d.).

2. OCENA GIBANJA

Ker imata dva zaporedna okvira pogosto majhne razlike, lahko že takoj zmanjšamo oziroma odstranimo neke podatke, tako da primerjamo in stiskamo to zaporedje okvirov. Uporabimo tri vrste okvirov: I-okvir (se ne nanašajo na druge okvire), P-okvir (kodirani s predvidevanjem na prejšnje I-okvire ali P-okvire, služi kot referenca za kasnejše napovedi) in B-okvir (dvosmerna različica P-okvira, za izračun uporabljajo prejšnje in bodoče referenčne okvire, sami pa niso referenca). Kompresija I-okvirov ni zelo visoka, v primerjavi s P-okvirji, ki ne zavzemajo veliko prostora, saj se shranijo samo razlike med zaporednima okviroma (Mitrovic, b.d.).

Uporaba določene vrste okvirja določa kakovost in razmerje stiskanja video datoteke. I-okvirji povečajo kakovost (in velikost), medtem ko uporaba B-okvirjev bolj stisne, hkrati pa povzroči slabšo kakovost (Mitrovic, b.d.).

Reference med različnimi vrstami okvirjev so realizirane s postopkom, imenovanim ocena gibanja ali kompenzacija gibanja. Korelacijo med dvema okvirjema v smislu gibanja predstavlja vektor gibanja. Ta postopek uporabi bloke preteklega okvira za izdelavo replike trenutnega okvira. Za vsak blok v trenutnem okviru najdemo ujemajoč se blok v preteklem okviru in ugotovimo, če je njegov vektor gibanja med prenosom nadomeščen. Odvisno od iskalnega praga se nekateri bloki prenesejo v celoti, nekateri pa so nadomeščeni z vektorji gibanja (Mitrovic, b.d.; Patil in Wadd, 2014).

Postopek zajema 4 večje korake:

Okvir se razdeli na bloke, ki so vsi enako veliki in se ne prekrivajo (tako imenovani makro bloki). Običajno so veliki 8×8 ali pa 16×16 slikovnih točk. Velikost bloka je pravzaprav ključni dejavnik glede časovne učinkovitosti in kakovosti datoteke. Okvira ne smemo razdeliti na prevelike ali pa premajhne bloke (Patil in Wadd, 2014).

Da bi zmanjšali število dragih/visokih izračunov za oceno gibanja, se ti izračunajo samo, če je razlika med dvema blokoma na istem položaju (torej gledamo 2 bloka na enakih mestih v trenutnem in prejšnjim okvirom) večja od praga, sicer se predpostavi, da ni prišlo do gibanja oz. spremembe in se prenese celoten prejšnji blok (Mitrovic, b.d.; Patil in Wadd, 2014).

Ta postopek med kodiranjem vzame največ časa. Da bi našli ujemajoč se blok, se vsak blok trenutnega okvira primerja z bloki preteklega okvira. Za primerjavo blokov se upošteva samo svetilnost, barvne informacije pa so vključene pri kodiranju (Patil in Wadd, 2014).

Ko je za trenutni blok najden najboljši nadomestek ali ujemajoči se blok, se izračuna vektor gibanja. Ta opisuje lokacijo ujemajočega se bloka iz prejšnjega okvira z referenco na lokacijo ciljnega bloka v trenutnem okviru. Izračuna se še razlika med blokoma, ki nadomesti ciljni blok (Mitrovic, b.d.).

3. DCT

Na vsakem bloku (velikosti 8×8 ali 16×16 slikovnih točk) se izvede algoritem DCT, ki prevede bloke v frekvenčne komponente s spodnjo formulo:

kjer u in v predstavljata stolpec in vrstico slikovne točke, katere vrednost računamo, f(x,y) je svetilnost točke, N je velikost bloka, za C(u) in C(v) pa velja naslednje: C(u) = C(v) = 1/√2, če u = v = 0 in C(u) = C(v) = 1, za ostale (Mitrovic, b.d.).

Poglejmo si delovanje DCT algoritma na primeru.

PRIMER:

Spodnja slika prikazuje vrednosti enega bloka okvira, te vrednosti pa pravzaprav predstavljajo svetilnost bloka (0 pomeni črna, 255 pa bela) (JPEG DCT, Discrete Cosine Transform (JPEG Pt2)- Computerphile, 2015):

Na tem bloku izvedemo algoritem DCT in dobimo naslednje vrednosti (JPEG DCT, Discrete Cosine Transform (JPEG Pt2)- Computerphile, 2015):

4. KVANTIZACIJA

Med kvantizacijo, ki je glavni vir izgube podatkov, se DCT vrednosti delijo z vrednostmi v matriki kvantizacije, ki je generirana tako, da upošteva človeško vizualno zaznavo (človeške oči so bolj odzivne na nizke frekvence kot na visoke), nato pa rezultat zaokrožimo na najbližje celo število. Višje frekvence se zmanjšajo, vrednosti, ki so zelo majhne pa lahko kar odstranimo oziroma jih enačimo z nič. Matrika kvantizacije določa končno stopnjo stiskanja in s tem tudi kakovost. Tudi kvantizacijo naredimo na vsakem bloku okvira (Mitrovic, b.d.).

Leva slika predstavlja matriko kvantizacije, desna slika pa predstavlja vrednosti našega primera po kvantizaciji (JPEG DCT, Discrete Cosine Transform (JPEG Pt2)- Computerphile, 2015):

Končne vrednosti, ki jih dobimo s kvantizacijo, nato zapišemo v zaporedje in ga kodiramo še s Huffmanovim kodiranjem (naslednji korak).

Vrednosti se zapišejo v zaporedje s tako imenovano cik-cak metodo (slika spodaj):

ZAPOREDJE:

-23 -2 -21 6 4 0 0 2 1 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

5. ENTROPIJSKO KODIRANJE

Na zgornjem zaporedju se izvede še Huffmanovo kodiranje. Brez izgubni algoritem, ki lahko podatke stisne z dodatnim faktorjem 3 ali 4 (Mitrovic, b.d.).

PREVERI SVOJE ZNANJE

2. DELO DEKODIRNIKA

Na hitro opišemo še delo dekodirnika (Patil in Wadd, 2014):

  1. Zaporedje bitov se dekodira v vrednosti, do katerih smo prej prišli s kvantizacijo.
  2. Te vrednosti pomnožimo z matriko kvantizacije in dobimo DCT vrednosti (ne popolnoma enakih kot prej, saj smo s kvantizacijo pridobili kar nekaj ničel, ki ostanejo ničle tudi po množenju z matriko kvantizacije).
  3. Izvedemo inverzni DCT.
  4. Z algoritmom za oceno gibanja komprenziramo okvire z gibanjem.
  5. Pretvorimo okvire iz YCbCr v RGB barve.
  6. Zaporedje slik/okvirov se pretvori v video, ki predstavlja končni stisnjeni video.

VIRI