Cumu funziona un codec video? Parte 1: Basics

A seconda parte: Cumu funziona u codec video

Ogni raster immagine pò esse rapprisintatu in a forma matrice bidimensionale. Quandu si tratta di culori, l'idea pò esse sviluppata fighjendu una maghjina cum'è matrice tridimensionale, in quale dimensioni supplementari sò aduprate per almacenà dati per ognunu di i culori.

Se cunsideremu u culore finali cum'è una cumminazione di u cusì chjamatu. culori primari (russu, verde è turchinu), in a nostra matrice tridimensionale definiscenu trè piani: u primu per u rossu, u sicondu per u verde è l'ultimu per u turchinu.
Cumu funziona un codec video? Parte 1: Basics
Chjameremu ogni puntu in questa matrice un pixel (elementu di l'imaghjini). Ogni pixel cuntene infurmazione nantu à l'intensità (di solitu cum'è un valore numericu) di ogni culore. Per esempiu, pixel rossu significa chì cuntene 0 verdi, 0 blu è rossi massimu. Pixel rosa pò esse furmatu cù una cumminazzioni di trè culori. Utilizendu un intervallu numericu da 0 à 255, un pixel rosa hè definitu cum'è Rossu = 255, Verde = 192 и Blu = 203.

Cumu funziona un codec video? Parte 1: Basics

Questu articulu hè statu publicatu cù u sustegnu di EDISON.

Avemu sviluppatu applicazioni per a videovigilanza, video streaming, è ancu simu ingaghjati registrazione video in a sala chirurgica.

Modi alternattivi per codificà una maghjina di culore

Ci hè parechje altre mudelli per rapprisintà i culori chì custituiscenu una maghjina. Per esempiu, pudete aduprà una paleta indexata, chì richiede solu un byte per rapprisintà ogni pixel, invece di i trè necessarii quandu si usa u mudellu RGB. In un tali mudellu, hè pussibule aduprà una matrice 2D invece di una matrice 3D per rapprisintà ogni culore. Questu salva a memoria, ma dà una gamma di culori più chjuca.

Cumu funziona un codec video? Parte 1: Basics

RGB

Per esempiu, fate un ochju à sta stampa sottu. A prima faccia hè cumplitamenti dipinta. L'altri sò i piani rossi, verdi è blu (l'intensità di i culori currispondenti sò mostrati in scala di grisa).

Cumu funziona un codec video? Parte 1: Basics

Avemu vistu chì i sfumaturi di rossu in l'uriginale seranu in i stessi lochi induve i più brillanti di a seconda faccia sò osservati. Mentre chì a cuntribuzione di u turchinu pò esse vistu principarmenti solu in l'ochji di Mario (l'ultima faccia) è elementi di a so robba. Avvisu induve tutti i trè piani di culore cuntribuiscenu u minimu (a parte più scura di l'imaghjini) - u mustache di Mario.

Per almacenà l'intensità di ogni culore, un certu numaru di bit hè necessariu - sta quantità hè chjamata prufundità di pocu. Diciamu chì 8 bit sò spesi (basatu nantu à un valore da 0 à 255) per pianu di culore. Allora avemu una prufundità di culore di 24 bits (8 bits * 3 piani R / G / B).

Una altra pruprietà di l'imaghjini hè risoluzione, chì hè u numeru di pixel in una dimensione. Spessu denotatu cum'è larghezza × altezza, cum'è in l'esempiu 4 per 4 quì sottu.
Cumu funziona un codec video? Parte 1: Basics

Un'altra pruprietà chì avemu trattatu quandu u travagliu cù l'imaghjini / video hè inquadramentu d'aspettu, chì descrive a relazione proporzionale normale trà a larghezza è l'altezza di una maghjina o pixel.

Quandu dicenu chì un certu filmu o stampa hè 16 per 9 in grandezza, di solitu significanu mostra u rapportu d'aspettu (BUT - da Mostra u rapportu d'aspettu). Tuttavia, qualchì volta ci ponu esse diverse forme di pixel individuali - in questu casu parlemu rapportu di pixel (PAR - da Rapportu d'aspettu di pixel).

Cumu funziona un codec video? Parte 1: Basics

Cumu funziona un codec video? Parte 1: Basics

Nota à l'hostess: DVD соответствует DAR 4 à 3

Ancu s'è a risoluzione DVD attuale hè 704x480, mantene sempre un rapportu d'aspettu 4: 3 perchè u PAR hè 10:11 (704x10 / 480x11).

È infine, pudemu determinà видео cum'è una sequenza di n frames per u periodu di u tempu, chì pò esse cunsideratu una dimensione supplementaria. A n allora hè a freccia di fotogrammi o u numeru di fotogrammi per seconda (FPS - da Frames per Secondu).

Cumu funziona un codec video? Parte 1: Basics

U numeru di bit per seconda necessariu per vede un video hè u so velocità di trasmissione - bitrate.

bitrate = larghezza * altezza * prufundità di bit * frames per seconda

Per esempiu, un video di 30 fps, 24 bps, 480x240 necessitava 82,944,000 bps o 82,944 Mbps (30x480x240x24) - ma questu hè se ùn hè micca utilizatu un metudu di compressione.

Se a velocità di trasferimentu quasi custanti, allora si chjama vitezza di trasmissione custanti (cbr - da velocità di bit constante). Ma pò ancu varià, in questu casu hè chjamatu baud rate variabile (VBR - da velocità di bit variabile).

Stu graficu mostra un VBR limitatu, induve ùn sò micca troppu bits perditi in u casu di un quadru completamente scuru.

Cumu funziona un codec video? Parte 1: Basics

L'ingegneri hà sviluppatu inizialmente un metudu per duppià a freccia di fotogramma percepita di una visualizazione video senza aduprà larghezza di banda supplementaria. Stu metudu hè cunnisciutu cum'è video intrecciatu; In fondu, manda a mità di u screnu in u primu "frame" è l'altra mità in u prossimu "frame".

Attualmente, i sceni sò principalmente resi cù l'usu tecnulugia di scanning progressiva. Hè un metudu di visualizà, almacenà o trasmette l'imaghjini in muvimentu in quale tutte e linee di ogni quadru sò tracciate in sequenza.

Cumu funziona un codec video? Parte 1: Basics

Ebbè ! Avà sapemu cumu una maghjina hè rapprisintata digitalmente, cumu si sò disposti i so culori, quanti bits per seconda passemu per vede u video, se u bit rate hè constante (CBR) o variabile (VBR). Sapemu di una risuluzione determinata utilizendu una freccia di fotogramma data, avemu familiarizatu cù assai altri termini, cum'è video interlaced, PAR è alcuni altri.

Eliminazione di a redundanza

Hè cunnisciutu chì u video senza cumpressione ùn pò esse usatu nurmalmente. Un video d'una ora à una risoluzione di 720p è 30 frames per seconda piglià 278 GB. Arrivemu à stu valore multiplicendu 1280 x 720 x 24 x 30 x 3600 (larghezza, altezza, bits per pixel, FPS è tempu in seconde).

Usu algoritmi di cumpressione senza perdita, cum'è DEFLATE (usatu in PKZIP, Gzip è PNG), ùn riducerà micca abbastanza a larghezza di banda necessaria. Avemu da circà altre manere di cumpressione video.

Per fà questu, pudete aduprà e caratteristiche di a nostra visione. Semu megliu à distingue a luminosità di u culore. Un video hè una seria d'imaghjini sequenziali chì si repite in u tempu. Ci hè una piccula differenza trà i frames adiacenti di a listessa scena. Inoltre, ogni quadru cuntene assai spazii chì utilizanu u listessu culore (o simile).

Culore, luminosità è i nostri ochji

I nostri ochji sò più sensibili à a luminosità cà à u culore. Pudete vede questu per voi stessu fighjendu sta stampa.

Cumu funziona un codec video? Parte 1: Basics

Se ùn vede micca chì nantu à a mità manca di l'imaghjini i culori di i quadrati A и B sò veramente listessi, allora hè normale. U nostru cervellu ci obbliga à prestà più attenzione à a luce è l'ombra piuttostu chè à u culore. À u latu drittu trà i quadrati designati ci hè un jumper di u listessu culore - cusì noi (vale à dì u nostru cervu) determina facilmente chì, in fattu, sò u listessu culore.

Fighjemu (in modu simplificatu) cumu travaglianu i nostri ochji. L'ochju hè un organu cumplessu custituitu di parechje parte. In ogni casu, simu più interessate in cuni è bastone. L'ochju cuntene circa 120 milioni di bastoncini è 6 milioni di coni.

Cunsideremu a percepzione di u culore è a luminosità cum'è funzioni separati di certi parti di l'ochju (in fatti, tuttu hè un pocu più cumplicatu, ma simplificàremu). E cellule di bastone sò principarmenti rispunsevuli di a luminosità, mentre chì e cellule di cune sò rispunsevuli di u culore. I cuni sò spartuti in trè tippi, secondu u pigmentu chì cuntenenu: S-cones (blu), M-cones (verde) è L-cones (rossu).

Siccomu avemu assai più bastone (luminosità) chì cuni (culore), pudemu cuncludi chì simu più capaci di distinguiri transizzioni trà u scuru è u lume chì i culori.

Cumu funziona un codec video? Parte 1: Basics

Funzioni di sensibilità à u cuntrastu

I ricercatori in a psiculugia sperimentale è parechji altri campi anu sviluppatu assai teorii di a visione umana. È unu di elli hè chjamatu funzioni di sensibilità di cuntrastu. Sò ligati à l'illuminazione spaziale è temporale. In breve, si tratta di quanti cambiamenti sò necessarii prima chì un observatore li nota. Nota u plurale di a parolla "funzione". Questu hè duvuta à u fattu chì pudemu misurà e funzioni di sensibilità di cuntrastu micca solu per l'imaghjini in biancu è biancu, ma ancu per quelli di culore. I risultati di sti esperimenti mostranu chì in a maiò parte di i casi i nostri ochji sò più sensittivi à a luminosità cà à u culore.

Siccomu sapemu chì simu più sensittivi à a luminosità di l'imaghjini, pudemu pruvà à utilizà stu fattu.

Modellu di culore

Avemu capitu un pocu cumu travaglià cù l'imaghjini di culore cù u schema RGB. Ci sò ancu altri mudelli. Ci hè un mudellu chì separa a luminanza da a croma è hè cunnisciutu cum'è YCbCr. In modu, ci sò altri mudelli chì facenu una divisione simili, ma avemu da cunsiderà solu questu.

In questu mudellu di culore Y hè una rapprisintazioni di a luminosità, è usa ancu dui canali di culore: Cb (blu riccu) è Cr (rossu riccu). YCbCr pò esse derivati ​​​​da RGB, è a cunversione inversa hè ancu pussibule. Aduprendu stu mudellu pudemu creà l'imaghjini di culore cum'è vedemu quì sottu:

Cumu funziona un codec video? Parte 1: Basics

Cunvertisce trà YCbCr è RGB

Qualchissia s'oppone: cumu hè pussibule di ottene tutti i culori se u verde ùn hè micca usatu?

Per risponde à sta quistione, cunvertisce RGB à YCbCr. Utilizemu i coefficienti aduttati in u standard BT.601, chì era cunsigliatu da l'unità ITU-R. Questa divisione stabilisce i standard per u video digitale. Per esempiu: chì hè 4K? Chì duverebbe esse a freccia di quadru, a risoluzione, u mudellu di culore?

Prima, calculemu a luminosità. Utilizemu i custanti pruposti da l'ITU è rimpiazzà i valori RGB.

Y = 0.299R + 0.587G + 0.114B

Dopu avè a luminosità, separemu i culori blu è rossi:

Cb = 0.564 (B - Y)

Cr = 0.713 (R - Y)

È pudemu ancu cunvertisce è ancu diventa verde cù YCbCr:

R = Y + 1.402Cr

B = Y + 1.772Cb

G = Y - 0.344Cb - 0.714Cr

Di genere, i display (monitor, TV, schermi, etc.) utilizanu solu u mudellu RGB. Ma stu mudellu pò esse urganizatu in diverse manere:

Cumu funziona un codec video? Parte 1: Basics

Subsampling di culore

Cù una maghjina rapprisintata cum'è una cumminazione di luminanza è crominanza, pudemu sfruttà a sensibilità più grande di u sistema visuale umanu à a luminanza chè à a crominanza, eliminendu selettivamente l'infurmazioni. Chroma subsampling hè un metudu di codificazione di l'imaghjini chì utilizanu menu risuluzione per a croma chì per a luminanza.

Cumu funziona un codec video? Parte 1: Basics

Quantu hè permessu di riduce a risoluzione di u culore ?! Risulta chì ci sò digià alcuni diagrammi chì descrizanu cumu trattà a risoluzione è a fusione (Colore Risultante = Y + Cb + Cr).

Questi schemi sò cunnisciuti cum'è sistemi di downsampling è sò espressi cum'è un rapportu di 3 volte - a:x:y, chì determina u numeru di campioni di segnali di luminanza è di differenza di culore.

a - standard di campionamentu horizontale (di solitu uguale à 4)
x - numeru di campioni di chroma in a prima fila di pixel (risoluzione horizontale relative à a)
y - u numeru di cambiamenti in i campioni di chroma trà a prima è a seconda fila di pixel.

L'eccezzioni hè 4:1:0, furnisce una mostra di chroma in ogni bloccu di risoluzione di luminanza 4 per 4.

Schemi cumuni usati in i codecs muderni:

  • 4:4:4 (senza downsampling)
  • 4:2:2
  • 4:1:1
  • 4:2:0
  • 4:1:0
  • 3:1:1

YCbCr 4: 2: 0 - esempiu di fusione

Eccu una maghjina fusionata cù YCbCr 4:2:0. Nota chì avemu solu gastru 12 bits per pixel.

Cumu funziona un codec video? Parte 1: Basics

Questu hè ciò chì pare a listessa maghjina, codificata cù i tipi principali di subsampling di culore. A prima fila hè l'YCbCr finale, a fila di fondu mostra a risoluzione di croma. Risultati assai decenti, cunziddi a ligera perdita di qualità.

Cumu funziona un codec video? Parte 1: Basics

Ricurdativi di quandu avemu cuntatu 278 GB di spaziu di almacenamentu per almacenà un schedariu video d'una ora à una risoluzione di 720p è 30 frames per seconda? Sè avemu usatu YCbCr 4: 2: 0, allura sta taglia sarà ridutta da a mità - 139 GB. Finu a ora, hè sempre luntanu da un risultatu accettabile.

Pudete uttene l'istogramma YCbCr sè stessu cù FFmpeg. In questa maghjina, u blu domina nantu à u rossu, chì hè chjaramente visibile in l'histogramma stessu.

Cumu funziona un codec video? Parte 1: Basics

Culore, luminosità, gamma di culori - video review

Avemu cunsigliatu per vede stu video fantasticu. Spiega ciò chì a luminosità hè, è in generale tutti i punti sò puntelli ё circa luminosità è culore.

Tipi di quadru

Andemu avanti. Pruvemu di eliminà a redundanza di u tempu. Ma prima, definiscemu una terminologia basica. Diciamu chì avemu un filmu cù 30 frames per secondu, eccu i so primi 4 frames :

Cumu funziona un codec video? Parte 1: Basics Cumu funziona un codec video? Parte 1: Basics Cumu funziona un codec video? Parte 1: Basics Cumu funziona un codec video? Parte 1: Basics

Pudemu vede assai ripetizioni in i frames: per esempiu, un fondo blu chì ùn cambia micca da quadru à quadru. Per risolve stu prublema, pudemu classificà in astrattu in trè tippi di frames.

I-frame (Intro Frame)

I-frame (quadru di riferimentu, quadru chjave, quadru internu) hè autonomu. Indipendentemente da ciò chì vulete visualizà, un I-frame hè essenzialmente una fotografia statica. U primu quadru hè di solitu un I-frame, ma observeremu regularmente I-frame ancu trà micca i primi frames.

Cumu funziona un codec video? Parte 1: Basics

P-frame (PFrame ridittatu)

P-frame (frame predictivu) prufittà di u fattu chì quasi sempre l'imaghjini attuale pò esse ripruduciutu cù u quadru precedente. Per esempiu, in u sicondu quadru l'unicu cambiamentu hè a bola chì avanza. Pudemu ottene u quadru 2 solu mudificà ligeramente u quadru 1, solu utilizendu a diferenza trà questi frames. Per custruisce u quadru 2, avemu riferitu à u quadru precedente 1.

Cumu funziona un codec video? Parte 1: BasicsCumu funziona un codec video? Parte 1: Basics

B-frame (BFrame i-predictive)

E ligami micca solu à u passatu, ma ancu à i frames futuri per furnisce una cumpressione ancu megliu ?! Questu hè basicamente un B-frame (frame bidirezionale).

Cumu funziona un codec video? Parte 1: BasicsCumu funziona un codec video? Parte 1: BasicsCumu funziona un codec video? Parte 1: Basics

Ritirata intermediata

Sti tipi di frames sò usati per furnisce u megliu cumpressione pussibule. Fighjemu cumu questu succede in a sezione dopu. Per avà, avemu nutatu chì u più "caru" in quantu à a memoria cunsumata hè l'I-frame, u P-frame hè notevolmente più prezzu, ma l'opzione più prufittuosa per u video hè u B-frame.

Cumu funziona un codec video? Parte 1: Basics

Redundancy temporale (predizione inter-frame)

Fighjemu quali opzioni avemu per minimizzà a ripetizione cù u tempu. Pudemu risolve stu tipu di redundancy usendu metudi di prediczione incruciata.

Pruvaremu di spende quant'è pocu bit pussibule per codificà una sequenza di frames 0 è 1.

Cumu funziona un codec video? Parte 1: Basics

Pudemu pruduce sottrazione, Sustrate simpricimenti u quadru 1 da u quadru 0. Avemu u quadru 1, solu aduprà a diffarenza trà ellu è u quadru precedente, in fatti avemu solu codificà u restu resultante.

Cumu funziona un codec video? Parte 1: Basics

Ma chì si vi dicu chì ci hè un metudu ancu megliu chì usa ancu menu bits ?! Prima, rompemu u quadru 0 in una griglia chjara cumpostu di blocchi. E dopu avemu da pruvà à currisponde à i blocchi da u quadru 0 cù u quadru 1. In altri palori, avemu da stima u muvimentu trà frames.

Da Wikipedia - compensazione di u muvimentu di bloccu

A compensazione di u muvimentu di bloccu divide u quadru attuale in blocchi non sovrapposti è u vettore di compensazione di u muvimentu informa l'origine di i blocchi (un malconcepimentu cumuni hè chì precedente u quadru hè divisu in blocchi non sovrapposti, è i vettori di compensazione di u muvimentu dicenu induve vanu quelli blocchi. Ma in fattu, hè l'altru - ùn hè micca u quadru precedente chì hè analizatu, ma u prossimu; ùn hè micca chjaru induve i blocchi si movenu, ma da induve venenu). Di genere, i blocchi di fonte si sovrapponenu in u quadru di fonte. Certi algoritmi di cumpressione video assemblanu u quadru attuale da parte di micca mancu unu, ma parechji frames trasmessi prima.

Cumu funziona un codec video? Parte 1: Basics

Duranti u prucessu di valutazione, vedemu chì a bola hè mossa da (x= 0, y= 25) par (x= 6, y= 26), valori x и y determina u vettore di muvimentu. Un altru passu chì pudemu fà per priservà i bits hè di codificà solu a diffarenza di vettori di muvimentu trà l'ultimu pusizioni di bloccu è quella prevista, cusì u vettore di muvimentu finali serà (x=6-0=6, y=26-25=1). ).

In una situazione reale, sta bola seria divisa in n blocchi, ma questu ùn cambia micca l'essenza di a materia.

L'uggetti in u quadru si move in trè dimensioni, cusì quandu a bola si move, pò esse visualmente più chjuca (o più grande si si move versu u visor). Hè normale chì ùn ci sarà micca un match perfettu trà i blocchi. Eccu una vista cumminata di a nostra stima è a stampa reale.

Cumu funziona un codec video? Parte 1: Basics

Ma vedemu chì quandu usemu l'estimazione di u muvimentu, ci sò notevolmente menu dati per a codificazione cà quandu si usa un metudu simplice di calculà a delta trà frames.

Cumu funziona un codec video? Parte 1: Basics

Chì a vera compensazione di u muvimentu serebbe

Sta tecnica hè appiicata à tutti i blocchi à una volta. Spessu a nostra bola in muvimentu cundizionale serà divisa in parechji blocchi à una volta.

Cumu funziona un codec video? Parte 1: Basics

Pudete ottene una sensazione di sti cuncetti sè stessu utilizendu Ghjove.

Per vede i vettori di muvimentu, pudete creà un video di prediczione esterna utilizendu ffmpeg.

Cumu funziona un codec video? Parte 1: Basics

Pudete ancu aduprà Analizzatore Intel Video Pro (Hè pagatu, ma ci hè una prova gratuita chì hè limitata à i primi deci frames solu).

Cumu funziona un codec video? Parte 1: Basics

Redundanza spaziale (previsione interna)

Se analizemu ogni quadru in un video, truvemu assai spazii interconnessi.

Cumu funziona un codec video? Parte 1: Basics

Andemu à traversu stu esempiu. Sta scena hè custituita principalmente di culori blu è bianchi.

Cumu funziona un codec video? Parte 1: Basics

Questu hè un I-frame. Ùn pudemu micca piglià frames previ per a prediczione, ma pudemu cumpressà. Andemu codificà a selezzione di u bloccu rossu. Se fighjemu i so vicini, avemu nutatu chì ci sò qualchi tendenzi di culore intornu.

Cumu funziona un codec video? Parte 1: Basics

Assumimu chì i culori si sparghjenu verticalmente in u quadru. Chì significa chì u culore di i pixel scunnisciuti cuntene i valori di i so vicini.

Cumu funziona un codec video? Parte 1: Basics

Una tale previsione pò esse sbagliata. Hè per quessa chì avete bisognu di applicà stu metudu (previsione internu), è poi sottrae i valori veri. Questu ci darà un bloccu residuale, chì resultarà in una matrice assai più compressa cumparata cù l'uriginale.

Cumu funziona un codec video? Parte 1: Basics

Se vulete praticà cù predizioni internu, pudete creà un video di macroblocchi è e so previsioni cù ffmpeg. Per capisce u significatu di ogni culore di bloccu, avete da leghje a documentazione ffmpeg.

Cumu funziona un codec video? Parte 1: Basics

O pudete aduprà Intel Video Pro Analyzer (cum'è aghju dettu sopra, a versione di prova gratuita hè limitata à i primi 10 frames, ma questu serà abbastanza per voi prima).

Cumu funziona un codec video? Parte 1: Basics

A seconda parte: Cumu funziona u codec video

Source: www.habr.com

Add a comment