Kako deluje video kodek? 1. del: Osnove

Drugi del: Kako deluje video kodek

Kateri koli raster slika lahko predstavimo v obliki dvodimenzionalna matrika. Ko gre za barve, lahko idejo razvijemo tako, da pogledamo sliko kot tridimenzionalna matrika, v katerem se za shranjevanje podatkov za vsako od barv uporabljajo dodatne dimenzije.

Če upoštevamo končno barvo kot kombinacijo t.i. primarnih barv (rdeča, zelena in modra), v naši tridimenzionalni matriki definiramo tri ravnine: prvo za rdečo, drugo za zeleno in zadnjo za modro.
Kako deluje video kodek? 1. del: Osnove
Vsako točko v tej matriki bomo imenovali piksel (element slike). Vsaka slikovna pika vsebuje informacije o intenzivnosti (običajno kot številsko vrednost) vsake barve. na primer rdeči piksel pomeni, da vsebuje 0 zelenih, 0 modrih in največ rdeče. Rožnati piksel se lahko oblikuje s kombinacijo treh barv. Z uporabo številskega obsega od 0 do 255 je rožnata slikovna pika definirana kot Rdeča = 255, Zelena = 192 и Modra = 203.

Kako deluje video kodek? 1. del: Osnove

Ta članek je bil objavljen s podporo EDISON.

Razvijamo se aplikacije za video nadzor, video pretakanje, pa tudi početje video snemanje v kirurški sobi.

Alternativni načini kodiranja barvne slike

Obstaja veliko drugih modelov za predstavitev barv, ki sestavljajo sliko. Uporabite lahko na primer indeksirano paleto, ki zahteva samo en bajt za predstavitev vsake slikovne pike namesto treh, potrebnih pri uporabi modela RGB. V takem modelu je mogoče za predstavitev vsake barve uporabiti 2D matriko namesto 3D matrike. To prihrani pomnilnik, vendar daje manjši barvni obseg.

Kako deluje video kodek? 1. del: Osnove

RGB

Na primer, poglejte to sliko spodaj. Prvi obraz je popolnoma pobarvan. Druge so rdeča, zelena in modra ravnina (intenziteta ustreznih barv je prikazana v sivinah).

Kako deluje video kodek? 1. del: Osnove

Vidimo, da bodo odtenki rdeče v izvirniku na istih mestih, kjer so opazni najsvetlejši deli druge ploskve. Medtem ko je prispevek modre barve v glavnem viden le v Mariovih očeh (zadnji obraz) in elementih njegovega oblačila. Opazite, kje vse tri barvne ravnine prispevajo najmanj (najtemnejši deli slik) – Mariovi brki.

Za shranjevanje intenzivnosti vsake barve je potrebno določeno število bitov - ta količina se imenuje bitna globina. Recimo, da je porabljenih 8 bitov (na podlagi vrednosti od 0 do 255) na barvno ravnino. Potem imamo barvno globino 24 bitov (8 bitov * 3 ravnine R/G/B).

Druga lastnost slike je dovoljenje, ki je število slikovnih pik v eni dimenziji. Pogosto označeno kot širina × višina, kot na sliki 4 krat 4 spodaj.
Kako deluje video kodek? 1. del: Osnove

Druga lastnost, s katero se ukvarjamo pri delu s slikami/videoposnetki, je razmerje, ki opisuje normalno sorazmerno razmerje med širino in višino slike ali slikovne pike.

Ko rečejo, da je določen film ali slika velikosti 16 x 9, običajno mislijo resno razmerje stranic zaslona (DAR - od Prikaz razmerja stranic). Včasih pa lahko pride do različnih oblik posameznih pikslov – v tem primeru govorimo o razmerje slikovnih pik (PAR - od Razmerje stranic slikovnih pik).

Kako deluje video kodek? 1. del: Osnove

Kako deluje video kodek? 1. del: Osnove

Opomba za hosteso: DVD соответствующий DAR 4 do 3

Čeprav je dejanska ločljivost DVD-ja 704x480, še vedno ohranja razmerje stranic 4:3, ker je PAR 10:11 (704x10 / 480x11).

In končno lahko ugotovimo Video kot zaporedje n okvirji za obdobje časa, kar lahko štejemo za dodatno dimenzijo. A n potem je hitrost sličic ali število sličic na sekundo (FPS - od Število sličic na sekundo).

Kako deluje video kodek? 1. del: Osnove

Število bitov na sekundo, potrebnih za prikaz videa, je njegovo hitrost prenosa - bitna hitrost.

bitna hitrost = širina * višina * bitna globina * sličice na sekundo

Na primer, 30 sličic na sekundo, 24 bps, 480 x 240 videoposnetek bi zahteval 82,944,000 bps ali 82,944 Mbps (30 x 480 x 240 x 24) - vendar to velja, če ne uporabite metode stiskanja.

Če je hitrost prenosa skoraj konstantna, potem se imenuje konstantna hitrost prenosa (CBR - od konstantna bitna hitrost). Lahko pa se tudi razlikuje, v tem primeru se imenuje spremenljiva hitrost prenosa (VBR - od spremenljiva bitna hitrost).

Ta graf prikazuje omejen VBR, kjer se v primeru popolnoma temnega okvirja ne izgubi preveč bitov.

Kako deluje video kodek? 1. del: Osnove

Inženirji so sprva razvili metodo za podvojitev zaznane hitrosti sličic video zaslona brez uporabe dodatne pasovne širine. Ta metoda je znana kot prepleten video; V bistvu pošlje polovico zaslona v prvi "okvir", drugo polovico pa v naslednji "okvir".

Trenutno so prizori večinoma upodobljeni z uporabo progresivne tehnologije skeniranja. Je metoda prikazovanja, shranjevanja ali prenosa gibljivih slik, pri kateri so vse črte vsakega okvirja narisane zaporedno.

Kako deluje video kodek? 1. del: Osnove

No! Sedaj vemo, kako je slika digitalno predstavljena, kako so njene barve razporejene, koliko bitov na sekundo porabimo za prikaz videa, ali je bitna hitrost konstantna (CBR) ali spremenljiva (VBR). Poznamo določeno ločljivost z uporabo dane hitrosti sličic, poznamo številne druge izraze, kot so prepleteni video, PAR in nekateri drugi.

Odstranjevanje odvečnosti

Znano je, da videa brez stiskanja ni mogoče normalno uporabljati. Enourni video v ločljivosti 720p in 30 sličicah na sekundo bi zasedel 278 GB. Do te vrednosti pridemo tako, da pomnožimo 1280 x 720 x 24 x 30 x 3600 (širina, višina, biti na slikovno piko, FPS in čas v sekundah).

Uporaba algoritmi stiskanja brez izgub, tako kot DEFLATE (uporablja se v PKZIP, Gzip in PNG), ne bo dovolj zmanjšal zahtevane pasovne širine. Iskati moramo druge načine za stiskanje videa.

Če želite to narediti, lahko uporabite funkcije naše vizije. Boljši smo pri razlikovanju svetlosti kot barv. Videoposnetek je serija zaporednih slik, ki se skozi čas ponavljajo. Med sosednjimi sličicami iste scene so majhne razlike. Poleg tega vsak okvir vsebuje veliko področij z isto (ali podobno) barvo.

Barva, svetlost in naše oči

Naše oči so bolj občutljive na svetlost kot na barvo. To lahko vidite sami, če pogledate to sliko.

Kako deluje video kodek? 1. del: Osnove

Če tega ne vidite na levi polovici slike, so barve kvadratkov A и B so dejansko enaki, potem je to normalno. Naši možgani nas silijo, da smo bolj pozorni na svetlobo in sence kot na barve. Na desni strani med označenimi kvadratki je skakalec enake barve - tako mi (tj. naši možgani) zlahka ugotovimo, da sta dejansko enake barve.

Poglejmo (poenostavljeno), kako delujejo naše oči. Oko je kompleksen organ, sestavljen iz številnih delov. Najbolj pa nas zanimajo stožci in palice. Oko vsebuje približno 120 milijonov paličic in 6 milijonov stožcev.

Razmislimo o zaznavanju barve in svetlosti kot ločenih funkcij določenih delov očesa (pravzaprav je vse nekoliko bolj zapleteno, vendar ga bomo poenostavili). Paličaste celice so odgovorne predvsem za svetlost, stožčaste celice pa za barvo. Stožci so razdeljeni v tri vrste, odvisno od pigmenta, ki ga vsebujejo: S-stožci (modri), M-stožci (zeleni) in L-stožci (rdeči).

Ker imamo veliko več paličic (svetlosti) kot stožcev (barve), lahko sklepamo, da smo bolj sposobni razlikovati prehode med temno in svetlobo kot barve.

Kako deluje video kodek? 1. del: Osnove

Funkcije kontrastne občutljivosti

Raziskovalci eksperimentalne psihologije in mnogih drugih področij so razvili številne teorije o človeškem vidu. In eden od njih se imenuje funkcije kontrastne občutljivosti. Povezani so s prostorsko in časovno osvetlitvijo. Skratka, gre za to, koliko sprememb je potrebnih, preden jih opazovalec opazi. Upoštevajte množino besede "funkcija". To je posledica dejstva, da lahko merimo funkcije kontrastne občutljivosti ne samo za črno-bele slike, ampak tudi za barvne. Rezultati teh poskusov kažejo, da so naše oči v večini primerov bolj občutljive na svetlost kot na barvo.

Ker vemo, da smo bolj občutljivi na svetlost slike, lahko to dejstvo poskusimo izkoristiti.

Barvni model

Malo smo ugotovili, kako delati z barvnimi slikami po shemi RGB. Obstajajo tudi drugi modeli. Obstaja model, ki ločuje svetilnost od barvnosti in je znan kot YCbCr. Mimogrede, obstajajo tudi drugi modeli, ki imajo podobno delitev, vendar bomo upoštevali samo tega.

V tem barvnem modelu Y je predstavitev svetlosti in uporablja tudi dva barvna kanala: Cb (bogata modra) in Cr (bogata rdeča). YCbCr je mogoče izpeljati iz RGB, možna pa je tudi obratna pretvorba. S tem modelom lahko ustvarimo barvne slike, kot jih vidimo spodaj:

Kako deluje video kodek? 1. del: Osnove

Pretvarjanje med YCbCr in RGB

Nekdo bo ugovarjal: kako je mogoče dobiti vse barve, če ne uporabimo zelene?

Za odgovor na to vprašanje pretvorimo RGB v YCbCr. Uporabimo koeficiente, sprejete v standardu BT.601, ki ga je priporočila enota ITU-R. Ta oddelek postavlja standarde za digitalni video. Na primer: kaj je 4K? Kakšna naj bo hitrost sličic, ločljivost, barvni model?

Najprej izračunajmo svetlost. Uporabimo konstante, ki jih predlaga ITU, in zamenjajmo vrednosti RGB.

Y = 0.299R + 0.587G + 0.114B

Ko imamo svetlost, bomo ločili modro in rdečo barvo:

Cb = 0.564(B - Y)

Cr = 0.713(R - Y)

Prav tako lahko pretvorimo nazaj in celo postanemo zeleni z uporabo YCbCr:

R = Y + 1.402Cr

B = Y + 1.772Cb

G = Y - 0.344Cb - 0.714Cr

Običajno zasloni (monitorji, televizorji, zasloni itd.) uporabljajo samo model RGB. Toda ta model je mogoče organizirati na različne načine:

Kako deluje video kodek? 1. del: Osnove

Barvno podvzorčenje

S sliko, predstavljeno kot kombinacija svetilnosti in barvnosti, lahko s selektivnim odstranjevanjem informacij izkoristimo večjo občutljivost človeškega vidnega sistema na svetilnost kot na barvnost. Podvzorčenje barvnosti je metoda kodiranja slik z uporabo manjše ločljivosti za barvnost kot za svetilnost.

Kako deluje video kodek? 1. del: Osnove

Koliko je dopustno zmanjšati barvno ločljivost?! Izkazalo se je, da že obstaja nekaj diagramov, ki opisujejo, kako ravnati z ločljivostjo in združevanjem (končna barva = Y + Cb + Cr).

Te sheme so znane kot sistemi za zmanjšanje vzorčenja in so izraženi kot 3-kratno razmerje - a:x:y, ki določa število vzorcev signalov svetilnosti in barvne razlike.

a — horizontalni standard vzorčenja (običajno enak 4)
x — število barvnih vzorcev v prvi vrsti slikovnih pik (vodoravna ločljivost glede na a)
y — število sprememb v vzorcih barvnosti med prvo in drugo vrstico slikovnih pik.

Izjema je 4:1:0, ki zagotavlja en vzorec barvnosti v vsakem bloku ločljivosti svetilnosti 4 krat 4.

Pogoste sheme, ki se uporabljajo v sodobnih kodekih:

  • 4:4:4 (brez zmanjšanja vzorčenja)
  • 4:2:2
  • 4:1:1
  • 4:2:0
  • 4:1:0
  • 3:1:1

YCbCr 4:2:0 - primer fuzije

Tukaj je združena slika z uporabo YCbCr 4:2:0. Upoštevajte, da porabimo le 12 bitov na slikovno piko.

Kako deluje video kodek? 1. del: Osnove

Tako izgleda ista slika, kodirana z glavnimi vrstami barvnega podvzorčenja. Prva vrstica je končni YCbCr, spodnja vrstica prikazuje barvno ločljivost. Zelo spodobni rezultati, če upoštevamo rahlo izgubo kakovosti.

Kako deluje video kodek? 1. del: Osnove

Se spomnite, ko smo šteli 278 GB prostora za shranjevanje enourne video datoteke pri ločljivosti 720p in 30 slikah na sekundo? Če uporabimo YCbCr 4:2:0, se ta velikost zmanjša za polovico - 139 GB. Zaenkrat je še daleč od sprejemljivega rezultata.

Histogram YCbCr lahko dobite sami z uporabo FFmpeg. Na tej sliki modra prevladuje nad rdečo, kar je jasno vidno na samem histogramu.

Kako deluje video kodek? 1. del: Osnove

Barva, svetlost, barvni razpon - video pregled

Priporočamo ogled tega čudovitega videa. Pojasnjuje, kaj je svetlost, in na splošno so vse pike pikčaste ё o svetlosti in barvi.

Vrste okvirjev

Gremo naprej. Poskusimo odpraviti časovno redundanco. Najprej pa opredelimo nekaj osnovne terminologije. Recimo, da imamo film s 30 slikami na sekundo, tukaj so njegove prve 4 slike:

Kako deluje video kodek? 1. del: Osnove Kako deluje video kodek? 1. del: Osnove Kako deluje video kodek? 1. del: Osnove Kako deluje video kodek? 1. del: Osnove

V okvirjih lahko opazimo veliko ponavljanja: na primer modro ozadje, ki se od okvirja do okvirja ne spreminja. Da bi rešili ta problem, jih lahko abstraktno razvrstimo v tri vrste okvirjev.

I-okvir (Intro okvir)

I-okvir (referenčni okvir, ključni okvir, notranji okvir) je samostojen. Ne glede na to, kaj želite vizualizirati, je I-okvir v bistvu statična fotografija. Prvi okvir je običajno I-okvir, vendar bomo I-okvirje redno opazovali tudi med ne prvimi okvirji.

Kako deluje video kodek? 1. del: Osnove

P-okvir (Purejen okvir)

P-okvir (prediktivni okvir) izkorišča dejstvo, da je skoraj vedno mogoče trenutno sliko reproducirati s prejšnjim okvirjem. Na primer, v drugem okvirju je edina sprememba žogica, ki se premika naprej. Okvir 2 lahko dobimo tako, da preprosto rahlo spremenimo okvir 1 in uporabimo samo razliko med tema okvirjema. Za izdelavo okvirja 2 se sklicujemo na prejšnji okvir 1.

Kako deluje video kodek? 1. del: OsnoveKako deluje video kodek? 1. del: Osnove

B-okvir (Bi-prediktivni okvir)

Kaj pa povezave ne le do preteklih, ampak tudi do prihodnjih okvirjev za še boljše stiskanje?! To je v bistvu B-okvir (dvosmerni okvir).

Kako deluje video kodek? 1. del: OsnoveKako deluje video kodek? 1. del: OsnoveKako deluje video kodek? 1. del: Osnove

Vmesni umik

Te vrste okvirjev se uporabljajo za zagotavljanje najboljše možne kompresije. Kako se to zgodi, si bomo ogledali v naslednjem razdelku. Zaenkrat naj omenimo, da je najbolj "drag" glede porabljenega pomnilnika I-okvir, P-okvir je opazno cenejši, najbolj donosna možnost za video pa je B-okvir.

Kako deluje video kodek? 1. del: Osnove

Časovna redundanca (predvidevanje med okvirji)

Poglejmo, katere možnosti imamo za zmanjšanje ponavljanja skozi čas. To vrsto redundance lahko rešimo z metodami navzkrižnega predvidevanja.

Za kodiranje zaporedja okvirjev 0 in 1 bomo poskušali porabiti čim manj bitov.

Kako deluje video kodek? 1. del: Osnove

Lahko proizvajamo odštevanje, okvir 1 preprosto odštejemo od okvirja 0. Dobimo okvir 1, uporabimo le razliko med njim in prejšnjim okvirjem, pravzaprav le kodiramo nastali ostanek.

Kako deluje video kodek? 1. del: Osnove

Kaj pa, če vam povem, da obstaja še boljša metoda, ki uporablja še manj bitov?! Najprej razdelimo okvir 0 na jasno mrežo, sestavljeno iz blokov. Nato bomo poskušali uskladiti bloke iz okvira 0 z okvirjem 1. Z drugimi besedami, ocenili bomo gibanje med okvirji.

Iz Wikipedije - kompenzacija gibanja blokov

Kompenzacija gibanja bloka razdeli trenutni okvir na bloke, ki se ne prekrivajo, vektor kompenzacije gibanja pa poroča o izvoru blokov (pogosta napačna predstava je, da prejšnji okvir je razdeljen na bloke, ki se ne prekrivajo, vektorji za kompenzacijo gibanja pa povedo, kam gredo ti bloki. Toda v resnici je ravno obratno - ne analizira se prejšnji okvir, ampak naslednji; ni jasno, kje se bloki premikajo, ampak od kod prihajajo). Običajno se izvorni bloki prekrivajo v izvornem okviru. Nekateri algoritmi za stiskanje videa sestavijo trenutni okvir iz delov niti enega, ampak več predhodno poslanih okvirjev.

Kako deluje video kodek? 1. del: Osnove

Med postopkom ocenjevanja vidimo, da se je žogica premaknila iz (x= 0, y=25) do (x= 6, y=26), vrednosti x и y določi vektor gibanja. Drug korak, ki ga lahko naredimo za ohranitev bitov, je, da kodiramo samo razliko vektorjev gibanja med zadnjim položajem bloka in predvidenim, tako da bo končni vektor gibanja (x=6-0=6, y=26-25=1 ).

V resnični situaciji bi bila ta krogla razdeljena na n blokov, vendar to ne spremeni bistva zadeve.

Predmeti v kadru se premikajo tridimenzionalno, zato se žogica lahko vizualno zmanjša (ali poveča, če se premakne proti gledalcu). Normalno je, da med bloki ne bo popolnega ujemanja. Tukaj je združen pogled naše ocene in realne slike.

Kako deluje video kodek? 1. del: Osnove

Vendar vidimo, da je pri uporabi ocene gibanja opazno manj podatkov za kodiranje kot pri uporabi enostavnejše metode izračuna delte med sličicami.

Kako deluje video kodek? 1. del: Osnove

Kako bi izgledala prava kompenzacija gibanja

Ta tehnika se uporablja za vse bloke hkrati. Pogosto bo naša pogojno gibljiva žoga razdeljena na več blokov hkrati.

Kako deluje video kodek? 1. del: Osnove

Sami lahko pridobite občutek za te koncepte z uporabo Jupiter.

Če želite videti vektorje gibanja, lahko ustvarite zunanji predvideni video z uporabo ffmpeg.

Kako deluje video kodek? 1. del: Osnove

Uporabite lahko tudi Intel Video Pro Analyzer (plača se, vendar obstaja brezplačna preizkusna različica, ki je omejena samo na prvih deset sličic).

Kako deluje video kodek? 1. del: Osnove

Prostorska redundanca (notranja napoved)

Če analiziramo vsak okvir v videu, bomo našli veliko medsebojno povezanih področij.

Kako deluje video kodek? 1. del: Osnove

Pojdimo skozi ta primer. Ta prizor je v glavnem sestavljen iz modre in bele barve.

Kako deluje video kodek? 1. del: Osnove

To je I-okvir. Za predvidevanje ne moremo vzeti prejšnjih okvirjev, lahko pa jih stisnemo. Kodirajmo izbiro rdečega bloka. Če pogledamo njegove sosede, opazimo, da je okoli njega nekaj barvnih trendov.

Kako deluje video kodek? 1. del: Osnove

Predvidevamo, da se barve širijo navpično v okvirju. Kar pomeni, da bo barva neznanih pikslov vsebovala vrednosti svojih sosedov.

Kako deluje video kodek? 1. del: Osnove

Takšna napoved se lahko izkaže za napačno. Zato morate uporabiti to metodo (notranja napoved) in nato odšteti realne vrednosti. To nam bo dalo preostali blok, kar bo povzročilo veliko bolj stisnjeno matriko v primerjavi z izvirnikom.

Kako deluje video kodek? 1. del: Osnove

Če želite vaditi z notranjimi napovedmi, lahko ustvarite videoposnetek makroblokov in njihovih napovedi z uporabo ffmpeg. Če želite razumeti pomen vsake barve bloka, boste morali prebrati dokumentacijo ffmpeg.

Kako deluje video kodek? 1. del: Osnove

Lahko pa uporabite Intel Video Pro Analyzer (kot sem omenil zgoraj, je brezplačna preizkusna različica omejena na prvih 10 sličic, vendar vam bo to na začetku zadostovalo).

Kako deluje video kodek? 1. del: Osnove

Drugi del: Kako deluje video kodek

Vir: www.habr.com

Dodaj komentar