Hvordan en videokoder fungerer. Del 1. Grundlæggende

Anden del: Principperne for videokodek

Enhver raster billede kan repræsenteres som en to-dimensionel matrix. Når vi taler om farver, kan idéen videreudvikles ved at betragte billedet som en tre-dimensionel matrix, hvor ekstra dimensioner bruges til at gemme data om hver af farverne.

Hvis vi betragter den endelige farve som en kombination af de såkaldte grundfarver (rød, grøn og blå), definerer vi tre plan i vores tre-dimensionale matrix: det første for den røde farve, det andet for den grønne og det sidste for den blå.
Hvordan en videokoder fungerer. Del 1. Grundlæggende
Vi vil kalde hver punkt i denne matrix for et pixel (billedelement). Hvert pixel indeholder oplysninger om intensiteten (normalt som en numerisk værdi) for hver farve. For eksempel, et rødt pixel betyder, at der er 0 grøn farve, 0 blå og maksimalt rødt. Et pixel af lyserød farve kan dannes ved hjælp af en kombination af de tre farver. Ved at bruge et numerisk interval fra 0 til 255, defineres lyserød pixel som Rød = 255, Grøn = 192 og Blå = 203.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Artiklen er offentliggjort med støtte fra EDISON.

Vi udvikler applikationer til videoovervågning, streaming video, samt arbejder med videooptagelser i operationsstuen.

Alternative måder at kode farvebilleder på

Der er mange andre modeller til at repræsentere de farver, som billedet består af. For eksempel kan man bruge en indekseret palet, hvor kun én byte kræves for at repræsentere hvert pixel, i stedet for de tre, der er nødvendige med RGB-modellen. I en sådan model kan man bruge en 2D-matrix i stedet for en 3D-matrix til at repræsentere hver farve. Det sparer hukommelse, men giver en mindre farveskala.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

RGB

Se for eksempel på dette billede nedenfor. Det første ansigt er helt farvet. De andre er de røde, grønne og blå plan (intensiteten af de respektive farver er vist i gråtoner).

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Vi ser, at nuancerne af rødt i originalen vil være på de samme steder, hvor de lyseste dele af det andet ansigt observeres. Mens bidraget fra den blå farve hovedsageligt kan ses i Mario's øjne (det sidste ansigt) og elementer i hans tøj. Bemærk hvor alle tre farveplaner bidrager mindst (de mørkeste dele af billederne) — det er til Mario's moustache.

For storing the intensity of each color, a specific number of bits is required — this value is called bit depth. Suppose 8 bits (ranging from 0 to 255) are used for one color channel. Then we have a color depth of 24 bits (8 bits * 3 channels R/G/B).

Another property of images is resolution, which represents the number of pixels in one dimension. It is often denoted as width × height, as illustrated in the image example of 4 by 4.
Hvordan en videokoder fungerer. Del 1. Grundlæggende

Another property we deal with when working with images/videos is aspect ratio, describing the usual proportional relationship between the width and height of an image or pixel.

When it is said that a certain movie or picture has a size of 16 by 9, it usually refers to screen aspect ratio (DAR — fra Display Aspect Ratio). However, there may be different shapes of individual pixels — in this case, we refer to pixel aspect ratio (PAR — fra Pixel Aspect Ratio).

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Hvordan en videokoder fungerer. Del 1. Grundlæggende

A note for the host: DVD svarer til DAR 4 by 3

Although the actual resolution of DVD is 704×480, it maintains the aspect ratio of 4:3 since the PAR is 10:11 (704×10 / 480×11).

Lastly, we can define en video as a sequence of n frames over a period tid, which can be considered an additional dimension. And n then — it is the frame rate or the number of frames per second (FPS — fra Frames per Second).

Hvordan en videokoder fungerer. Del 1. Grundlæggende

The number of bits per second required to display video is its bitrate — bitrate = width * height * bit depth * frames per second.

For example, for video at 30 frames per second, 24 bits per pixel, with a resolution of 480×240, 82,944,000 bits per second or 82,944 Mbps (30x480x240x24) will be required — unless any compression methods are used.

If the bitrate

is nearly constant , it is calledconstant bitrate CBR (constant bit rate — fra ). But it can also vary, in which case it is calledvariable bitrate VBR (variable bit rate — fra This chart demonstrates limited VBR, where not too many bits are used in the case of a completely dark frame.).

Initially, engineers developed a method to double the perceived frame rate of video displays without using additional bandwidth. This method is known as

Hvordan en videokoder fungerer. Del 1. Grundlæggende

interlaced video чересстрочное видео; i hovedsagen sender den halvdelen af skærmen i det første "billede" og den anden halvdel i det næste "billede".

I øjeblikket visualiseres scener hovedsageligt ved brug af progressiv skanningsteknologi. Det er en metode til visning, opbevaring eller transmission af bevægelige billeder, hvor alle linjer i hvert billede tegnes sekventielt.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Nå, nu ved vi, hvordan et billede repræsenteres digitalt, hvordan dets farver er struktureret, hvor mange bits per sekund vi bruger til at vise video, hvis overførselsraten er konstant (CBR) eller variabel (VBR). Vi kender den angivne opløsning ved hjælp af den angivne billedfrekvens og har lært mange andre termer såsom interlaced video, PAR og nogle andre.

Fjernelse af redundans

Det er kendt, at ukomprimeret video normalt ikke kan anvendes. En times video med 720p opløsning og 30 billeder per sekund ville fylde 278 GB. Dette tal opnås ved at multiplicere 1280 x 720 x 24 x 30 x 3600 (bredde, højde, bits per pixel, FPS og tid i sekunder).

Brugen af tabsløse komprimeringsalgoritmer, såsom DEFLATE (bruges i PKZIP, Gzip og PNG), vil ikke give en tilstrækkelig reduktion af den nødvendige båndbredde. Vi er nødt til at finde andre metoder til videokomprimering.

For dette kan vi udnytte vores syns særlige egenskaber. Vi kan bedre skelne lysstyrke end farver. Video er en sekvens af billeder, der gentages over tid. Forskellene mellem nabobillederne i en scene er små. Derudover indeholder hvert billede mange områder, der bruger den samme (eller lignende) farve.

Farve, lysstyrke og vores øjne

Vores øjne er mere følsomme over for lysstyrke end farve. Du kan selv opleve dette ved at se på dette billede.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Hvis du ikke kan se, at farverne på kvadraterne i venstre halvdel af billedet A og B faktisk er ens, så er det helt normalt. Vores hjerne får os til at fokusere mere på lys og skygge end på farve. Til højre er der en forbindelse af den samme farve mellem de markerede kvadrater - derfor (altså vores hjerne) kan let fastslå, at farven faktisk er den samme.

Lad os forenklet gennemgå, hvordan vores øjne fungerer. Øjet er et komplekst organ bestående af mange dele. Men vi er især interesseret i stavene og keglerne. Øjet indeholder omkring 120 millioner stave og 6 millioner kegler.

Lad os se på farve- og lysoplevelse som separate funktioner af bestemte dele af øjet (faktisk er det lidt mere kompliceret, men vi forenkler). Stavcellerne er primært ansvarlige for lysstyrken, mens keglecellerne er ansvarlige for farven. Keglerne opdeles i tre typer, afhængigt af det pigment, de indeholder: S-kegler (blå farve), M-kegler (grøn farve) og L-kegler (rød farve).

Da vi har meget flere stave (lysstyrke) end kegler (farve), kan vi konkludere, at vi er bedre til at skelne mellem overgange mellem mørke og lys end mellem farver.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Funktioner af kontrastfølsomhed

Forskere inden for eksperimentel psykologi og mange andre områder har udviklet mange teorier om menneskesyn. En af dem kaldes funktionerne af kontrastfølsomhed. De relaterer sig til rumlig og tidsmæssig belysning. Kort sagt handler det om, hvor mange ændringer der kræves, før observatøren bemærker dem. Bemærk det flertallige ord "funktion". Dette er fordi, at vi kan måle kontrastfølsomhed for både sort-hvide billeder og farvebilleder. Resultaterne af disse eksperimenter viser, at vores øjne i de fleste tilfælde er mere følsomme over for lysstyrke end for farve.

Da det er kendt, at vi er mere følsomme over for lysstyrken af et billede, kan man forsøge at udnytte denne kendsgerning.

Farvemodel

Vi har lidt forstået, hvordan man arbejder med farvebilleder ved hjælp af RGB-systemet. Der er også andre modeller. Der findes en model, der adskiller lysstyrke fra farve og som er kendt som YCbCr. For øvrigt findes der også andre modeller, der gør en tilsvarende opdeling, men vi vil kun se på denne.

I denne farvemodel Y — er repræsentationen af lysstyrke, og der anvendes to farvekanaler: Cb (mættet blå) og Cr (mættende rød). YCbCr kan opnås fra RGB, ligesom det er muligt at omvendt konvertere. Ved at bruge denne model kan vi skabe farvebilleder, som vist nedenfor:

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Konvertering mellem YCbCr og RGB

Nogen vil indvende: hvordan er det muligt at få alle farver, hvis den grønne ikke anvendes?

For at svare på dette spørgsmål, lad os konvertere RGB til YCbCr. Vi vil bruge de koefficienter, der er vedtaget i standarden BT.601, som blev anbefalet af afdelingen ITU-R. Denne afdeling definerer standarder for digital video. For eksempel: hvad er 4K? Hvad skal billedhastigheden, opløsningen, farvemodellen være?

Først vil vi beregne lysstyrken. Vi vil bruge konstanterne, som ITU har foreslået, og erstatte RGB-værdierne.

Y = 0.299R + 0.587G + 0.114B

Når vi har fået lysstyrken, vil vi adskille den blå og røde farve:

Cb = 0.564(B — Y)

Cr = 0.713(R — Y)

Og vi kan også konvertere tilbage og selv få den grønne ved hjælp af YCbCr:

R = Y + 1.402Cr

B = Y + 1.772Cb

G = Y — 0.344Cb — 0.714Cr

Generelt bruger skærme (monitorer, tv, skærme osv.) kun RGB-modellen. Men denne model kan organiseres på forskellige måder:

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Farvesubprøve

Med billedet præsenteret som en kombination af lysstyrke og farveinformation kan vi bruge den menneskelige syns høje følsomhed over for lysstyrke sammenlignet med farve, hvis vi selektivt fjerner information. Farvesubdiscremation er en metode til kodning af billeder, der bruger en lavere opløsning for farveinformation end for lysstyrken.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Hvor meget kan farveopløsningen reduceres?! Det viser sig, at der allerede findes nogle skemaer, der beskriver, hvordan man håndterer opløsning og fusion (Endelig farve = Y + Cb + Cr ).

Disse skemaer er kendt som subdiscremation systemer og udtrykkes i et 3:1-forhold — en:x:y, hvilket definerer antallet af prøver af lysstyrke og farveforskelssignaler.

en — standards horisontale prøveudtagning (normalt lig med 4)
x — antallet af prøver for farve i den første række af pixels (horisontal opløsning i forhold til en)
y — antallet af ændringer i farveprøver mellem den første og den anden række af pixels.

Undtagelsen er 4:1:0, der sikrer én farveprøve i hver blok af lysstyrkeopløsning på 4 gange 4.

De generelle skemaer, der bruges i moderne codec'er:

  • 4:4:4 (uden subdiscremation)
  • 4:2:2
  • 4:1:1
  • 4:2:0
  • 4:1:0
  • 3:1:1

YCbCr 4:2:0 — et eksempel på fusion

Her er et samlet billede af YCbCr 4:2:0. Bemærk, at vi kun bruger 12 bit pr. pixel.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Sådan ser det samme billede ud, kodet med de grundlæggende typer farvesubsampling. Den øverste række er den endelige YCbCr, den nederste række viser farvernes opløsning. Temmelig anstændige resultater, taget de små kvalitetstab i betragtning.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Husk, vi talte om 278 GB diskplads til at lagre en times video med 720p opløsning og 30 billeder pr. sekund? Hvis vi bruger YCbCr 4:2:0, vil denne størrelse blive halveret - 139 GB. Indtil videre er vi stadig langt fra et acceptabelt resultat.

Du kan selv få en YCbCr-histogram ved hjælp af FFmpeg. I dette billede dominerer blå over rød, hvilket tydeligt kan ses i selve histogrammet.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Farver, lysstyrke, farveskala - videooversigt

Dette fantastiske video anbefales at se. Det forklarer, hvad lysstyrke er, og klarlægger generelt alle punkter omkring å lysstyrke og farve.

Afspil video

Typer af billeder

Lad os komme videre. Vi vil forsøge at fjerne tidsmæssig redundans. Men først lad os definere nogle grundlæggende termer. Antag, at vi har en film med 30 billeder pr. sekund, her er de første 4 billeder:

Hvordan en videokoder fungerer. Del 1. Grundlæggende Hvordan en videokoder fungerer. Del 1. Grundlæggende Hvordan en videokoder fungerer. Del 1. Grundlæggende Hvordan en videokoder fungerer. Del 1. Grundlæggende

Vi kan se mange gentagelser i billederne: for eksempel en blå baggrund, der ikke ændrer sig fra billede til billede. For at løse dette problem kan vi abstrakt klassificere dem som tre typer billeder.

I-billede (Intro Frame)

I-billede (referencebillede, nøglebillede, internt billede) er selvstændigt. Uanset hvad der skal visualiseres, er I-billedet i bund og grund et statisk fotografi. Det første billede er normalt et I-billede, men vi vil regelmæssigt observere I-billeder blandt billede, der ikke er de første.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

P-billede (Predicted Frame)

P-billede (forudsigeligt billede) udnytter det faktum, at det næsten altid er muligt at gengive det nuværende billede ved hjælp af det foregående billede. For eksempel er den eneste ændring i det andet billede en bold, der bevæger sig fremad. Vi kan få billede 2 ved blot at ændre billede 1 lidt ved kun at bruge forskellen mellem disse billeder. For at konstruere billede 2 henviser vi til det foregående billede 1.

Hvordan en videokoder fungerer. Del 1. Grundlæggende ← Hvordan en videokoder fungerer. Del 1. Grundlæggende

B-billede (Bi-predictive Frame)

Hvordan med links ikke kun til fortidige, men også til fremtidige billeder for at sikre endnu bedre kompression?! Dette er i virkeligheden en B-frame (to-vejs frame).

Hvordan en videokoder fungerer. Del 1. Grundlæggende ← Hvordan en videokoder fungerer. Del 1. Grundlæggende → Hvordan en videokoder fungerer. Del 1. Grundlæggende

Interimresultat

Disse typer frames bruges til at sikre den bedst mulige kompression. Vi vil se på, hvordan det fungerer i næste sektion. Men lad os bemærke, at I-frame er den mest 'dyre' i hukommelsesanvendelse, P-frame er betydeligt billigere, mens den mest rentable mulighed for video er B-frame.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Tidsoverskydelse (inter-frame forudsigelse)

Lad os se på, hvilke muligheder vi har for at minimere tidsmæssige gentagelser. Denne type overskydelse vil vi løse med metoder til gensidig forudsigelse.

Vi vil forsøge at bruge så få bits som muligt til at kode sekvensen af frames 0 og 1.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Vi kan udføre subtraktion, vi subtraherer simpelthen frame 1 fra frame 0. Vi får frame 1, men bruger kun forskellen mellem den og den foregående frame, hvilket i praksis betyder, at vi kun koder det fremkomne rester.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Men hvad hvis jeg fortalte dig, at der er en endnu bedre metode, der bruger endnu færre bits?! Først lad os opdele frame 0 i et klart gitter bestående af blokke. Så lad os prøve at matche blokkene fra frame 0 med frame 1. Med andre ord, lad os vurdere bevægelsen mellem frames.

Fra Wikipedia — blokbevægelseskompensation

Blokbevægelseskompensation deler den aktuelle frame op i ikke-overlappende blokke, og bevægelsesvektorerne angiver oprindelsen af blokke (en almindelig misforståelse er, at den forrige frame deles op i ikke-overlappende blokke, og bevægelsesvektorerne angiver, hvor disse blokke bevæger sig hen. Men i virkeligheden analyseres ikke den forrige frame, men den efterfølgende; man finder ikke ud af, hvor blokke bevæger sig hen, men hvor de er kommet fra). Normalt overlapper de oprindelige blokke i den oprindelige frame. Nogle videokomprimeringsalgoritmer samler den aktuelle frame fra dele af flere tidligere sendte frames.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Under evalueringen ser vi, at bolden er flyttet fra (x=0, y=25) til (x=6, y=26), værdier x og y bestemmer bevægelsesretningen. Et andet skridt, vi kan tage for at bevare bits, er kun at kode forskellen i bevægelsesvektorer mellem den seneste position af blokken og den forventede, så den endelige bevægelsesvektor bliver (x=6-0=6, y=26-25=1).

I en realistisk situation ville denne bold blive delt op i n blokke, men det ændrer ikke essensen af sagen.

Objekter i billedet bevæger sig i tre dimensioner, så når bolden bevæger sig, kan den visuelt blive mindre (eller større, hvis den bevæger sig mod seeren). Det er normalt, at der ikke vil være en perfekt overensstemmelse mellem blokke. Her er et kombineret billede af vores vurdering og den virkelige scene.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Men vi ser, at når vi anvender bevægelsesvurderingen, er der markant mindre data at kode, end ved brug af en mere simpel metode til at beregne delta mellem rammer.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Hvordan vil den reelle bevægelseskompensation se ud

Denne metode anvendes straks på alle blokke. Ofte vil vores hypotetiske bevægende bold blive opdelt i flere blokke med det samme.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Du kan selv udforske disse koncepter ved at bruge Jupyter.

For at se bevægelsesvektorer kan der laves en video med ekstern forudsigelse ved hjælp af ffmpeg.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Du kan også benytte Intel Video Pro Analyzer (det er betalingsbaseret, men der er en gratis prøveversion, der kun er begrænset til de første ti rammer).

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Spatial redundans (intern forudsigelse)

Hvis man analyserer hver ramme i videoen, vil man opdage mange sammenhængende områder.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Lad os tage et kig på dette eksempel. Denne scene består primært af blå og hvide farver.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Dette er I-rammen. Vi kan ikke tage tidligere rammer til forudsigelse, men vi kan komprimere den. Lad os kode udvælgelsen af den røde blok. Hvis vi ser på dens naboer, bemærker vi, at der er nogle farvetendenser omkring den.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Lad os antage, at farverne i rammen spreder sig vertikalt. Hvilket betyder, at farven af de ukendte pixels vil indeholde værdierne af dens naboer.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Sådan en forudsigelse kan også være forkert. Netop derfor er det nødvendigt at anvende denne metode (intern forudsigelse) og så trække de reelle værdier fra. Dette vil give os en restblok, hvilket vil føre til en meget mere komprimeret matrix sammenlignet med originalen.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Hvis du vil øve dig på interne forudsigelser, kan du oprette en video med makroblokke og deres forudsigelser ved hjælp af ffmpeg. For at forstå betydningen af hver farveblok skal du gøre dig bekendt med ffmpeg-dokumentationen.

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Eller du kan bruge Intel Video Pro Analyzer (som jeg nævnte tidligere, er der i den gratis prøveversion en begrænsning på de første 10 rammer, men det vil være tilstrækkeligt i starten).

Hvordan en videokoder fungerer. Del 1. Grundlæggende

Anden del: Principperne for videokodek

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster