Jak funguje video kodek. Část 1. Základy

Druhá část: Principy fungování video kodeku

Jakýkoli rastrový obraz můžeme představit jako dvourozměrnou matici. Když se mluví o barvách, myšlenku lze rozvinout, pokud se na obrázek podíváme jako na třírozměrnou matici, ve které se další rozměry používají k ukládání dat pro každou z barev.

Pokud považujeme konečnou barvu za kombinaci tzv. základních barev (červené, zelené a modré), určujeme v naší třírozměrné matici tři roviny: první pro červenou barvu, druhou pro zelenou a poslední pro modrou.
Jak funguje video kodek. Část 1. Základy
Každý bod v této matici budeme nazývat pixelem (elementem obrázku). Každý pixel obsahuje informace o intenzitě (obvykle ve formě číselné hodnoty) každé barvy. Například, červený pixel znamená, že v něm je 0 zelené, 0 modré a maximum červené. Pixel růžové barvy může být vytvořen pomocí kombinace třech barev. Použitím číselného rozsahu od 0 do 255 je růžový pixel definován jako Červená = 255, Zelená = 192 a Modrá = 203.

Jak funguje video kodek. Část 1. Základy

Článek byl publikován za podpory společnosti EDISON.

Vyvíjíme aplikace pro video sledování, streaming video, stejně jako se zabýváme videonahráváním v chirurgické místnosti.

Alternativní způsoby kódování barevného obrazu

Pro zobrazení barev, z nichž se obraz skládá, existuje mnoho dalších modelů. Například lze použít indexovanou paletu, která vyžaduje pouze jeden bajt pro reprezentaci každého pixelu, místo tří, které jsou potřebné při použití modelu RGB. V takovém modelu lze použít 2D matici místo 3D matice pro zobrazení každé barvy. To šetří paměť, ale poskytuje menší barevný rozsah.

Jak funguje video kodek. Část 1. Základy

RGB

Například se podívejte na tento obrázek níže. První tvář je zcela vybarvena. Ostatní jsou červené, zelené a modré roviny (intenzita odpovídajících barev je zobrazena na stupnici šedé).

Jak funguje video kodek. Část 1. Základy

Vidíme, že odstíny červené v originále budou na stejných místech, kde se nacházejí nejjasnější části druhé osoby. Zatímco přínos modré barvy je většinou vidět pouze v očích Maria (poslední osoba) a prvcích jeho oblečení. Všimněte si, kde všechny tři barevné plochy přispívají nejméně (nejtmavší části obrázků) — to jsou kníry Maria.

Pro uchování intenzity každé barvy je potřeba určité množství bitů — toto množství se nazývá bitová hloubka. Řekněme, že se používá 8 bitů (na základě hodnoty od 0 do 255) na jednu barevnou plochu. Pak máme hloubku barvy 24 bitů (8 bitů * 3 plochy R/G/B).

Další vlastností obrázku je rozlišení, které představuje množství pixelů v jednom rozměru. Často se označuje jako šířka × výška, jak je níže na obrázku s příkladem 4 na 4.
Jak funguje video kodek. Část 1. Základy

Ještě jedna vlastnost, se kterou se setkáváme při práci s obrázky/videem — to je poměr stran, popisující obvyklý proporcionální vztah mezi šířkou a výškou obrázku nebo pixelu.

Když se říká, že nějaký film nebo obrázek má rozměr 16 na 9, obvykle se tím myslí poměr stran displeje (DAR — ze Display Aspect Ratio). Ale někdy mohou mít různé tvary jednotlivé pixely — v tomto případě mluvíme o poměru pixelů (PAR — ze Pixel Aspect Ratio).

Jak funguje video kodek. Část 1. Základy

Jak funguje video kodek. Část 1. Základy

Domácí hospodyňce na paměti: DVD odpovídá DAR 4 na 3

I když skutečné rozlišení DVD je 704×480, přesto udržuje poměr stran 4:3, protože PAR má hodnotu 10:11 (704×10 / 480×11).

A nakonec můžeme definovat video jako sekvenci n snímků v průběhu času, kterou lze považovat za další rozměr. A n potom — to je snímková frekvence nebo počet snímků za sekundu (FPS — ze Frames per Second).

Jak funguje video kodek. Část 1. Základy

Počet bytů za sekundu potřebných pro zobrazení videa je jeho přenosová rychlost — bitrate.

bitrate = šířka * výška * bitová hloubka * snímky za sekundu

Například pro video s 30 snímky za sekundu, 24 bity na pixel, rozlišením 480×240 bude potřeba 82,944,000 bitů za sekundu nebo 82,944 Mbit/s (30x480x240x24) — ale to je pokud není použit žádný z kompresních metod.

Pokud je přenosová rychlost téměř konstantní, pak se nazývá konstantní přenosová rychlost (CBR — ze constant bit rate). Může se však také lišit, v takovém případě se nazývá proměnná rychlost přenosu (VBR — ze proměnná bitová rychlost).

Graf ukazuje omezené VBR, kdy se netráví příliš mnoho bitů v případě zcela tmavého snímku.

Jak funguje video kodek. Část 1. Základy

Inženýři původně vyvinuli metodu zdvojení vnímané snímkové frekvence video displeje bez použití další šířky pásma. Tato metoda je známa jako prokládané video; převážně odesílá polovinu obrazovky v první "snímkě" a druhou polovinu v dalším "snímkě".

V současnosti vizualizace scén převážně probíhá za použití technologie progresivního skenování. Je to způsob zobrazení, uchovávání nebo přenosu pohyblivých obrázků, kde se všechny řádky každého snímku kreslí za sebou.

Jak funguje video kodek. Část 1. Základy

Takže! Nyní víme, jak je obraz prezentován v digitální podobě, jak jsou uspořádány jeho barvy, kolik bitů za sekundu utrácíme na zobrazení videa, pokud je přenosová rychlost konstantní (CBR) nebo variabilní (VBR). Víme o určeném rozlišení s použitím určené snímkové frekvence, seznámili jsme se s mnoha dalšími termíny, jako je prokládané video, PAR a některé další.

Odstranění redundancy

Je známo, že video bez komprese se obvykle používat nedá. Hodinové video o rozlišení 720p a snímkové frekvenci 30 snímků za sekundu by zabíralo 278 GB. K tomuto číslu dospějeme, pokud vynásobíme 1280 x 720 x 24 x 30 x 3600 (šířka, výška, bity na pixel, FPS a čas v sekundách).

Použití algoritmů bezztrátové komprese, jako je DEFLATE (používaný v PKZIP, Gzip a PNG), nepřinese dostatečné zmenšení potřebné šířky pásma. Musíme hledat jiné způsoby komprese videa.

K tomu lze využít zvláštnosti našeho zraku. Lépe rozlišujeme jasnost než barvy. Video je soubor sekvenčních obrázků opakujících se v čase. Mezi sousedními snímky jedné scény jsou rozdíly malé. Kromě toho každý snímek obsahuje mnoho oblastí, které používají stejnou (nebo podobnou) barvu.

Barva, jasnost a naše oči

Naše oči jsou citlivější na jasnost než na barvu. Můžete se o tom sami přesvědčit, když se podíváte na tento obrázek.

Jak funguje video kodek. Část 1. Základy

Pokud nevidíte, co je na levé polovině obrázku barevných čtverců A a B Pokud jsou ve skutečnosti stejné, je to normální. Náš mozek nás nutí věnovat více pozornosti světlu a stínu než barvám. Na pravé straně mezi označenými čtverci je přepážka stejné barvy — proto snadno rozpoznáváme, že ve skutečnosti mají stejnou barvu.

Podívejme se na to, jak naše oči fungují (zjednodušeně). Oko je složitý orgán složený z mnoha částí. Nejvíce nás však zajímají čípky a tyčinky. Oko obsahuje přibližně 120 milionů tyčinek a 6 milionů čípků.

Zvažme vnímání barev a jasu jako oddělené funkce určitých částí oka (ve skutečnosti je to trochu složitější, ale zjednodušíme to). Tyčinkové buňky hlavně odpovídají za jas, zatímco čípkové buňky odpovídají za barvu. Čípky se dělí do tří typů, podle obsaženého pigmentu: S-čípky (modrá barva), M-čípky (zelená barva) a L-čípky (červená barva).

Protože máme mnohem více tyčinek (jas) než čípků (barva), lze usuzovat, že jsme schopni lépe rozlišovat přechody mezi tmou a světlem než barvami.

Jak funguje video kodek. Část 1. Základy

Funkce kontrastní citlivosti

Výzkumníci experimentální psychologie a mnoha dalších oborů vyvinuli mnoho teorií lidského vidění. A jedna z nich se nazývá funkcemi kontrastní citlivosti. Ty souvisí s prostorovým a časovým osvětlením. Zjednodušeně řečeno, jde o to, kolik změn je potřeba, než je pozorovatel zaznamená. Všimněte si množného čísla slova „funkce“. To souvisí s tím, že můžeme měřit funkce citlivosti na kontrast nejen na černobílém, ale i barevném obraze. Výsledky těchto experimentů ukazují, že v mnoha případech jsou naše oči citlivější na jas než na barvu.

Jelikož víme, že jsme citlivější na jas obrazu, můžeme se pokusit tento fakt využít.

Barevný model

Trochu jsme se seznámili s tím, jak pracovat s barevnými obrázky pomocí RGB schématu. Existují i jiné modely. Existuje model, který odděluje jas od barevnosti a je znám jako YCbCr. Mimochodem, existují i další modely, které dělají podobné oddělení, ale zaměříme se pouze na tento.

V tomto barevném modelu Y — to je znázornění jasu, a také se používají dva barevné kanály: Cb (sytě modrá) a Cr (sytě červená). YCbCr může být získán z RGB, stejně jako může být provedena inverzní transformace. Použitím tohoto modelu můžeme vytvářet obrázky v plných barvách, jak vidíme níže:

Jak funguje video kodek. Část 1. Základy

Transformace mezi YCbCr a RGB

Někdo by mohl namítnout: jak je možné získat všechny barvy, pokud se zelená nepoužívá?

Abychom odpověděli na tuto otázku, převedeme RGB na YCbCr. Využijeme koeficienty stanovené ve standardu BT.601, který byl doporučen orgánem ITU-R. Tento orgán stanovuje standardy pro digitální video. Například: Co je 4K? Jaké by měly být snímkové frekvence, rozlišení, barevný model?

Nejprve vypočítáme jas. Využijeme konstanty navržené ITU a nahradíme hodnoty RGB.

Y = 0.299R + 0.587G + 0.114B

Jakmile máme jas, oddělíme modrou a červenou barvu:

Cb = 0.564(B — Y)

Cr = 0.713(R — Y)

A také můžeme provést inverzi a dokonce získat zelenou pomocí YCbCr:

R = Y + 1.402Cr

B = Y + 1.772Cb

G = Y — 0.344Cb — 0.714Cr

Obecně platí, že displeje (monitory, televizory, obrazovky atd.) používají pouze model RGB. Ale tento model může být organizován různými způsoby:

Jak funguje video kodek. Část 1. Základy

Barevná subsamplování

S obrazem představujícím kombinaci jasu a barevnosti, můžeme využít větší citlivost lidského zrakového systému na jas než na barevnost, pokud selectively eliminujeme informace. Barevná subsamplování je metoda kódování obrazů, při které se používá nižší rozlišení pro barevnost než pro jas.

Jak funguje video kodek. Část 1. Základy

Jak moc je povoleno snižovat rozlišení barevnosti?! Ukazuje se, že už existují určité schémata, která popisují, jak zpracovávat rozlišení a sloučení (Konečná barva = Y + Cb + Cr).

Tato schémata jsou známá jako systémy subsamplování a jsou vyjádřena jako poměr 3:1 — a:x:y, který určuje počet vzorků jasových a barevnostních signálů.

a — standardní horizontální vzorek (obvykle roven 4)
x — počet vzorků barevnosti v prvním řádku pixelů (horizontální rozlišení vzhledem k a)
y — počet změn vzorků barevnosti mezi prvním a druhým řádkem pixelů.

Výjimku tvoří 4:1:0, zajišťující jeden vzorek barevnosti v každém bloku jasového rozlišení 4 na 4.

Obecné schéma používaná v moderních kodecích:

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

YCbCr 4:2:0 — příklad sloučení

Toto je sloučený fragment obrázku použitím YCbCr 4:2:0. Všimněte si, že využíváme pouze 12 bitů na pixel.

Jak funguje video kodek. Část 1. Základy

Takto vypadá stejný obrázek zakódovaný základními typy barevné subdiskretizace. První řada je konečný YCbCr, dolní řada ukazuje rozlišení barevnosti. Výsledky jsou velmi slušné, vzhledem k malým ztrátám na kvalitě.

Jak funguje video kodek. Část 1. Základy

Pamatujete, že jsme spočítali 278 GB diskového prostoru pro uchování hodinového video souboru s rozlišením 720p a 30 snímky za sekundu? Pokud použijeme YCbCr 4:2:0, velikost se sníží na polovinu — 139 GB. Přesto jsme stále daleko od přijatelného výsledku.

Můžete si sami získat histogram YCbCr pomocí FFmpeg. V tomto obrázku převládá modrá nad červenou, což je dobře vidět na samotném histogramu.

Jak funguje video kodek. Část 1. Základy

Barevnost, jas, barevná škála — video přehled

Doporučuje se shlédnout tohle úžasné video. Vysvětluje, co je to jas, a celkově dává věci do pořádku. o jasu a barvě. Typy snímků

Přehrát video

Pokračujeme dál. Pokusíme se eliminovat časovou redundantnost. Ale nejprve definujme nějakou základní terminologii. Předpokládejme, že máme film s 30 snímky za sekundu, tady jsou jeho první 4 snímky:

Můžeme vidět mnoho opakování ve snímcích: například modré pozadí, které se od snímku ke snímku nemění. Abychom tento problém vyřešili, můžeme je abstraktně klasifikovat jako tři typy snímků.

Jak funguje video kodek. Část 1. Základy Jak funguje video kodek. Část 1. Základy Jak funguje video kodek. Část 1. Základy Jak funguje video kodek. Část 1. Základy

I-snímek (

ntro Frame)II-snímek (snímek-odkaz, klíčový snímek, vnitřní snímek) je autonomní. Bez ohledu na to, co je potřeba vizualizovat, I-snímek je v podstatě statický obrázek. První snímek je obvykle I-snímek, nicméně i mezi snímky, které nejsou na začátku, budeme pravidelně pozorovat I-snímky.

P-snímek (

Jak funguje video kodek. Část 1. Základy

Predicted Frame)P-snímek (předpovězený snímek) využívá výhodu toho, že téměř vždy může být aktuální obrázek reprodukován pomocí předchozího snímku. Například ve druhém snímku je jedinou změnou pohybující se míč vpřed. Můžeme získat snímek 2 pouhým drobným přetvořením snímku 1, přičemž využíváme rozdíl mezi těmito snímky. Pro sestavení snímku 2 se odkazujeme na předcházející snímek 1.

P-snímek (predikovaný snímek) využívá výhodu toho, že aktuální obrázek obvykle může být reprodukován s použitím předchozího snímku. Například ve druhém snímku je jedinou změnou míč, který se pohybuje vpřed. Můžeme získat snímek 2 jednoduchým mírným upravením snímku 1, pouze pomocí rozdílu mezi těmito snímky. Pro ztvárnění snímku 2 se odvoláváme na předchozí snímek 1.

Jak funguje video kodek. Část 1. Základy ← Jak funguje video kodek. Část 1. Základy

B-snímek (Bi-predictive Frame)

A co odkazy nejen na minulé, ale i na budoucí snímky, abychom zajistili ještě lepší kompresi?! To je v podstatě B-snímek (obousměrný snímek).

Jak funguje video kodek. Část 1. Základy ← Jak funguje video kodek. Část 1. Základy → Jak funguje video kodek. Část 1. Základy

Mezivýstup

Tyto typy snímků se používají k zajištění nejlepší komprese. V následující části si rozebere, jak to funguje. Prozatím si povšimněte, že nejvíce „nákladným“ podle paměťové zátěže je I-snímek, P-snímek je výrazně levnější, ale nejvýhodnější varianta pro video je B-snímek.

Jak funguje video kodek. Část 1. Základy

Časová redundantnost (mezi-snímové predikce)

Pojďme se podívat, jaké máme možnosti pro minimalizaci časových opakování. Tento typ redundantnosti vyřešíme pomocí metod vzájemného predikování.

Budeme se snažit vynaložit co nejméně bitů na kódování sekvence snímků 0 a 1.

Jak funguje video kodek. Část 1. Základy

Můžeme provést odčítání, jednoduše odečteme snímek 1 od snímku 0. Získáváme snímek 1, pouze používáme rozdíl mezi ním a předchozím snímkem, v podstatě kódujeme pouze vzniklý zbytek.

Jak funguje video kodek. Část 1. Základy

Ale co když vám řeknu, že existuje ještě lepší metoda, která používá ještě méně bitů?! Nejdříve rozdělme snímek 0 na jasnou síť složenou z bloků. A poté se pokusíme přiřadit bloky ze snímku 0 k snímku 1. Jinými slovy, zhodnotíme pohyb mezi snímky.

Z Wikipedie — bloková kompenzace pohybu

Bloková kompenzace pohybu dělí aktuální snímek na nepřekrývající se bloky a vektor kompenzace pohybu uvádí původ bloků (rozšířená chyba spočívá v tom, že předchozí snímek je dělen na nepřekrývající se bloky, a vektory kompenzace pohybu říkají, kam tyto bloky odcházejí. A ve skutečnosti je to naopak — neanalyzuje se předchozí snímek, ale následující, zjišťuje se ne kam bloky putují, ale odkud se vzaly). Obvykle jsou původní bloky překryty v původním snímku. Některé video kompresní algoritmy shromažďují aktuální snímek z částí nejen z jednoho, ale také z několika předchozích snímků.

Jak funguje video kodek. Část 1. Základy

Během hodnocení vidíme, že míč se přesunul z (x=0, y=25) na (x=6, y=26), hodnoty x a y určují směr pohybu. Další krok, který můžeme podniknout, abychom uchovali bity, je kódovat pouze rozdíl vektorů pohybu mezi poslední pozicí bloku a předpokládanou, takže konečný vektor pohybu bude (x=6-0=6, y=26-25=1).

V reálné situaci by tato koule byla rozdělena na n bloky, ale to nijak nemění podstatu věci.

Objekty v záběru se pohybují ve třech dimenzích, takže při pohybu koule se může jevit jako vizuálně menší (nebo větší, pokud se pohybuje směrem k divákovi). Je normální, že mezi bloky nebude dokonalé shodování. Tady je kombinovaný pohled na naši estimaci a skutečný obraz.

Jak funguje video kodek. Část 1. Základy

Vidíme však, že když aplikujeme odhad pohybu, dat pro kódování je výrazně méně než při použití jednodušší metody výpočtu delta mezi snímky.

Jak funguje video kodek. Část 1. Základy

Jak by vypadala skutečná kompenzace pohybu

Tato metoda se aplikuje okamžitě na všechny bloky. Často bude náš hypotetický pohybující se míček rozdělen najednou na několik bloků.

Jak funguje video kodek. Část 1. Základy

Můžete si tyto koncepty sami vyzkoušet, pomocí Jupyter.

Abychom viděli vektory pohybu, můžeme vytvořit video s externím předpokladem pomocí ffmpeg.

Jak funguje video kodek. Část 1. Základy

Můžete také využít Intel Video Pro Analyzer (je placený, ale je k dispozici bezplatná zkušební verze, která je omezena pouze na prvních deset snímků).

Jak funguje video kodek. Část 1. Základy

Prostorová redundance (vnitřní predikce)

Pokud analyzujeme každý snímek ve videu, objevíme mnoho vzájemně propojených oblastí.

Jak funguje video kodek. Část 1. Základy

Pojďme se podívat na tento příklad. Tato scéna se převážně skládá z modré a bílé barvy.

Jak funguje video kodek. Část 1. Základy

Toto je I-snímek. Předchozí snímky pro predikci nemůžeme použít, ale podaří se nám ho zkomprimovat. Zakódujeme vymezení červeného bloku. Pokud se podíváme na jeho sousedy, všimneme si, že kolem něj jsou nějaké barevné tendence.

Jak funguje video kodek. Část 1. Základy

Předpokládáme, že v záběru se barvy šíří svisle. Což znamená, že barvy neznámých pixelů budou obsahovat hodnoty svých sousedů.

Jak funguje video kodek. Část 1. Základy

Tato predikce může být také chybná. Právě proto je třeba aplikovat tuto metodu (vnitřní predikce) a poté ještě odečíst skutečné hodnoty. To nám dá zbytkový blok, což povede k mnohem komprimovanější matici ve srovnání s originálem.

Jak funguje video kodek. Část 1. Základy

Pokud chcete praktikovat interní predikce, můžete vytvořit video s makrobloky a jejich predikcemi pomocí ffmpeg. Abyste porozuměli významu každé barvy bloku, budete si muset prostudovat dokumentaci ffmpeg.

Jak funguje video kodek. Část 1. Základy

Nebo můžete použít Intel Video Pro Analyzer (jak jsem již zmínil výše, v zkušební bezplatné verzi je omezení na prvních 10 snímků, ale na začátku vám to stačí).

Jak funguje video kodek. Část 1. Základy

Druhá část: Principy fungování video kodeku

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster