Ako funguje video kodek? Časť 1: Základy

Druhá časť: Ako funguje video kodek

Akýkoľvek raster obraz môžu byť zastúpené vo forme dvojrozmerná matica. Pokiaľ ide o farby, nápad možno rozvinúť pohľadom na obrázok ako trojrozmerná matica, v ktorom sa na ukladanie údajov pre každú z farieb používajú ďalšie dimenzie.

Ak výslednú farbu považujeme za kombináciu tzv. základné farby (červená, zelená a modrá), v našej trojrozmernej matici definujeme tri roviny: prvú pre červenú, druhú pre zelenú a poslednú pre modrú.
Ako funguje video kodek? Časť 1: Základy
Každý bod v tejto matici budeme nazývať pixel (prvok obrázka). Každý pixel obsahuje informácie o intenzite (zvyčajne ako číselná hodnota) každej farby. Napríklad, červený pixel znamená, že obsahuje 0 zelenej, 0 modrej a maximálne červenej. Ružový pixel možno vytvoriť kombináciou troch farieb. Pomocou číselného rozsahu od 0 do 255 je ružový pixel definovaný ako Červená = 255, Zelená = 192 и Modrá = 203.

Ako funguje video kodek? Časť 1: Základy

Tento článok bol publikovaný s podporou EDISON.

Vyvíjame sa aplikácie pre video dohľad, streamovanie videa, a tiež sme zasnúbení videozáznam na chirurgickej sále.

Alternatívne spôsoby kódovania farebného obrázka

Existuje mnoho ďalších modelov na znázornenie farieb, ktoré tvoria obrázok. Môžete napríklad použiť indexovanú paletu, ktorá vyžaduje iba jeden bajt na reprezentáciu každého pixelu, namiesto troch požadovaných pri použití modelu RGB. V takomto modeli je možné použiť 2D maticu namiesto 3D matice na znázornenie každej farby. To šetrí pamäť, ale poskytuje menší farebný rozsah.

Ako funguje video kodek? Časť 1: Základy

RGB

Pozrite sa napríklad na tento obrázok nižšie. Prvá tvár je úplne namaľovaná. Ostatné sú červená, zelená a modrá rovina (intenzity zodpovedajúcich farieb sú zobrazené v odtieňoch šedej).

Ako funguje video kodek? Časť 1: Základy

Vidíme, že odtiene červenej v origináli budú na tých istých miestach, kde sú pozorované najjasnejšie časti druhej tváre. Zatiaľ čo prínos modrej je vidieť hlavne v Mariových očiach (posledná tvár) a prvkoch jeho oblečenia. Všimnite si, kde všetky tri farebné roviny prispievajú najmenej (najtmavšie časti obrázkov) – Mariove fúzy.

Na uloženie intenzity každej farby je potrebný určitý počet bitov – táto veličina sa nazýva bitová hĺbka. Povedzme, že sa minie 8 bitov (na základe hodnoty od 0 do 255) na farebnú rovinu. Potom máme farebnú hĺbku 24 bitov (8 bitov * 3 R/G/B roviny).

Ďalšou vlastnosťou obrázka je povolenie, čo je počet pixelov v jednom rozmere. Často sa označuje ako šírka × výška, ako na nižšie uvedenom príklade obrázku 4 x 4.
Ako funguje video kodek? Časť 1: Základy

Ďalšou vlastnosťou, ktorou sa zaoberáme pri práci s obrázkami/videami, je pomer stránpopisujúci normálny proporčný vzťah medzi šírkou a výškou obrázka alebo pixelu.

Keď hovoria, že určitý film alebo obrázok má veľkosť 16 x 9, zvyčajne to myslia pomer strán displeja (VUT v Brne - z Zobraziť pomer strán). Niekedy však môžu existovať rôzne tvary jednotlivých pixelov – v tomto prípade hovoríme o pomer pixelov (PAR - z Pomer strán pixelov).

Ako funguje video kodek? Časť 1: Základy

Ako funguje video kodek? Časť 1: Základy

Poznámka pre hostesku: DVD zodpovedá DAR 4 až 3

Hoci skutočné rozlíšenie DVD je 704x480, stále si zachováva pomer strán 4:3, pretože PAR je 10:11 (704x10 / 480x11).

A nakoniec môžeme určiť video ako postupnosť n rámy za obdobie čas, čo možno považovať za doplnkový rozmer. A n potom je to snímková frekvencia alebo počet snímok za sekundu (FPS - z Počet snímok za sekundu).

Ako funguje video kodek? Časť 1: Základy

Počet bitov za sekundu potrebný na zobrazenie videa je jeho prenosová rýchlosť - bitrate.

bitová rýchlosť = šírka * výška * bitová hĺbka * počet snímok za sekundu

Napríklad video s rýchlosťou 30 fps, 24 bps, 480 x 240 by vyžadovalo 82,944,000 82,944 30 bps alebo 480 240 Mbps (24 x XNUMX x XNUMX x XNUMX) – to však platí, ak sa nepoužije žiadna metóda kompresie.

Ak je prenosová rýchlosť takmer konštantný, potom sa volá konštantná prenosová rýchlosť (CBR - z konštantná bitová rýchlosť). Ale môže sa to aj líšiť, v tomto prípade je to tzv variabilná prenosová rýchlosť (VBR - z variabilná bitová rýchlosť).

Tento graf ukazuje obmedzené VBR, kde sa v prípade úplne tmavého rámca neplytvá príliš veľa bitmi.

Ako funguje video kodek? Časť 1: Základy

Inžinieri pôvodne vyvinuli metódu na zdvojnásobenie vnímanej snímkovej frekvencie pri zobrazovaní videa bez použitia dodatočnej šírky pásma. Táto metóda je známa ako prekladané video; V podstate posiela polovicu obrazovky v prvom „rámci“ a druhú polovicu v ďalšom „rámci“.

V súčasnosti sa scény väčšinou vykresľujú pomocou progresívne technológie skenovania. Ide o spôsob zobrazovania, ukladania alebo prenosu pohyblivých obrázkov, v ktorom sa postupne vykresľujú všetky riadky každého rámca.

Ako funguje video kodek? Časť 1: Základy

Nuž! Teraz vieme, ako je obrázok reprezentovaný digitálne, ako sú usporiadané jeho farby, koľko bitov za sekundu strávime na zobrazenie videa, či je bitová rýchlosť konštantná (CBR) alebo premenlivá (VBR). Vieme o danom rozlíšení pomocou danej snímkovej frekvencie, poznáme mnohé ďalšie pojmy ako prekladané video, PAR a niektoré ďalšie.

Odstránenie nadbytočnosti

Je známe, že video bez kompresie nemožno normálne používať. Hodinové video v rozlíšení 720p a 30 snímkach za sekundu by zabralo 278 GB. K tejto hodnote sa dostaneme vynásobením 1280 x 720 x 24 x 30 x 3600 (šírka, výška, počet bitov na pixel, FPS a čas v sekundách).

Použitie bezstratové kompresné algoritmy, ako DEFLATE (používa sa v PKZIP, Gzip a PNG), nezníži dostatočne požadovanú šírku pásma. Musíme hľadať iné spôsoby kompresie videa.

K tomu môžete využiť funkcie našej vízie. Lepšie rozlišujeme jas ako farbu. Video je séria sekvenčných obrázkov, ktoré sa v priebehu času opakujú. Medzi susednými snímkami tej istej scény sú malé rozdiely. Okrem toho každý rám obsahuje mnoho oblastí s rovnakou (alebo podobnou) farbou.

Farba, jas a naše oči

Naše oči sú citlivejšie na jas ako na farbu. Môžete sa o tom presvedčiť sami pri pohľade na tento obrázok.

Ako funguje video kodek? Časť 1: Základy

Ak nevidíte, že na ľavej polovici obrázku farby štvorcov A и B sú vlastne rovnaké, potom je to normálne. Náš mozog nás núti venovať viac pozornosti svetlu a tieňu ako farbe. Na pravej strane medzi určenými políčkami je prepojka rovnakej farby - takže my (teda náš mozog) ľahko určíme, že sú v skutočnosti rovnakej farby.

Pozrime sa (zjednodušene) na to, ako fungujú naše oči. Oko je zložitý orgán pozostávajúci z mnohých častí. Nás však najviac zaujímajú šišky a prúty. Oko obsahuje asi 120 miliónov tyčiniek a 6 miliónov čapíkov.

Vnímanie farby a jasu považujme za samostatné funkcie určitých častí oka (v skutočnosti je všetko o niečo komplikovanejšie, ale zjednodušíme si to). Tyčinkové bunky sú zodpovedné hlavne za jas, zatiaľ čo kužeľové bunky sú zodpovedné za farbu. Kužele sú rozdelené do troch typov v závislosti od pigmentu, ktorý obsahujú: S-kužele (modré), M-kužele (zelené) a L-kužele (červené).

Keďže máme oveľa viac tyčiniek (jas) ako čapíkov (farba), môžeme konštatovať, že sme schopní lepšie rozlíšiť prechody medzi tmavou a svetlou ako farby.

Ako funguje video kodek? Časť 1: Základy

Funkcie citlivosti na kontrast

Výskumníci v experimentálnej psychológii a mnohých ďalších oblastiach vyvinuli mnoho teórií ľudského videnia. A jeden z nich sa volá funkcie kontrastnej citlivosti. Súvisia s priestorovým a časovým osvetlením. Stručne povedané, ide o to, koľko zmien je potrebných, kým si ich pozorovateľ všimne. Všimnite si množné číslo slova „funkcia“. Je to spôsobené tým, že funkcie kontrastnej citlivosti vieme merať nielen pre čiernobiele obrázky, ale aj pre farebné. Výsledky týchto experimentov ukazujú, že vo väčšine prípadov sú naše oči citlivejšie na jas ako na farbu.

Keďže vieme, že sme citlivejší na jas obrazu, môžeme skúsiť tento fakt využiť.

Farebný model

Trochu sme prišli na to, ako pracovať s farebnými obrázkami pomocou schémy RGB. Existujú aj iné modely. Existuje model, ktorý oddeľuje jas od sýtosti a je známy ako YCbCr. Mimochodom, existujú aj iné modely, ktoré robia podobné rozdelenie, ale budeme brať do úvahy iba tento.

V tomto farebnom modeli Y je reprezentácia jasu a tiež používa dva farebné kanály: Cb (sýta modrá) a Cr (sýta červená). YCbCr možno odvodiť z RGB a je možná aj spätná konverzia. Pomocou tohto modelu môžeme vytvárať plnofarebné obrázky, ako vidíme nižšie:

Ako funguje video kodek? Časť 1: Základy

Prevod medzi YCbCr a RGB

Niekto namietne: ako je možné získať všetky farby, ak sa nepoužíva zelená?

Aby sme odpovedali na túto otázku, skonvertujme RGB na YCbCr. Využime koeficienty prijaté v norme BT.601, ktorý odporučila jednotka ITU-R. Táto divízia stanovuje štandardy pre digitálne video. Napríklad: čo je 4K? Aká by mala byť snímková frekvencia, rozlíšenie, farebný model?

Najprv vypočítajme jas. Použime konštanty navrhnuté ITU a nahraďme hodnoty RGB.

Y = 0.299R + 0.587G + 0.114B

Keď máme jas, oddelíme modrú a červenú farbu:

Cb = 0.564(B - Y)

Cr = 0.713(R - Y)

A môžeme tiež konvertovať späť a dokonca získať zelenú pomocou YCbCr:

R = Y + 1.402Cr

B = Y + 1.772Cb

G = Y - 0.344Cb - 0.714Cr

Displeje (monitory, televízory, obrazovky atď.) zvyčajne používajú iba model RGB. Tento model však môže byť usporiadaný rôznymi spôsobmi:

Ako funguje video kodek? Časť 1: Základy

Podvzorkovanie farieb

S obrazom reprezentovaným ako kombinácia jasu a chrominancie môžeme selektívnym odstránením informácií využiť väčšiu citlivosť ľudského zrakového systému na jas než na chrominanciu. Chroma subsampling je metóda kódovania obrázkov s použitím menšieho rozlíšenia pre farebnosť ako pre jas.

Ako funguje video kodek? Časť 1: Základy

O koľko je dovolené znížiť farebné rozlíšenie?! Ukázalo sa, že už existuje niekoľko diagramov, ktoré popisujú, ako zvládnuť rozlíšenie a zlúčenie (Výsledná farba = Y + Cb + Cr).

Tieto schémy sú známe ako downsampling systémy a sú vyjadrené ako 3-násobný pomer - a:x:y, ktorý určuje počet vzoriek jasových a farebných rozdielových signálov.

a - horizontálny štandard odberu vzoriek (zvyčajne sa rovná 4)
x — počet farebných vzoriek v prvom rade pixelov (horizontálne rozlíšenie vzhľadom na a)
y — počet zmien vo vzorkách sýtosti medzi prvým a druhým radom pixelov.

Výnimkou je 4:1:0, poskytujúce jednu chromatickú vzorku v každom bloku s rozlíšením jasu 4 x 4.

Bežné schémy používané v moderných kodekoch:

  • 4:4:4 (žiadne prevzorkovanie)
  • 4:2:2
  • 4:1:1
  • 4:2:0
  • 4:1:0
  • 3:1:1

YCbCr 4:2:0 - príklad fúzie

Tu je zlúčený obrázok pomocou YCbCr 4:2:0. Upozorňujeme, že minieme iba 12 bitov na pixel.

Ako funguje video kodek? Časť 1: Základy

Takto vyzerá rovnaký obrázok zakódovaný s hlavnými typmi podvzorkovania farieb. Prvý riadok je konečný YCbCr, spodný riadok zobrazuje chromatické rozlíšenie. Veľmi slušné výsledky, vzhľadom na miernu stratu kvality.

Ako funguje video kodek? Časť 1: Základy

Pamätáte si, keď sme počítali s 278 GB úložného priestoru na uloženie hodinového video súboru v rozlíšení 720p a 30 snímkach za sekundu? Ak použijeme YCbCr 4:2:0, tak sa táto veľkosť zmenší na polovicu – 139 GB. Zatiaľ je to ešte ďaleko od prijateľného výsledku.

Histogram YCbCr môžete získať sami pomocou FFmpeg. Na tomto obrázku dominuje modrá nad červenou, čo je jasne viditeľné na samotnom histograme.

Ako funguje video kodek? Časť 1: Základy

Farba, jas, farebný gamut - video recenzia

Odporúčame pozrieť si toto úžasné video. Vysvetľuje, čo je jas, a vo všeobecnosti sú všetky bodky bodkované ё o jase a farbe.

Typy rámov

Poďme ďalej. Pokúsme sa eliminovať časovú nadbytočnosť. Najprv si však definujme základnú terminológiu. Povedzme, že máme film s 30 snímkami za sekundu, tu sú jeho prvé 4 snímky:

Ako funguje video kodek? Časť 1: Základy Ako funguje video kodek? Časť 1: Základy Ako funguje video kodek? Časť 1: Základy Ako funguje video kodek? Časť 1: Základy

V rámoch môžeme vidieť veľa opakovaní: napríklad modré pozadie, ktoré sa nemení z rámčeka na rám. Aby sme tento problém vyriešili, môžeme ich abstraktne klasifikovať do troch typov rámcov.

I-snímka (Intro Frame)

I-rám (referenčný rám, kľúčový rám, vnútorný rám) je samostatný. Bez ohľadu na to, čo chcete vizualizovať, I-snímka je v podstate statická fotografia. Prvá snímka je zvyčajne I-snímka, ale I-snímky budeme pravidelne pozorovať aj medzi nie prvými snímkami.

Ako funguje video kodek? Časť 1: Základy

P-rám (Predikovaný rám)

P-snímka (prediktívna snímka) využíva skutočnosť, že takmer vždy je možné aktuálny obrázok reprodukovať pomocou predchádzajúcej snímky. Napríklad v druhom frame je jedinou zmenou pohyb lopty vpred. Rám 2 môžeme získať jednoduchou miernou úpravou rámca 1, len s použitím rozdielu medzi týmito rámcami. Na vytvorenie rámca 2 odkazujeme na predchádzajúci rám 1.

Ako funguje video kodek? Časť 1: ZákladyAko funguje video kodek? Časť 1: Základy

B-snímka (Bi-predictive Frame)

A čo odkazy nielen na minulé, ale aj na budúce snímky, aby sa zabezpečila ešte lepšia kompresia?! Toto je v podstate B-snímka (obojsmerná snímka).

Ako funguje video kodek? Časť 1: ZákladyAko funguje video kodek? Časť 1: ZákladyAko funguje video kodek? Časť 1: Základy

Dočasné stiahnutie

Tieto typy rámov sa používajú na zabezpečenie najlepšej možnej kompresie. Na to, ako sa to deje, sa pozrieme v ďalšej časti. Zatiaľ si všimnime, že „najdrahší“ z hľadiska spotrebovanej pamäte je I-snímka, P-snímka je výrazne lacnejšia, ale najziskovejšou možnosťou pre video je B-snímka.

Ako funguje video kodek? Časť 1: Základy

Dočasná redundancia (medzisnímková predpoveď)

Pozrime sa, aké máme možnosti na minimalizáciu opakovania v priebehu času. Tento typ redundancie môžeme vyriešiť pomocou metód krížovej predikcie.

Pokúsime sa minúť čo najmenej bitov na zakódovanie sekvencie snímok 0 a 1.

Ako funguje video kodek? Časť 1: Základy

Vieme vyrobiť odčítanie, jednoducho odčítame snímku 1 od snímky 0. Dostaneme snímku 1, použijeme len rozdiel medzi ňou a predchádzajúcim snímkom, v skutočnosti zakódujeme iba výsledný zvyšok.

Ako funguje video kodek? Časť 1: Základy

Ale čo keby som vám povedal, že existuje ešte lepšia metóda, ktorá využíva ešte menej bitov?! Najprv rozdeľme rám 0 na jasnú mriežku pozostávajúcu z blokov. A potom sa pokúsime priradiť bloky zo snímky 0 k snímke 1. Inými slovami, odhadneme pohyb medzi snímkami.

Z Wikipédie - kompenzácia blokového pohybu

Kompenzácia pohybu bloku rozdeľuje aktuálnu snímku na neprekrývajúce sa bloky a vektor kompenzácie pohybu hlási pôvod blokov (bežnou mylnou predstavou je, že predchádzajúca snímka je rozdelená na neprekrývajúce sa bloky a vektory kompenzácie pohybu hovoria, kam tieto bloky smerujú. Ale v skutočnosti je to naopak - neanalyzuje sa predchádzajúci rámec, ale nasledujúci; nie je jasné, kde sa bloky pohybujú, ale odkiaľ prišli). Typicky sa zdrojové bloky v zdrojovom rámci prekrývajú. Niektoré algoritmy kompresie videa zostavujú aktuálnu snímku z častí dokonca nie jedného, ​​ale niekoľkých predtým prenesených snímok.

Ako funguje video kodek? Časť 1: Základy

Počas procesu hodnotenia vidíme, že loptička sa pohla z (x= 0, y=25) od (x= 6, y=26), hodnoty x и y určiť vektor pohybu. Ďalším krokom, ktorý môžeme urobiť, aby sme zachovali bity, je zakódovať iba rozdiel pohybových vektorov medzi poslednou polohou bloku a predpovedanou polohou, takže konečný pohybový vektor bude (x=6-0=6, y=26-25=1 ).

V reálnej situácii by sa táto lopta rozdelila na n blokov, ale to nič nemení na podstate veci.

Objekty v rámci sa pohybujú v troch rozmeroch, takže keď sa loptička pohybuje, môže sa vizuálne zmenšiť (alebo zväčšiť, ak sa pohybuje smerom k divákovi). Je normálne, že medzi blokmi nebude dokonalá zhoda. Tu je kombinovaný pohľad na náš odhad a skutočný obraz.

Ako funguje video kodek? Časť 1: Základy

Vidíme však, že keď použijeme odhad pohybu, na kódovanie je podstatne menej údajov ako pri použití jednoduchšej metódy výpočtu delty medzi snímkami.

Ako funguje video kodek? Časť 1: Základy

Ako by vyzerala skutočná kompenzácia pohybu

Táto technika sa aplikuje na všetky bloky naraz. Naša podmienená pohyblivá guľa bude často rozdelená do niekoľkých blokov naraz.

Ako funguje video kodek? Časť 1: Základy

Pomocou týchto pojmov môžete sami získať pocit jupyter.

Ak chcete vidieť vektory pohybu, môžete vytvoriť externé prediktívne video pomocou ffmpeg.

Ako funguje video kodek? Časť 1: Základy

Môžete tiež použiť Intel Video Pro Analyzer (je to platené, ale existuje bezplatná skúšobná verzia, ktorá je obmedzená len na prvých desať snímok).

Ako funguje video kodek? Časť 1: Základy

Priestorová redundancia (interná predpoveď)

Ak analyzujeme každú snímku vo videu, nájdeme veľa vzájomne prepojených oblastí.

Ako funguje video kodek? Časť 1: Základy

Prejdime si tento príklad. Táto scéna pozostáva hlavne z modrej a bielej farby.

Ako funguje video kodek? Časť 1: Základy

Toto je I-rám. Nemôžeme brať predchádzajúce snímky na predikciu, ale môžeme ich komprimovať. Zakódujme výber červeného bloku. Ak sa pozrieme k jeho susedom, všimneme si, že sú okolo neho nejaké farebné trendy.

Ako funguje video kodek? Časť 1: Základy

Predpokladáme, že farby sa v ráme šíria vertikálne. To znamená, že farba neznámych pixelov bude obsahovať hodnoty svojich susedov.

Ako funguje video kodek? Časť 1: Základy

Takáto predpoveď sa môže ukázať ako nesprávna. Z tohto dôvodu musíte použiť túto metódu (interná predpoveď) a potom odpočítať skutočné hodnoty. Získame tak zvyškový blok, čo bude mať za následok oveľa viac stlačenú matricu v porovnaní s originálom.

Ako funguje video kodek? Časť 1: Základy

Ak si chcete precvičiť interné predpovede, môžete si vytvoriť video makroblokov a ich predpovedí pomocou ffmpeg. Aby ste pochopili význam každej farby bloku, budete si musieť prečítať dokumentáciu ffmpeg.

Ako funguje video kodek? Časť 1: Základy

Alebo môžete použiť Intel Video Pro Analyzer (ako som spomenul vyššie, bezplatná skúšobná verzia je obmedzená na prvých 10 snímok, ale na začiatok vám to bude stačiť).

Ako funguje video kodek? Časť 1: Základy

Druhá časť: Ako funguje video kodek

Zdroj: hab.com

Pridať komentár