Kako radi video kodek? 1. dio: Osnove

Drugi dio: Kako radi video kodek

Bilo koji rasterski slika može se predstaviti kao dvodimenzionalna matricaKad su u pitanju boje, ideja se može razviti razmatranjem slike kao trodimenzionalna matrica, u kojem se dodatne dimenzije koriste za pohranjivanje podataka za svaku od boja.

Ako konačnu boju promatramo kao kombinaciju takozvanih primarnih boja (crvene, zelene i plave), 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 pikselom (elementom slike). Svaki piksel sadrži informacije o intenzitetu (obično kao numeričku vrijednost) svake boje. Na primjer, crveni piksel znači da sadrži 0 zelene, 0 plave i maksimalno crvene. Ružičasti piksel može se formirati kombiniranjem triju boja. Korištenjem numeričkog raspona od 0 do 255, ružičasti piksel se definira kao Crvena = 255, Zelena = 192 и Plava = 203.

Kako radi video kodek? 1. dio: Osnove

Ovaj članak je objavljen uz podršku EDISON-a.

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

Alternativne metode kodiranja slika 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 koliko zahtijeva RGB model. Ovaj model vam također omogućuje korištenje 2D matrice umjesto 3D matrice za predstavljanje svake boje. To štedi memoriju, ali rezultira manjim rasponom boja.

Kako radi video kodek? 1. dio: Osnove

RGB

Na primjer, pogledajte sliku ispod. Prva strana je potpuno obojena. Ostale su crvena, zelena i plava ravnina (intenziteti odgovarajućih boja prikazani su u sivoj skali).

Kako radi video kodek? 1. dio: Osnove

Vidimo da su crveni tonovi u originalu na istim mjestima gdje su vidljivi najsvjetliji dijelovi drugog lica. U međuvremenu, doprinos plave boje prvenstveno je vidljiv samo u Mariovim očima (konačno lice) i elementima njegove odjeće. Imajte na umu da je mjesto gdje sve tri ravnine boja najmanje doprinose (najtamniji dijelovi slike) u Mariovim brkovima.

Pohranjivanje intenziteta svake boje zahtijeva određeni broj bitova - ta se vrijednost naziva dubina bitaRecimo da se 8 bitova (na temelju vrijednosti od 0 do 255) troši na jednu ravninu boje. Tada imamo dubinu boje od 24 bita (8 bitova * 3 R/G/B ravnine).

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

Još jedno svojstvo s kojim se suočavamo pri radu sa slikama/videozapisima je omjer slike, koji opisuje normalan proporcionalni odnos između širine i visine slike ili piksela.

Kad ljudi kažu da je određeni film ili slika 16 puta 9, obično misle omjer slike zaslona (ALI - od Omjer slike zaslona). Međutim, ponekad mogu postojati različiti oblici pojedinačnih piksela - u ovom slučaju govorimo o omjer piksela (PAR - od Omjer slike piksela).

Kako radi video kodek? 1. dio: Osnove

Kako radi video kodek? 1. dio: Osnove

Napomena za domaćicu: DVD odgovara DAR 4 puta 3

Iako je stvarna rezolucija DVD-a 704×480, on i dalje održava omjer slike 4:3 jer je PAR 10:11 (704×10 / 480×11).

Pa, konačno, možemo odrediti video kao niz n okviri za razdoblje vremena, što se može smatrati dodatnom dimenzijom. A n onda je to brzina 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 - brzina prijenosa.

brzina prijenosa = širina * visina * dubina u bitu * broj sličica u sekundi

Na primjer, video od 30 fps, 24 bita po pikselu, rezolucije 480x240 zahtijevao bi 82,944,000 bita u sekundi ili 82,944 Mbps (30x480x240x24) - ali to je ako se ne koristi metoda kompresije.

Ako je brzina prijenosa gotovo konstantno, onda se to zove konstantna brzina prijenosa (CBR - od konstantna brzina bita). Ali može i varirati, u kojem slučaju se naziva promjenjiva brzina prijenosa podataka (VBR - od promjenjiva brzina prijenosa podataka).

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

Kako radi video kodek? 1. dio: Osnove

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

Danas se renderiranje scene uglavnom vrši pomoću progresivne tehnologije skeniranjaTo je metoda prikazivanja, pohranjivanja ili prijenosa pokretnih slika u kojoj se sve linije svakog kadra crtaju sekvencijalno.

Kako radi video kodek? 1. dio: Osnove

E, to je to! Sada znamo kako se slike digitalno prikazuju, kako su im boje strukturirane, koliko je bitova u sekundi potrebno za prikaz videa, je li riječ o konstantnoj brzini prijenosa (CBR) ili promjenjivoj brzini prijenosa (VBR). Također smo naučili o zadanoj rezoluciji korištenjem zadane brzine kadrova i upoznali smo se s mnogim drugim pojmovima, kao što su isprepleteni video, PAR i nekoliko drugih.

Uklanjanje redundancije

Dobro je poznato da je nekomprimirani video nemoguće pravilno koristiti. Videozapis u trajanju od sat vremena u rezoluciji od 720p i 30 sličica u sekundi zauzeo bi 278 GB. Do te vrijednosti dolazi se 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-a (koristi se u PKZIP-u, Gzipu i PNG-u), neće dovoljno smanjiti potrebnu propusnost. Moraju se pronaći druge metode kompresije videa.

Da bismo to učinili, možemo iskoristiti osobitosti našeg vida. Bolje razlikujemo svjetlinu od boje. Videozapis je skup uzastopnih slika koje se ponavljaju tijekom vremena. Razlike između susjednih kadrova jedne scene su male. Nadalje, svaki kadar 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. To možete i sami vidjeti gledajući ovu sliku.

Kako radi video kodek? 1. dio: Osnove

Ako ne vidite da su boje kvadrata u lijevoj polovici slike A и B Ako su kvadrati doista identični, to je normalno. Naš mozak nas tjera da više pažnje obraćamo na svjetlo i sjenu nego na boju. Na desnoj strani, između kvadrata, nalazi se most iste boje - pa mi (naš mozak) lako utvrđujemo da su zapravo iste boje.

Pogledajmo pojednostavljeno kako naše oči funkcioniraju. Oko je složen organ sastavljen od mnogo dijelova. Međutim, nas najviše zanimaju štapići i čunjići. Oko sadrži oko 120 milijuna štapića i 6 milijuna čunjića.

Razmotrimo percepciju boje i svjetline kao odvojene funkcije određenih dijelova oka (u stvarnosti su stvari nešto složenije, ali pojednostavit ćemo). Štapići su prvenstveno odgovorni za svjetlinu, dok su čepići odgovorni za boju. Čepići se dijele u tri vrste, ovisno o pigmentu koji sadrže: S-čepići (plavi), M-čepići (zeleni) i L-čepići (crveni).

Budući da imamo mnogo više štapića (luminancija) nego čunjića (boja), može se zaključiti da bolje razlikujemo prijelaze između tame i svjetla nego boje.

Kako radi video kodek? 1. dio: Osnove

Funkcije osjetljivosti na kontrast

Istraživači u eksperimentalnoj psihologiji i mnogim drugim područjima razvili su mnoge teorije o ljudskom vidu. Jedna od njih se zove funkcije osjetljivosti na kontrastPovezani su s prostornom i vremenskom rasvjetom. Ukratko, odnose se na to koliko je promjene potrebno prije nego što je promatrač primijeti. Zapazite množinu riječi "funkcija". To je zato što funkcije osjetljivosti kontrasta možemo mjeriti ne samo za crno-bijele slike već i za slike u boji. Rezultati ovih eksperimenata pokazuju da su nam u većini slučajeva oči osjetljivije na luminanciju nego na boju.

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

Model u boji

Malo smo obradili kako raditi sa slikama u boji koristeći RGB prostor boja. Postoje i drugi modeli. Jedan model koji odvaja luminanciju od krominancije poznat je kao YCbCrUsput, postoje i drugi modeli koji prave sličnu podjelu, ali mi ćemo razmotriti samo ovaj.

U ovom modelu boja Y — je prikaz svjetline, a koriste se dva kanala boja: Cb (bogata plava) i Cr (zasićena crvena). YCbCr se može izvesti iz RGB-a, a moguća je i obrnuta transformacija. Korištenjem ovog modela možemo stvoriti slike u punoj boji, kao što je prikazano dolje:

Kako radi video kodek? 1. dio: Osnove

Pretvaranje između YCbCr i RGB

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

Kako bismo odgovorili na ovo pitanje, pretvorit ćemo RGB u YCbCr. Koristit ćemo koeficijente usvojene u standardu. Bt.601, što je preporučila jedinica ITU-ROvaj odjeljak definira standarde digitalnog videa. Na primjer: što je 4K? Kolika bi trebala biti brzina sličica u sekundi, razlučivost i model boja?

Prvo, izračunajmo luminanciju. Koristit ćemo konstante koje je predložio ITU i zamijeniti RGB vrijednosti.

Y = 0.299R + 0.587G + 0.114B

Nakon što odredimo svjetlinu, odvajamo plavu i crvenu boju:

Cb = 0.564(B - Y)

Cr = 0.713(R - Y)

A možemo pretvoriti i natrag, pa čak i dobiti zelenu boju koristeći YCbCr:

R = Y + 1.402Cr

B = Y + 1.772Cb

G = Y - 0.344Cb - 0.714Cr

Zasloni (monitori, televizori, ekrani itd.) obično koriste samo RGB model. Međutim, ovaj model može se organizirati na različite načine:

Kako radi video kodek? 1. dio: Osnove

Poduzorkovanje boja

S slikom predstavljenom kao kombinacijom luminancije i krominancije, možemo iskoristiti veću osjetljivost ljudskog vidnog sustava na luminanciju nego na krominanciju selektivnim uklanjanjem informacija. Poduzorkovanje kroma je metoda kodiranja slike koja koristi nižu rezoluciju za krominanciju nego za luminanciju.

Kako radi video kodek? 1. dio: Osnove

Koliko je prihvatljivo smanjiti razlučivost boja?! Ispada da već postoje neke sheme koje opisuju kako se nositi s razlučivošću i spajanjem (Final Color = Y + Cb + Cr).

Ove sheme su poznate kao sustavi poduzorkovanja i izraženi su kao trostruki omjer - a:x:y, koji određuje broj uzoraka signala luminancije i razlike boja.

a — horizontalni standard uzorkovanja (obično jednak 4)
x — broj uzoraka boja u prvom redu piksela (horizontalna rezolucija u odnosu na a)
y — broj promjena uzoraka boja između prvog i drugog reda piksela.

Iznimka je 4:1:0, pružajući jedan uzorak kroma u svakom bloku rezolucije luminancije 4x4.

Uobičajene sheme korištene u modernim kodecima:

  • 4:4:4 (bez poduzorkovanja)
  • 4:2:2
  • 4:1:1
  • 4:2:0
  • 4:1:0
  • 3:1:1

YCbCr 4:2:0 - primjer spajanja

Evo spojenog fragmenta slike pomoću YCbCr 4:2:0. Imajte na umu da koristimo samo 12 bitova po pikselu.

Kako radi video kodek? 1. dio: Osnove

Ovako izgleda ista slika kodirana s glavnim vrstama chroma poduzorkovanja. Prvi red je konačni YCbCr, donji red prikazuje chroma rezoluciju. Ovo su prilično respektabilni rezultati, s obzirom na mali gubitak kvalitete.

Kako radi video kodek? 1. dio: Osnove

Sjećate se kako smo izračunali 278 GB prostora na disku potrebnog za pohranu video datoteke u trajanju od sat vremena u rezoluciji od 720p i 30 fps? Ako koristimo YCbCr 4:2:0, ta bi se veličina prepolovila na 139 GB. Još uvijek daleko od prihvatljivog.

Možete sami generirati YCbCr histogram pomoću FFmpeg-a. Na ovoj slici je plava dominantnija od crvene, što je jasno vidljivo na samom histogramu.

Kako radi video kodek? 1. dio: Osnove

Boja, svjetlina i raspon boja - video pregled

Toplo preporučujem pogledati ovaj sjajan video. Objašnjava što je svjetlina i sve je jasno. ё o svjetlini i boji.

Reproduciraj videozapis

Vrste okvira

Idemo dalje. Pokušajmo eliminirati vremensku redundanciju. Ali prvo, definirajmo neke osnovne termine. Recimo da imamo film s 30 sličica u sekundi. Evo njegova prva četiri kadra:

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 okvirima vidimo mnogo ponavljanja: na primjer, plava pozadina ostaje ista od okvira do okvira. Kako bismo to riješili, možemo ih apstraktno klasificirati u tri vrste okvira.

I-okvir (Iuvodni okvir)

I-okvir (referentni okvir, ključni okvir ili intraokvir) je samostalan. Bez obzira na to što treba vizualizirati, I-okvir je u biti statična fotografija. Prvi okvir je obično I-okvir, ali redovito ćemo vidjeti I-okvire u okvirima daleko od prvog.

Kako radi video kodek? 1. dio: Osnove

P-okvir (Ppreuređeni okvir)

P-okvir (prediktivni okvir) koristi činjenicu da se trenutna slika gotovo uvijek može reproducirati pomoću prethodnog okvira. Na primjer, u okviru 2, jedina promjena je kretanje lopte naprijed. Okvir 2 možemo dobiti jednostavnom malom modifikacijom okvira 1, koristeći samo razliku između dva okvira. Za konstrukciju okvira 2, referenciramo 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 referenciranjem ne samo prošlih, već i budućih okvira, kako bi se osigurala još bolja kompresija?! To je u biti ono što je 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 kako bi se osigurala najbolja kompresija. O tome kako to funkcionira raspravljat ćemo u sljedećem odjeljku. Za sada imajte na umu da je I-okvir najintenzivniji u pogledu memorije, P-okvir je znatno jeftiniji, a B-okvir je najučinkovitija opcija za video.

Kako radi video kodek? 1. dio: Osnove

Vremenska redundancija (predviđanje među okvirima)

Razmotrimo opcije koje su nam dostupne za minimiziranje vremenskih ponavljanja. Ovu vrstu redundancije riješit ćemo korištenjem metoda međusobnog predviđanja.

Pokušajmo potrošiti što manje bitova za kodiranje niza okvira 0 i 1.

Kako radi video kodek? 1. dio: Osnove

Možemo proizvesti oduzimanje, jednostavno oduzimamo kadar 1 od kadra 0. Dobivamo kadar 1, ali koristimo samo razliku između njega i prethodnog kadra i zapravo kodiramo samo rezultirajući ostatak.

Kako radi video kodek? 1. dio: Osnove

Ali što ako vam kažem da postoji još bolja metoda, ona koja koristi još manje bitova?! Prvo, razbijmo kadar 0 u urednu mrežu blokova. Zatim pokušajmo uskladiti blokove iz kadra 0 sa kadrom 1. Drugim riječima, procijenimo kretanje između kadrova.

Iz Wikipedije - kompenzacija kretanja bloka

Kompenzacija kretanja blokova dijeli trenutni okvir na blokove koji se ne preklapaju, a vektor kompenzacije kretanja govori odakle blokovi dolaze (uobičajena zabluda je da prijašnji Okvir je podijeljen na blokove koji se ne preklapaju, a vektori kompenzacije pokreta pokazuju gdje se ti blokovi kreću. Zapravo, istina je suprotna - ne analizira se prethodni okvir, već sljedeći, određujući ne gdje se blokovi kreću, već odakle dolaze. Obično se izvorni blokovi preklapaju unutar izvornog okvira. Neki algoritmi kompresije videa sastavljaju trenutni okvir iz dijelova ne samo jednog, već nekoliko prethodno prenesenih okvira.

Kako radi video kodek? 1. dio: Osnove

U procesu evaluacije vidimo da se lopta pomaknula iz (x= 0, y=25) na (x= 6, y=26), vrijednosti x и y definirati vektor gibanja. Drugi korak koji možemo poduzeti za očuvanje bitova jest kodiranje samo razlike vektora gibanja između zadnje pozicije bloka i predviđene, tako da će konačni vektor gibanja biti (x=6-0=6, y=26-25=1).

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

Predmeti u kadru kreću se u tri dimenzije, pa kako se lopta kreće, može izgledati manja (ili veća ako se kreće prema gledatelju). Normalno je da blokovi nisu savršeno poravnati. Evo kompozitne slike naše procjene i stvarne slike.

Kako radi video kodek? 1. dio: Osnove

Ali vidimo da kada koristimo procjenu pokreta, postoji znatno manje podataka za kodiranje nego kada koristimo jednostavniju metodu izračuna delte između okvira.

Kako radi video kodek? 1. dio: Osnove

Kako će izgledati stvarna kompenzacija pokreta?

Ova se tehnika primjenjuje na sve blokove odjednom. Često će se naša zamišljena lopta u pokretu podijeliti na nekoliko blokova odjednom.

Kako radi video kodek? 1. dio: Osnove

Ove koncepte možete i sami iskusiti koristeći Jupiter.

Za prikaz vektora kretanja možete stvoriti videozapis s vanjskim predviđanjem pomoću ffmpeg.

Kako radi video kodek? 1. dio: Osnove

Također možete koristiti Intel Video Pro analizator (Plaća se, ali postoji besplatna probna verzija koja je ograničena na samo prvih deset kadrova).

Kako radi video kodek? 1. dio: Osnove

Prostorna redundancija (interna prognoza)

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

Kako radi video kodek? 1. dio: Osnove

Prođimo kroz ovaj primjer. Ova scena je uglavnom plavo-bijela.

Kako radi video kodek? 1. dio: Osnove

Ovo je I-okvir. Ne možemo koristiti prethodne okvire za predviđanje, ali ga možemo komprimirati. Kodirat ćemo odabir crvenog bloka. Ako pogledamo njegove susjede, primijetit ćemo neke trendove boja oko njega.

Kako radi video kodek? 1. dio: Osnove

Pretpostavljamo da su boje u okviru raspoređene vertikalno. To znači da će boja nepoznatih piksela sadržavati vrijednosti njihovih susjeda.

Kako radi video kodek? 1. dio: Osnove

Ovo predviđanje može se pokazati netočnim. Upravo zato moramo primijeniti ovu metodu (unutarnje predviđanje), a zatim oduzeti stvarne vrijednosti. To će nam dati rezidualni blok, što će rezultirati puno komprimiranijom matricom u usporedbi s originalom.

Kako radi video kodek? 1. dio: Osnove

Ako želite vježbati s intra-predviđanjem, možete stvoriti videozapis s makroblokovima i njihovim predviđanjima pomoću ffmpega. Da biste razumjeli značenje svake boje bloka, morat ćete se konzultirati s dokumentacijom ffmpega.

Kako radi video kodek? 1. dio: Osnove

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

Kako radi video kodek? 1. dio: Osnove

Drugi dio: Kako radi video kodek

Izvor: www.habr.com

Kupite pouzdan hosting za stranice s DDoS zaštitom, VPS VDS poslužiteljima 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster