Jak funguje video kodek? Část 1: Základy

Druhá část: Принципы работы видеокодека

Jakýkoli rastr obraz mohou být zastoupeny ve formě dvourozměrná matice. Pokud jde o barvy, nápad lze rozvinout pohledem na obrázek jako trojrozměrná matice, ve kterém se pro uložení dat pro každou z barev používají další dimenze.

Uvažujeme-li výslednou barvu jako kombinaci tzv. primární barvy (červená, zelená a modrá), v naší trojrozměrné matici definujeme tři roviny: první pro červenou, 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 pixel (prvek obrázku). Každý pixel obsahuje informaci o intenzitě (obvykle jako číselnou hodnotu) každé barvy. Například, červený pixel znamená, že obsahuje 0 zelené, 0 modré a maximálně červené. Růžový pixel lze vytvořit pomocí kombinace tří barev. Pomocí číselného rozsahu od 0 do 255 je růžový pixel definován jako Červená = 255, Zelená = 192 и Modrá = 203.

Jak funguje video kodek? Část 1: Základy

Tento článek byl publikován s podporou EDISON.

Vyvíjíme se aplikace pro video dohled, video streaming, a také jsme zasnoubení videozáznam na chirurgickém sále.

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

Existuje mnoho dalších modelů pro znázornění barev, které tvoří obrázek. Můžete například použít indexovanou paletu, která vyžaduje pouze jeden bajt k reprezentaci každého pixelu, namísto tří požadovaných při použití modelu RGB. V takovém modelu je možné použít 2D matici místo 3D matice k reprezentaci každé barvy. To šetří paměť, ale poskytuje menší barevný gamut.

Jak funguje video kodek? Část 1: Základy

RGB

Podívejte se například na tento obrázek níže. První obličej je kompletně namalovaný. Ostatní jsou červená, zelená a modrá rovina (intenzity odpovídajících barev jsou zobrazeny ve stupních šedi).

Jak funguje video kodek? Část 1: Základy

Vidíme, že odstíny červené v originále budou na stejných místech, kde jsou pozorovány nejjasnější části druhé tváře. Zatímco přínos modré je vidět hlavně v Mariových očích (poslední tvář) a prvcích jeho oblečení. Všimněte si, kde všechny tři barevné roviny přispívají nejméně (nejtmavší části obrázků) – Mariův knír.

Pro uložení intenzity každé barvy je potřeba určitý počet bitů – tato veličina se nazývá bitová hloubka. Řekněme, že se spotřebuje 8 bitů (na základě hodnoty od 0 do 255) na barevnou rovinu. Pak máme barevnou hloubku 24 bitů (8 bitů * 3 R/G/B roviny).

Další vlastností obrázku je povolení, což je počet pixelů v jednom rozměru. Často se označuje jako šířka × výška, jako na níže uvedeném příkladu obrázku 4 x 4.
Jak funguje video kodek? Část 1: Základy

Další vlastností, kterou se zabýváme při práci s obrázky/videi, je poměr stran, popisující normální proporcionální vztah mezi šířkou a výškou obrázku nebo pixelu.

Když říkají, že určitý film nebo obrázek má velikost 16 x 9, obvykle to myslí poměr stran displeje (VUT v Brně - z Zobrazit poměr stran). Někdy však mohou být různé tvary jednotlivých pixelů – v tomto případě mluvíme o poměr pixelů (PAR - z Poměr stran pixelů).

Jak funguje video kodek? Část 1: Základy

Jak funguje video kodek? Část 1: Základy

Poznámka pro hostitelku: DVD odpovídá DAR 4 až 3

Přestože skutečné rozlišení DVD je 704x480, stále si zachovává poměr stran 4:3, protože PAR je 10:11 (704x10 / 480x11).

A nakonec můžeme určit видео jako sekvence n rámečků za období času, což lze považovat za další rozměr. A n pak je snímková frekvence nebo počet snímků za sekundu (FPS - z Snímků za sekundu).

Jak funguje video kodek? Část 1: Základy

Počet bitů za sekundu potřebný k zobrazení videa je jeho přenosová rychlost - datový tok.

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

Například video 30 fps, 24 bps, 480 x 240 by vyžadovalo 82,944,000 82,944 30 bps nebo 480 240 Mbps (24 x XNUMX x XNUMX x XNUMX) – ale to v případě, že není použita žádná kompresní metoda.

Pokud je přenosová rychlost почти постоянна, pak se to nazývá konstantní přenosová rychlost (CBR - z konstantní bitová rychlost). Může se ale také lišit, v tomto případě je to tzv variabilní přenosová rychlost (VBR - z variabilní přenosová rychlost).

Tento graf ukazuje omezený VBR, kde se v případě zcela tmavého snímku nepromarní příliš mnoho bitů.

Jak funguje video kodek? Část 1: Základy

Inženýři původně vyvinuli metodu zdvojnásobení vnímané snímkové frekvence zobrazení videa bez použití další šířky pásma. Tato metoda je známá jako prokládané video; V podstatě posílá polovinu obrazovky v prvním „rámci“ a druhou polovinu v dalším „rámci“.

V současné době se scény většinou vykreslují pomocí progresivní skenovací technologie. Je to způsob zobrazování, ukládání nebo přenosu pohyblivých obrázků, ve kterém jsou všechny řádky každého snímku vykresleny postupně.

Jak funguje video kodek? Část 1: Základy

Studna! Nyní jsme si vědomi toho, jak je obraz reprezentován digitálně, jak jsou uspořádány jeho barvy, kolik bitů za sekundu spotřebujeme na zobrazení videa, zda je přenosová rychlost konstantní (CBR) nebo proměnná (VBR). Víme o daném rozlišení pomocí dané snímkové frekvence, známe mnoho dalších pojmů, jako je prokládané video, PAR a některé další.

Odstranění redundance

Je známo, že video bez komprese nelze běžně používat. Hodinové video v rozlišení 720p a 30 snímcích za sekundu by zabralo 278 GB. K této hodnotě se dostaneme vynásobením 1280 x 720 x 24 x 30 x 3600 (šířka, výška, bity na pixel, FPS a čas v sekundách).

Použití bezeztrátové kompresní algoritmy, jako DEFLATE (používá se v PKZIP, Gzip a PNG), nesníží dostatečně požadovanou šířku pásma. Musíme hledat jiné způsoby komprimace videa.

K tomu můžete využít funkce naší vize. Jsme lepší v rozlišení jasu než barvy. Video je série sekvenčních snímků, které se v průběhu času opakují. Mezi sousedními snímky stejné scény jsou malé rozdíly. Každý snímek navíc obsahuje mnoho oblastí používajících stejnou (nebo podobnou) barvu.

Barva, jas a naše oči

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

Jak funguje video kodek? Část 1: Základy

Pokud v levé polovině obrázku nevidíte barvy čtverců A и B jsou vlastně stejné, pak 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 určenými políčky je propojka stejné barvy - takže my (tedy náš mozek) snadno určíme, že jsou ve skutečnosti stejné barvy.

Podívejme se (zjednodušeně) na to, jak fungují naše oči. Oko je složitý orgán skládající se z mnoha částí. Nás však nejvíce zajímají šišky a pruty. Oko obsahuje asi 120 milionů tyčinek a 6 milionů čípků.

Vnímání barvy a jasu považujme za samostatné funkce určitých částí oka (ve skutečnosti je vše poněkud složitější, ale zjednodušíme si to). Tyčinkové buňky jsou zodpovědné hlavně za jas, zatímco čípkové buňky jsou zodpovědné za barvu. Čípky se dělí na tři typy v závislosti na pigmentu, který obsahují: S-čípky (modré), M-čípky (zelené) a L-čípky (červené).

Protože máme mnohem více tyčinek (jas) než čípků (barva), můžeme usoudit, že jsme schopni rozlišovat přechody mezi tmavou a světlou barvou než barvy.

Jak funguje video kodek? Část 1: Základy

Funkce kontrastní citlivosti

Výzkumníci v experimentální psychologii a mnoha dalších oblastech vyvinuli mnoho teorií lidského vidění. A jeden z nich se jmenuje funkce kontrastní citlivosti. Souvisí s prostorovým a časovým osvětlením. Stručně řečeno, jde o to, kolik změn je potřeba, než si jich pozorovatel všimne. Všimněte si množného čísla slova „funkce“. Je to dáno tím, že funkce kontrastní citlivosti můžeme měřit nejen u černobílých snímků, ale i u barevných. Výsledky těchto experimentů ukazují, že ve většině případů 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 této skutečnosti využít.

Barevný model

Trochu jsme přišli na to, jak pracovat s barevnými obrázky pomocí RGB schématu. Existují i ​​jiné modely. Existuje model, který odděluje jas od sytosti a je známý jako YCbCr. Mimochodem, existují i ​​jiné modely, které dělají podobné rozdělení, ale my budeme uvažovat pouze o tomto.

V tomto barevném modelu Y je reprezentace jasu a také používá dva barevné kanály: Cb (sytě modrá) a Cr (sytě červená). YCbCr lze odvodit z RGB a je možná i zpětná konverze. Pomocí tohoto modelu můžeme vytvořit plnobarevné obrázky, jak vidíme níže:

Jak funguje video kodek? Část 1: Základy

Převod mezi YCbCr a RGB

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

Abychom na tuto otázku odpověděli, převedeme RGB na YCbCr. Použijme koeficienty přijaté v normě BT.601, který byl jednotkou doporučen ITU-R. Tato divize stanovuje standardy pro digitální video. Například: co je 4K? Jaká by měla být snímková frekvence, rozlišení, barevný model?

Nejprve spočítejme jas. Použijme konstanty navržené ITU a nahraďme hodnoty RGB.

Y = 0.299R + 0.587G + 0.114B

Poté, co máme jas, oddělíme modrou a červenou barvu:

Cb = 0.564(B - Y)

Cr = 0.713(R - Y)

A můžeme také převést zpět a dokonce získat zelenou pomocí YCbCr:

R = Y + 1.402Cr

B = Y + 1.772Cb

G = Y - 0.344Cb - 0.714Cr

Displeje (monitory, televizory, obrazovky atd.) obvykle používají pouze model RGB. Tento model však může být organizován různými způsoby:

Jak funguje video kodek? Část 1: Základy

Podvzorkování barev

S obrazem reprezentovaným jako kombinace jasu a chrominance můžeme selektivním odstraňováním informací využít větší citlivost lidského zrakového systému na jas než na chrominanci. Chroma subsampling je metoda kódování obrázků s použitím menšího rozlišení pro sytost než pro jas.

Jak funguje video kodek? Část 1: Základy

Jak moc je přípustné snížit barevné rozlišení?! Ukázalo se, že již existují nějaké diagramy, které popisují, jak zacházet s rozlišením a slučováním (Výsledná barva = Y + Cb + Cr).

Tato schémata jsou známá jako downsampling systémy и выражаются в виде 3-кратного соотношения — a:x:y, který určuje počet vzorků jasových a barevných rozdílových signálů.

a — horizontální standard odběru vzorků (obvykle rovný 4)
x — počet vzorků barevnosti v první řadě pixelů (horizontální rozlišení vzhledem k a)
y — počet změn ve vzorcích barevnosti mezi první a druhou řadou pixelů.

Výjimkou je 4:1:0, poskytující jeden vzorek chroma v každém bloku rozlišení jasu 4x4.

Obvyklá schémata používaná v moderních kodecích:

  • 4:4:4 (žádné převzorkování)
  • 4:2:2
  • 4:1:1
  • 4:2:0
  • 4:1:0
  • 3:1:1

YCbCr 4:2:0 - příklad fúze

Zde je sloučený obrázek pomocí YCbCr 4:2:0. Všimněte si, že utrácíme pouze 12 bitů na pixel.

Jak funguje video kodek? Část 1: Základy

Takto vypadá stejný obrázek zakódovaný s hlavními typy podvzorkování barev. První řádek je finální YCbCr, spodní řádek ukazuje barevné rozlišení. Velmi slušné výsledky, s ohledem na mírnou ztrátu kvality.

Jak funguje video kodek? Část 1: Základy

Pamatujete si, když jsme počítali s 278 GB úložného prostoru pro uložení hodinového video souboru v rozlišení 720p a 30 snímcích za sekundu? Pokud použijeme YCbCr 4:2:0, tak se tato velikost zmenší na polovinu – 139 GB. Zatím má k přijatelnému výsledku ještě daleko.

Histogram YCbCr můžete získat sami pomocí FFmpeg. Na tomto snímku dominuje modrá nad červenou, což je dobře vidět na samotném histogramu.

Jak funguje video kodek? Část 1: Základy

Barva, jas, barevný gamut - videorecenze

Doporučujeme zhlédnout toto skvělé video. Vysvětluje, co je jas, a obecně jsou všechny tečky tečkované ё o jasu a barvě.

Typy rámů

Pokračujme. Pokusme se eliminovat časovou nadbytečnost. Nejprve si ale vymezme základní terminologii. Řekněme, že máme film s 30 snímky za sekundu, zde jsou jeho první 4 snímky:

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

V rámcích můžeme vidět hodně opakování: například modré pozadí, které se nemění snímek od snímku. Abychom tento problém vyřešili, můžeme je abstraktně rozdělit do tří typů rámců.

I-snímek (Intro Frame)

I-rám (referenční rám, klíčový rám, vnitřní rám) je samostatný. Bez ohledu na to, co chcete vizualizovat, I-snímek je v podstatě statická fotografie. První snímek je obvykle I-snímek, ale I-snímky budeme pravidelně pozorovat i mezi ne prvními snímky.

Jak funguje video kodek? Část 1: Základy

P-rám (Predikovaný snímek)

P-кадр (прогнозируемый кадр) использует преимущество того факта, что почти всегда текущее изображение может быть воспроизведено с использованием предыдущего кадра. Например, во втором кадре единственным изменением является движущийся вперёд мяч. Мы можем получить кадр 2 просто немного видоизменив кадр 1, только используя разницу между этими кадрами. Для построения кадра 2 ссылаемся на предшествующий ему кадр 1.

Jak funguje video kodek? Část 1: ZákladyJak 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, aby byla zajištěna ještě lepší komprese?! Toto je v podstatě B-snímek (obousměrný snímek).

Jak funguje video kodek? Část 1: ZákladyJak funguje video kodek? Část 1: ZákladyJak funguje video kodek? Část 1: Základy

Mezitímní výběr

Tyto typy rámů se používají k zajištění nejlepší možné komprese. Jak k tomu dojde, se podíváme v další části. Prozatím poznamenejme, že „nejdražší“ z hlediska spotřebované paměti je I-snímek, P-snímek je znatelně levnější, ale nejziskovější možností pro video je B-snímek.

Jak funguje video kodek? Část 1: Základy

Časová redundance (mezirámcová predikce)

Podívejme se, jaké máme možnosti, abychom minimalizovali opakování v průběhu času. Tento typ redundance můžeme řešit pomocí metod křížové predikce.

Pokusíme se strávit co nejméně bitů na zakódování sekvence snímků 0 a 1.

Jak funguje video kodek? Část 1: Základy

Můžeme vyrábět odčítání, jednoduše odečteme snímek 1 od snímku 0. Dostaneme snímek 1, použijeme pouze rozdíl mezi ním a předchozím snímkem, ve skutečnosti pouze zakódujeme výsledný zbytek.

Jak funguje video kodek? Část 1: Základy

Ale co kdybych vám řekl, že existuje ještě lepší metoda, která používá ještě méně bitů?! Nejprve rozdělme snímek 0 na čistou mřížku skládající se z bloků. A pak se pokusíme porovnat bloky ze snímku 0 se snímkem 1. Jinými slovy, odhadneme pohyb mezi snímky.

Z Wikipedie - kompenzace pohybu bloku

Kompenzace pohybu bloku rozděluje aktuální snímek na nepřekrývající se bloky a vektor kompenzace pohybu hlásí původ bloků (běžná mylná představa je, že předchozí snímek je rozdělen na nepřekrývající se bloky a vektory kompenzace pohybu říkají, kam tyto bloky jdou. Ale ve skutečnosti je to naopak - neanalyzuje se předchozí snímek, ale následující; není jasné, kde se bloky pohybují, ale odkud přišly). Zdrojové bloky se ve zdrojovém rámci obvykle překrývají. Některé algoritmy pro kompresi videa sestavují aktuální snímek z částí ani ne jednoho, ale několika dříve přenesených snímků.

Jak funguje video kodek? Část 1: Základy

Během procesu hodnocení vidíme, že se míček pohnul z (x= 0, y=25) až (x= 6, y=26), hodnoty x и y určit vektor pohybu. Dalším krokem, který můžeme udělat pro zachování bitů, je zakódovat pouze rozdíl pohybových vektorů mezi poslední polohou bloku a předpovězenou pozicí, takže konečný pohybový vektor bude (x=6-0=6, y=26-25=1 ).

V reálné situaci by se tento míček rozdělil na n bloky, ale to na podstatě věci nic nemění.

Объекты в кадре перемещаются в трёх измерениях, поэтому при движении шарика он может стать визуально меньше (или больше, если движется в сторону зрителя). Это нормально, что не будет идеального соответствия между блоками. Вот совмещенный вид нашей оценки и реальной картины.

Jak funguje video kodek? Část 1: Základy

Ale vidíme, že když použijeme odhad pohybu, je pro kódování znatelně méně dat, než když použijeme jednodušší metodu výpočtu delty mezi snímky.

Jak funguje video kodek? Část 1: Základy

Jak by vypadala skutečná kompenzace pohybu

Tato technika se aplikuje na všechny bloky najednou. Často bude naše podmíněná pohyblivá koule rozdělena do několika bloků najednou.

Jak funguje video kodek? Část 1: Základy

Pomocí těchto pojmů si můžete sami vyzkoušet jupyter.

Chcete-li vidět vektory pohybu, můžete vytvořit externí predikční video pomocí ffmpeg.

Jak funguje video kodek? Část 1: Základy

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

Jak funguje video kodek? Část 1: Základy

Prostorová redundance (interní předpověď)

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

Jak funguje video kodek? Část 1: Základy

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

Jak funguje video kodek? Část 1: Základy

Toto je I-rám. Nemůžeme vzít předchozí snímky pro predikci, ale můžeme je komprimovat. Pojďme zakódovat výběr červeného bloku. Když se podíváme k jeho sousedům, všimneme si, že kolem něj panují nějaké barevné trendy.

Jak funguje video kodek? Část 1: Základy

Předpokládáme, že barvy se v rámu šíří vertikálně. Což znamená, že barva neznámých pixelů bude obsahovat hodnoty svých sousedů.

Jak funguje video kodek? Část 1: Základy

Такой прогноз может оказаться и неверным. Именно по этой причине нужно применить этот метод ( внутренний прогноз), а затем ещё вычесть реальные значения. Это даст нам остаточный блок, что приведёт к гораздо более сжатой матрице по сравнению с оригиналом.

Jak funguje video kodek? Část 1: Základy

Pokud si chcete procvičit interní predikce, můžete si vytvořit video makrobloků a jejich predikcí pomocí ffmpeg. Abyste pochopili význam každé barvy bloku, budete si muset přečíst dokumentaci ffmpeg.

Jak funguje video kodek? Část 1: Základy

Nebo můžete použít Intel Video Pro Analyzer (jak jsem uvedl výše, zkušební verze zdarma je omezena na prvních 10 snímků, ale to vám bude zpočátku stačit).

Jak funguje video kodek? Část 1: Základy

Druhá část: Принципы работы видеокодека

Zdroj: www.habr.com

Přidat komentář