Kako radi video kodek? 1. dio: Osnove

Drugi dio: Kako radi video kodek

Bilo koji raster slika može se prikazati u obliku dvodimenzionalna matrica. Kada je riječ o bojama, ideja se može razviti promatranjem slike kao trodimenzionalna matrica, u kojem se dodatne dimenzije koriste za pohranu podataka za svaku od boja.

Ako konačnu boju promatramo kao kombinaciju tzv. primarne boje (crvena, zelena i plava), u našoj trodimenzionalnoj matrici definiramo tri ravnine: prvu za crvenu, drugu za zelenu i posljednju za plavu.
Kako radi video kodek? 1. dio: Osnove
Svaku točku u ovoj matrici nazvat ćemo piksel (element slike). Svaki piksel sadrži informacije o intenzitetu (obično kao brojčanu vrijednost) svake boje. Na primjer, crveni piksel znači da sadrži 0 zelenih, 0 plavih i najviše crvenih. Ružičasti piksel može se oblikovati kombinacijom tri boje. Korištenjem numeričkog raspona od 0 do 255, ružičasti piksel se definira kao Crveno = 255, Zeleno = 192 и Plava = 203.

Kako radi video kodek? 1. dio: Osnove

Ovaj je članak objavljen uz potporu EDISON-a.

Mi se razvijamo aplikacije za video nadzor, video streaming, a također smo zaručeni video snimanje u kirurškoj sali.

Alternativni načini kodiranja slike u boji

Postoje mnogi drugi modeli za predstavljanje boja koje čine sliku. Na primjer, možete koristiti indeksiranu paletu, koja zahtijeva samo jedan bajt za predstavljanje svakog piksela, umjesto tri potrebna pri korištenju RGB modela. U takvom modelu moguće je koristiti 2D matricu umjesto 3D matrice za predstavljanje svake boje. Ovo štedi memoriju, ali daje manji raspon boja.

Kako radi video kodek? 1. dio: Osnove

RGB

Na primjer, pogledajte ovu sliku ispod. Prvo lice je potpuno oslikano. Ostale su crvena, zelena i plava ravnina (intenziteti odgovarajućih boja prikazani su u sivim tonovima).

Kako radi video kodek? 1. dio: Osnove

Vidimo da će nijanse crvene u originalu biti na istim mjestima gdje se promatraju najsvjetliji dijelovi drugog lica. Dok se plavi doprinos uglavnom može vidjeti samo u Mariovim očima (zadnje lice) i elementima njegove odjeće. Obratite pozornost na to gdje sve tri razine boja najmanje doprinose (najtamniji dijelovi slika) - Mariovi brkovi.

Za pohranjivanje intenziteta svake boje potreban je određeni broj bitova - ta se količina naziva dubina bita. Recimo da se potroši 8 bitova (na temelju vrijednosti od 0 do 255) po ravnini boja. Tada imamo dubinu boje od 24 bita (8 bita * 3 R/G/B ravnine).

Drugo svojstvo slike je dozvola, što je broj piksela u jednoj dimenziji. Često se označava kao širina × visina, kao na primjeru slike 4 puta 4 u nastavku.
Kako radi video kodek? 1. dio: Osnove

Još jedno svojstvo s kojim se susrećemo kada radimo sa slikama/video zapisima je omjer slike, opisujući normalni proporcionalni odnos između širine i visine slike ili piksela.

Kada kažu da je određeni film ili slika veličine 16 x 9, obično misle omjer slike zaslona (ALI - od Omjer slike zaslona). Međutim, ponekad mogu postojati različiti oblici pojedinih piksela - u ovom slučaju govorimo o tome omjer piksela (PAR - od Omjer slike piksela).

Kako radi video kodek? 1. dio: Osnove

Kako radi video kodek? 1. dio: Osnove

Napomena domaćici: DVD odgovara DAR 4 do 3

Iako je stvarna razlučivost DVD-a 704x480, on i dalje održava omjer slike 4:3 jer je PAR 10:11 (704x10 / 480x11).

I konačno, možemo odrediti video poput niza n okviri za razdoblje vremena, što se može smatrati dodatnom dimenzijom. A n tada je broj sličica u sekundi ili broj sličica u sekundi (FPS - od Okviri u sekundi).

Kako radi video kodek? 1. dio: Osnove

Broj bitova u sekundi potreban za prikaz videa je njegov brzina prijenosa - bitrate.

bitrate = širina * visina * dubina bita * sličica u sekundi

Na primjer, video od 30 fps, 24 bps, 480x240 zahtijevao bi 82,944,000 82,944 30 bps ili 480 240 Mbps (24xXNUMXxXNUMXxXNUMX) - ali to je ako se ne koristi metoda kompresije.

Ako je brzina prijenosa gotovo konstantan, onda se zove konstantna brzina prijenosa (CBR - od stalna bitna brzina). Ali također može varirati, u ovom slučaju se zove promjenjiva brzina prijenosa podataka (VBR - od promjenjiva brzina prijenosa).

Ovaj grafikon prikazuje ograničeni VBR, gdje se ne gubi previše bitova u slučaju potpuno tamnog okvira.

Kako radi video kodek? 1. dio: Osnove

Inženjeri su u početku razvili metodu za udvostručenje percipirane brzine kadrova video zaslona bez korištenja dodatne propusnosti. Ova metoda je poznata kao isprepleteni video; Uglavnom, pola zaslona šalje u prvom "frameu", a drugu polovicu u sljedećem "frameu".

Trenutačno se scene uglavnom prikazuju pomoću progresivne tehnologije skeniranja. To je metoda prikazivanja, pohranjivanja ili prijenosa pokretnih slika u kojoj se sve linije svakog okvira crtaju uzastopno.

Kako radi video kodek? 1. dio: Osnove

Dobro! Sada smo svjesni kako je slika predstavljena digitalno, kako su njezine boje raspoređene, koliko bitova u sekundi trošimo za prikaz videa, je li bit rate konstantan (CBR) ili promjenjiv (VBR). Znamo za danu razlučivost koristeći zadani broj sličica u sekundi, upoznati smo s mnogim drugim izrazima, kao što su interlaced video, PAR i neki drugi.

Uklanjanje suvišnosti

Poznato je da se video bez kompresije ne može normalno koristiti. Video od sat vremena u rezoluciji 720p i 30 sličica u sekundi zauzimao bi 278 GB. Do ove vrijednosti dolazimo množenjem 1280 x 720 x 24 x 30 x 3600 (širina, visina, bitovi po pikselu, FPS i vrijeme u sekundama).

Koristiti algoritmi kompresije bez gubitaka, poput DEFLATE (koristi se u PKZIP, Gzip i PNG), neće dovoljno smanjiti potrebnu propusnost. Moramo tražiti druge načine za komprimiranje videa.

Da biste to učinili, možete koristiti značajke naše vizije. Bolji smo u razlikovanju svjetline nego boje. Video je niz uzastopnih slika koje se ponavljaju tijekom vremena. Postoje male razlike između susjednih kadrova iste scene. Dodatno, svaki okvir sadrži mnoga područja koja koriste istu (ili sličnu) boju.

Boja, svjetlina i naše oči

Naše su oči osjetljivije na svjetlinu nego na boju. U to se možete i sami uvjeriti gledajući ovu sliku.

Kako radi video kodek? 1. dio: Osnove

Ako to ne vidite na lijevoj polovici slike boje kvadrata A и B su zapravo isti, onda je to normalno. Naš mozak nas tjera da više pažnje posvetimo svjetlu i sjeni nego boji. S desne strane između označenih kvadrata nalazi se skakač iste boje - tako da mi (tj. naš mozak) lako utvrđujemo da su zapravo iste boje.

Pogledajmo (pojednostavljeno) kako funkcioniraju naše oči. Oko je složen organ koji se sastoji od mnogo dijelova. Ipak, najviše nas zanimaju čunjevi i šipke. Oko sadrži oko 120 milijuna štapića i 6 milijuna čunjića.

Razmotrimo percepciju boje i svjetline kao zasebne funkcije određenih dijelova oka (u stvari, sve je nešto kompliciranije, ali ćemo to pojednostaviti). Štapićaste stanice uglavnom su odgovorne za svjetlinu, dok su čunjića odgovorne za boju. Čunjići se dijele u tri vrste, ovisno o pigmentu koji sadrže: S-čunjići (plavi), M-čunjići (zeleni) i L-čunjići (crveni).

Budući da imamo puno više štapića (svjetlina) nego čunjića (boja), možemo zaključiti da smo sposobniji razlikovati prijelaze između tamnog i svijetlog nego boje.

Kako radi video kodek? 1. dio: Osnove

Značajke osjetljivosti na kontrast

Istraživači eksperimentalne psihologije i mnogih drugih područja razvili su mnoge teorije o ljudskom vidu. A jedan od njih se zove funkcije kontrastne osjetljivosti. Oni se odnose na prostorno i vremensko osvjetljenje. Ukratko, radi se o tome koliko je promjena potrebno prije nego što ih promatrač primijeti. Obratite pažnju na množinu riječi "funkcija". To je zbog činjenice da možemo mjeriti funkcije kontrastne osjetljivosti ne samo za crno-bijele slike, već i za one u boji. Rezultati ovih eksperimenata pokazuju da su u većini slučajeva naše oči osjetljivije na svjetlinu nego na boju.

Budući da znamo da smo osjetljiviji na svjetlinu slike, možemo pokušati iskoristiti tu činjenicu.

Model u boji

Shvatili smo malo kako raditi sa slikama u boji koristeći RGB shemu. Postoje i drugi modeli. Postoji model koji odvaja svjetlinu od krome i poznat je kao YCbCr. Inače, postoje i drugi modeli koji čine sličnu podjelu, ali mi ćemo razmotriti samo ovaj.

U ovom modelu boje Y je prikaz svjetline, a također koristi dva kanala boja: Cb (bogato plava) i Cr (bogata crvena). YCbCr se može izvesti iz RGB, a moguća je i obrnuta konverzija. Pomoću ovog modela možemo stvoriti slike u punoj boji kao što vidimo u nastavku:

Kako radi video kodek? 1. dio: Osnove

Pretvorite između YCbCr i RGB

Netko će prigovoriti: kako je moguće dobiti sve boje ako se ne koristi zelena?

Kako bismo odgovorili na ovo pitanje, pretvorimo RGB u YCbCr. Upotrijebimo koeficijente usvojene u standardu Bt.601, što je preporučila jedinica ITU-R. Ovaj odjel postavlja standarde za digitalni video. Na primjer: što je 4K? Koliki bi trebao biti broj sličica u sekundi, rezolucija, model boja?

Prvo izračunajmo svjetlinu. Upotrijebimo konstante koje predlaže ITU i zamijenimo RGB vrijednosti.

Y = 0.299R + 0.587G + 0.114B

Nakon što dobijemo svjetlinu, odvojit ćemo plavu i crvenu boju:

Cb = 0.564(B - Y)

Cr = 0.713(R - Y)

Također možemo pretvoriti natrag i čak postati zeleni koristeći YCbCr:

R = Y + 1.402Cr

B = Y + 1.772Cb

G = Y - 0.344Cb - 0.714Cr

Tipično, zasloni (monitori, televizori, ekrani itd.) koriste samo RGB model. Ali ovaj se model može organizirati na različite načine:

Kako radi video kodek? 1. dio: Osnove

Poduzorkovanje boja

Sa slikom predstavljenom kao kombinacija svjetline i boje, možemo iskoristiti veću osjetljivost ljudskog vidnog sustava na svjetlinu nego na boju selektivnim uklanjanjem informacija. Chroma subsampling je metoda kodiranja slika korištenjem manje rezolucije za boju nego za svjetlinu.

Kako radi video kodek? 1. dio: Osnove

Koliko je dopušteno smanjiti razlučivost boja?! Ispostavilo se da već postoje neki dijagrami koji opisuju kako rukovati rezolucijom i spajanjem (Rezultirajuća boja = Y + Cb + Cr).

Ove sheme su poznate kao sustavi za smanjivanje uzorkovanja i izraženi su kao trostruki omjer - a:x:y, koji određuje broj uzoraka signala svjetline i razlike u boji.

a — horizontalni standard uzorkovanja (obično jednak 4)
x — broj kroma uzoraka u prvom redu piksela (vodoravna razlučivost u odnosu na a)
y — broj promjena u uzorcima boje između prvog i drugog reda piksela.

Iznimka je 4:1:0, pružajući jedan uzorak boje u svakom bloku razlučivosti 4 puta 4.

Uobičajene sheme koje se koriste u modernim kodecima:

  • 4:4:4 (bez smanjenja uzorkovanja)
  • 4:2:2
  • 4:1:1
  • 4:2:0
  • 4:1:0
  • 3:1:1

YCbCr 4:2:0 - primjer fuzije

Ovdje je spojena slika koristeći YCbCr 4:2:0. Imajte na umu da trošimo samo 12 bita po pikselu.

Kako radi video kodek? 1. dio: Osnove

Ovako izgleda ista slika, kodirana s glavnim vrstama poduzorkovanja boja. Prvi red je konačni YCbCr, donji red prikazuje razlučivost boje. Vrlo pristojni rezultati, s obzirom na blagi gubitak kvalitete.

Kako radi video kodek? 1. dio: Osnove

Sjećate li se kad smo izbrojali 278 GB prostora za pohranu videodatoteke u trajanju od sat vremena u 720p rezoluciji i 30 sličica u sekundi? Ako koristimo YCbCr 4:2:0, tada će se ova veličina smanjiti za pola - 139 GB. Zasad je to još daleko od prihvatljivog rezultata.

YCbCr histogram možete dobiti sami koristeći FFmpeg. Na ovoj slici plava dominira nad crvenom što je jasno vidljivo na samom histogramu.

Kako radi video kodek? 1. dio: Osnove

Boja, svjetlina, raspon boja - video pregled

Preporučujemo da pogledate ovaj sjajan video. Objašnjava što je svjetlina i općenito su sve točkice točkaste ё o svjetlini i boji.

Vrste okvira

Idemo dalje. Pokušajmo eliminirati vremensku redundantnost. Ali prvo, definirajmo neke osnovne terminologije. Recimo da imamo film s 30 sličica u sekundi, evo prva 4 sličice:

Kako radi video kodek? 1. dio: Osnove Kako radi video kodek? 1. dio: Osnove Kako radi video kodek? 1. dio: Osnove Kako radi video kodek? 1. dio: Osnove

U kadrovima možemo vidjeti mnogo ponavljanja: na primjer, plavu pozadinu koja se ne mijenja od kadra do kadra. Da bismo riješili ovaj problem, možemo ih apstraktno klasificirati u tri vrste okvira.

I-okvir (Intro okvir)

I-okvir (referentni okvir, ključni okvir, unutarnji okvir) je samostalan. Bez obzira na to što želite vizualizirati, I-okvir je u biti statična fotografija. Prvi okvir je obično I-okvir, ali ćemo redovito promatrati I-okvir čak i među ne prvim okvirima.

Kako radi video kodek? 1. dio: Osnove

P-okvir (Predigirani okvir)

P-okvir (prediktivni okvir) iskorištava činjenicu da se gotovo uvijek trenutna slika može reproducirati korištenjem prethodnog okvira. Na primjer, u drugom kadru jedina promjena je kretanje lopte prema naprijed. Okvir 2 možemo dobiti jednostavnim malim modificiranjem okvira 1, koristeći samo razliku između ovih okvira. Da bismo konstruirali okvir 2, pozivamo se na prethodni okvir 1.

Kako radi video kodek? 1. dio: OsnoveKako radi video kodek? 1. dio: Osnove

B-okvir (Bi-prediktivni okvir)

Što je s poveznicama ne samo na prošle, već i na buduće okvire za još bolju kompresiju?! Ovo je u osnovi B-okvir (dvosmjerni okvir).

Kako radi video kodek? 1. dio: OsnoveKako radi video kodek? 1. dio: OsnoveKako radi video kodek? 1. dio: Osnove

Međusobno povlačenje

Ove vrste okvira koriste se za najbolju moguću kompresiju. Pogledat ćemo kako se to događa u sljedećem odjeljku. Za sada napomenimo da je “najskuplji” po utrošenoj memoriji I-okvir, P-okvir je osjetno jeftiniji, no najisplativija opcija za video je B-okvir.

Kako radi video kodek? 1. dio: Osnove

Vremenska redundantnost (predviđanje između okvira)

Pogledajmo koje mogućnosti imamo da smanjimo ponavljanje tijekom vremena. Ovu vrstu redundancije možemo riješiti pomoću metoda unakrsnog predviđanja.

Pokušat ćemo potrošiti što manje bitova za kodiranje niza okvira 0 i 1.

Kako radi video kodek? 1. dio: Osnove

Možemo proizvoditi oduzimanje, jednostavno oduzimamo okvir 1 od okvira 0. Dobivamo okvir 1, koristimo samo razliku između njega i prethodnog okvira, zapravo samo kodiramo dobiveni ostatak.

Kako radi video kodek? 1. dio: Osnove

Ali što ako vam kažem da postoji još bolja metoda koja koristi još manje bitova?! Prvo, razbijmo okvir 0 na jasnu mrežu koja se sastoji od blokova. Zatim ćemo pokušati spojiti blokove iz okvira 0 s okvirom 1. Drugim riječima, procijenit ćemo kretanje između okvira.

Iz Wikipedije - kompenzacija kretanja bloka

Kompenzacija pokreta blokova dijeli trenutni okvir na blokove koji se ne preklapaju, a vektor kompenzacije pokreta izvještava o podrijetlu blokova (česta zabluda je da prijašnji okvir je podijeljen na blokove koji se ne preklapaju, a vektori kompenzacije kretanja govore kamo ti blokovi idu. Ali zapravo je obrnuto - ne analizira se prethodni okvir, već sljedeći; nije jasno gdje se blokovi kreću, već odakle su došli). Tipično se izvorni blokovi preklapaju u izvornom okviru. Neki algoritmi kompresije videa sastavljaju trenutni okvir od dijelova ne jednog, već nekoliko prethodno poslanih okvira.

Kako radi video kodek? 1. dio: Osnove

Tijekom procesa evaluacije vidimo da se loptica pomaknula s (x= 0, y=25) do (x= 6, y=26), vrijednosti x и y odrediti vektor gibanja. Još jedan korak koji možemo učiniti da sačuvamo bitove je kodiranje samo razlike vektora kretanja između zadnje pozicije bloka i predviđene, tako da će konačni vektor kretanja biti (x=6-0=6, y=26-25=1 ).

U stvarnoj situaciji ova bi lopta bila podijeljena na n blokova, ali to ne mijenja bit stvari.

Objekti u kadru se pomiču trodimenzionalno, pa kada se lopta pomiče, može postati vizualno manja (ili veća ako se pomiče prema promatraču). Normalno je da neće biti savršenog podudaranja između blokova. Ovdje je kombinirani prikaz naše procjene i stvarne slike.

Kako radi video kodek? 1. dio: Osnove

Ali vidimo da kada koristimo procjenu kretanja, ima primjetno manje podataka za kodiranje nego kada koristimo jednostavniju metodu izračuna delta između okvira.

Kako radi video kodek? 1. dio: Osnove

Kako bi izgledala prava kompenzacija pokreta

Ova tehnika se primjenjuje na sve blokove odjednom. Često će naša uvjetna pokretna lopta biti podijeljena u nekoliko blokova odjednom.

Kako radi video kodek? 1. dio: Osnove

Sami možete steći osjećaj za ove koncepte pomoću Jupiter.

Da biste vidjeli vektore kretanja, možete izraditi vanjski video predviđanja pomoću ffmpeg.

Kako radi video kodek? 1. dio: Osnove

Također možete koristiti Intel Video Pro Analyzer (plaća se, ali postoji besplatna proba koja je ograničena samo na prvih deset sličica).

Kako radi video kodek? 1. dio: Osnove

Prostorna redundantnost (interna prognoza)

Ako analiziramo svaki kadar u videu, pronaći ćemo mnogo međusobno povezanih područja.

Kako radi video kodek? 1. dio: Osnove

Prođimo kroz ovaj primjer. Ova scena se uglavnom sastoji od plave i bijele boje.

Kako radi video kodek? 1. dio: Osnove

Ovo je I-okvir. Ne možemo uzeti prethodne okvire za predviđanje, ali ih možemo komprimirati. Kodirajmo odabir crvenog bloka. Ako pogledamo njegove susjede, primijetit ćemo da postoje neki trendovi boja oko njega.

Kako radi video kodek? 1. dio: Osnove

Pretpostavljamo da se boje okomito šire u okviru. Što znači da će boja nepoznatih piksela sadržavati vrijednosti svojih susjeda.

Kako radi video kodek? 1. dio: Osnove

Takva prognoza može se pokazati netočnom. Iz tog razloga morate primijeniti ovu metodu (interna prognoza), a zatim oduzeti stvarne vrijednosti. To će nam dati rezidualni blok, što će rezultirati mnogo komprimiranijom matricom u usporedbi s originalom.

Kako radi video kodek? 1. dio: Osnove

Ako želite vježbati s internim predviđanjima, možete stvoriti video makroblokova i njihovih predviđanja koristeći ffmpeg. Da biste razumjeli značenje svake boje bloka, morat ćete pročitati ffmpeg dokumentaciju.

Kako radi video kodek? 1. dio: Osnove

Ili možete koristiti Intel Video Pro Analyzer (kao što sam već spomenuo, besplatna probna verzija ograničena je na prvih 10 okvira, ali to će vam biti dovoljno u početku).

Kako radi video kodek? 1. dio: Osnove

Drugi dio: Kako radi video kodek

Izvor: www.habr.com

Dodajte komentar