Come funziona un codec video? Parte 1: Nozioni di base

La seconda parte: Come funziona il codec video

Qualsiasi raster immagine può essere rappresentato nella forma matrice bidimensionale. Quando si tratta di colori, l'idea può essere sviluppata guardando un'immagine come matrice tridimensionale, in cui vengono utilizzate dimensioni aggiuntive per memorizzare i dati per ciascuno dei colori.

Se consideriamo il colore finale come una combinazione del cosiddetto. colori primari (rosso, verde e blu), nella nostra matrice tridimensionale definiamo tre piani: il primo per il rosso, il secondo per il verde e l'ultimo per il blu.
Come funziona un codec video? Parte 1: Nozioni di base
Chiameremo ogni punto di questa matrice pixel (elemento immagine). Ogni pixel contiene informazioni sull'intensità (solitamente come valore numerico) di ciascun colore. Per esempio, pixel rosso significa che contiene 0 verde, 0 blu e il massimo rosso. Pixel rosa può essere formato utilizzando una combinazione di tre colori. Utilizzando un intervallo numerico compreso tra 0 e 255, un pixel rosa viene definito come Rosso = 255, Verde = 192 и Blu = 203.

Come funziona un codec video? Parte 1: Nozioni di base

Questo articolo è stato pubblicato con il sostegno di EDISON.

Ci stiamo sviluppando applicazioni di videosorveglianza, video streaming, e inoltre siamo fidanzati registrazione video in sala operatoria.

Modi alternativi per codificare un'immagine a colori

Esistono molti altri modelli per rappresentare i colori che compongono un'immagine. Ad esempio, è possibile utilizzare una tavolozza indicizzata, che richiede solo un byte per rappresentare ciascun pixel, invece dei tre richiesti quando si utilizza il modello RGB. In tale modello, è possibile utilizzare una matrice 2D invece di una matrice 3D per rappresentare ciascun colore. Ciò consente di risparmiare memoria, ma offre una gamma di colori più piccola.

Come funziona un codec video? Parte 1: Nozioni di base

RGB

Ad esempio, dai un'occhiata a questa immagine qui sotto. La prima faccia è completamente dipinta. Gli altri sono i piani rosso, verde e blu (le intensità dei colori corrispondenti sono mostrate in scala di grigi).

Come funziona un codec video? Parte 1: Nozioni di base

Vediamo che le sfumature del rosso nell'originale si troveranno negli stessi punti in cui si osservano le parti più luminose della seconda faccia. Mentre il contributo del blu è visibile principalmente solo negli occhi di Mario (ultimo volto) e in alcuni elementi del suo abbigliamento. Nota dove tutti e tre i piani di colore contribuiscono meno (le parti più scure delle immagini): i baffi di Mario.

Per memorizzare l'intensità di ciascun colore, è necessario un certo numero di bit: questa quantità viene chiamata profondità di bit. Diciamo che vengono spesi 8 bit (in base a un valore compreso tra 0 e 255) per piano di colore. Quindi abbiamo una profondità di colore di 24 bit (8 bit * 3 piani R/G/B).

Un'altra proprietà di un'immagine è risoluzione, che è il numero di pixel in una dimensione. Spesso indicato come larghezza × altezza, come nell'immagine di esempio 4 per 4 di seguito.
Come funziona un codec video? Parte 1: Nozioni di base

Un'altra proprietà di cui ci occupiamo quando lavoriamo con immagini/video è proporzioni, che descrive la normale relazione proporzionale tra la larghezza e l'altezza di un'immagine o di un pixel.

Quando dicono che un certo film o immagine ha una dimensione di 16 x 9, di solito intendono dire proporzioni di visualizzazione (MA - da Visualizza rapporto di aspetto). Tuttavia, a volte possono esserci forme diverse dei singoli pixel: in questo caso stiamo parlando di rapporto pixel (PAR - da Proporzioni pixel).

Come funziona un codec video? Parte 1: Nozioni di base

Come funziona un codec video? Parte 1: Nozioni di base

Nota per la padrona di casa: DVD fiammiferi DA 4 a 3

Sebbene la risoluzione effettiva del DVD sia 704x480, mantiene comunque un rapporto di aspetto 4:3 perché il PAR è 10:11 (704x10 / 480x11).

E finalmente possiamo determinarlo video come una sequenza di n fotogrammi dell'epoca tempo, che può essere considerata una dimensione aggiuntiva. UN n quindi è il frame rate o il numero di fotogrammi al secondo (FPS - da Fotogrammi al secondo).

Come funziona un codec video? Parte 1: Nozioni di base

Il numero di bit al secondo richiesti per visualizzare un video è il suo velocità di trasmissione - velocità in bit.

bitrate = larghezza * altezza * profondità in bit * fotogrammi al secondo

Ad esempio, un video a 30 fps, 24 bps, 480x240 richiederebbe 82,944,000 bps o 82,944 Mbps (30x480x240x24), ma ciò accade se non viene utilizzato alcun metodo di compressione.

Se la velocità di trasferimento quasi costante, quindi viene chiamato velocità di trasmissione costante (CBR - da velocità in bit costante). Ma può anche variare, in questo caso si chiama velocità di trasmissione variabile (VBR - da bit rate variabile).

Questo grafico mostra un VBR limitato, dove non vengono sprecati troppi bit nel caso di un frame completamente scuro.

Come funziona un codec video? Parte 1: Nozioni di base

Gli ingegneri inizialmente hanno sviluppato un metodo per raddoppiare il frame rate percepito di un display video senza utilizzare larghezza di banda aggiuntiva. Questo metodo è noto come video interlacciato; Fondamentalmente invia metà dello schermo nel primo "frame" e l'altra metà nel "frame" successivo.

Attualmente, le scene vengono per lo più renderizzate utilizzando tecnologie di scansione progressiva. È un metodo per visualizzare, archiviare o trasmettere immagini in movimento in cui tutte le linee di ciascun fotogramma vengono disegnate in sequenza.

Come funziona un codec video? Parte 1: Nozioni di base

BENE! Ora sappiamo come viene rappresentata digitalmente un'immagine, come sono disposti i suoi colori, quanti bit al secondo impieghiamo per mostrare il video, se il bit rate è costante (CBR) o variabile (VBR). Conosciamo una determinata risoluzione utilizzando un determinato frame rate, conosciamo molti altri termini, come video interlacciato, PAR e alcuni altri.

Eliminazione della ridondanza

È noto che il video senza compressione non può essere utilizzato normalmente. Un video di un'ora con una risoluzione di 720p e 30 fotogrammi al secondo occuperebbe 278 GB. Arriviamo a questo valore moltiplicando 1280 x 720 x 24 x 30 x 3600 (larghezza, altezza, bit per pixel, FPS e tempo in secondi).

l'uso di algoritmi di compressione senza perdita, come DEFLATE (utilizzato in PKZIP, Gzip e PNG), non ridurrà sufficientemente la larghezza di banda richiesta. Dobbiamo cercare altri modi per comprimere i video.

Per fare ciò, puoi utilizzare le funzionalità della nostra visione. Siamo più bravi a distinguere la luminosità dal colore. Un video è una serie di immagini sequenziali che si ripetono nel tempo. Ci sono piccole differenze tra fotogrammi adiacenti della stessa scena. Inoltre, ogni fotogramma contiene molte aree che utilizzano lo stesso colore (o un colore simile).

Colore, luminosità e i nostri occhi

I nostri occhi sono più sensibili alla luminosità che al colore. Puoi vederlo tu stesso guardando questa immagine.

Come funziona un codec video? Parte 1: Nozioni di base

Se non lo vedi, nella metà sinistra dell'immagine i colori dei quadrati A и B sono effettivamente la stessa cosa, allora è normale. Il nostro cervello ci costringe a prestare maggiore attenzione alle luci e alle ombre piuttosto che ai colori. Sul lato destro tra i quadrati designati c'è un maglione dello stesso colore, quindi noi (cioè il nostro cervello) determiniamo facilmente che, in realtà, sono dello stesso colore.

Diamo un'occhiata (in modo semplificato) a come funzionano i nostri occhi. L'occhio è un organo complesso costituito da molte parti. Tuttavia, siamo più interessati a coni e bastoncelli. L'occhio contiene circa 120 milioni di bastoncelli e 6 milioni di coni.

Consideriamo la percezione del colore e della luminosità come funzioni separate di alcune parti dell'occhio (in effetti, tutto è un po' più complicato, ma lo semplificheremo). Le cellule dei bastoncelli sono principalmente responsabili della luminosità, mentre le cellule dei coni sono responsabili del colore. I coni sono divisi in tre tipi, a seconda del pigmento che contengono: coni S (blu), coni M (verdi) e coni L (rossi).

Poiché abbiamo molti più bastoncelli (luminosità) che coni (colore), possiamo concludere che siamo più capaci di distinguere le transizioni tra buio e luce rispetto ai colori.

Come funziona un codec video? Parte 1: Nozioni di base

Funzionalità di sensibilità al contrasto

I ricercatori in psicologia sperimentale e in molti altri campi hanno sviluppato molte teorie sulla visione umana. E uno di loro si chiama funzioni di sensibilità al contrasto. Sono legati all’illuminazione spaziale e temporale. In breve, si tratta di quanti cambiamenti sono necessari prima che un osservatore li noti. Notare il plurale della parola "funzione". Ciò è dovuto al fatto che possiamo misurare le funzioni di sensibilità al contrasto non solo per le immagini in bianco e nero, ma anche per quelle a colori. I risultati di questi esperimenti mostrano che nella maggior parte dei casi i nostri occhi sono più sensibili alla luminosità che al colore.

Poiché sappiamo che siamo più sensibili alla luminosità dell'immagine, possiamo provare a sfruttare questo fatto.

Modello di colore

Abbiamo capito un po' come lavorare con le immagini a colori utilizzando lo schema RGB. Ci sono anche altri modelli. Esiste un modello che separa la luminanza dalla crominanza ed è noto come YCbCr. Esistono comunque altri modelli che effettuano una divisione simile, ma prenderemo in considerazione solo questo.

In questo modello di colore Y è una rappresentazione della luminosità e utilizza anche due canali di colore: Cb (blu intenso) e Cr (rosso ricco). YCbCr può essere derivato da RGB ed è possibile anche la conversione inversa. Utilizzando questo modello possiamo creare immagini a colori come vediamo di seguito:

Come funziona un codec video? Parte 1: Nozioni di base

Converti tra YCbCr e RGB

Qualcuno obietterà: come è possibile ottenere tutti i colori se non si usa il verde?

Per rispondere a questa domanda, convertiamo RGB in YCbCr. Usiamo i coefficienti adottati nella norma BT.601, raccomandato dall'unità ITU-R. Questa divisione stabilisce gli standard per il video digitale. Ad esempio: cos'è il 4K? Quale dovrebbe essere il frame rate, la risoluzione, il modello di colore?

Per prima cosa calcoliamo la luminosità. Usiamo le costanti proposte dall'ITU e sostituiamo i valori RGB.

Y = 0.299R + 0.587G + 0.114B

Dopo aver ottenuto la luminosità, separeremo i colori blu e rosso:

Cb = 0.564(B - Y)

Cr = 0.713(R - Y)

E possiamo anche riconvertirci e persino diventare verdi usando YCbCr:

R = Y + 1.402Cr

B = Y + 1.772Cb

G = Y - 0.344Cb - 0.714Cr

In genere, i display (monitor, televisori, schermi, ecc.) utilizzano solo il modello RGB. Ma questo modello può essere organizzato in diversi modi:

Come funziona un codec video? Parte 1: Nozioni di base

Sottocampionamento del colore

Con un'immagine rappresentata come una combinazione di luminanza e crominanza, possiamo sfruttare la maggiore sensibilità del sistema visivo umano alla luminanza che alla crominanza rimuovendo selettivamente le informazioni. Il sottocampionamento della crominanza è un metodo per codificare le immagini utilizzando una risoluzione inferiore per la crominanza rispetto alla luminanza.

Come funziona un codec video? Parte 1: Nozioni di base

Quanto è consentito ridurre la risoluzione del colore?! Risulta che esistono già alcuni diagrammi che descrivono come gestire la risoluzione e l'unione (Colore risultante = Y + Cb + Cr).

Questi schemi sono noti come sistemi di downsampling e sono espressi come rapporto 3 volte - a:x:y, che determina il numero di campioni di segnali di luminanza e differenza di colore.

a — standard di campionamento orizzontale (solitamente pari a 4)
x — numero di campioni di crominanza nella prima riga di pixel (risoluzione orizzontale relativa a a)
y — il numero di cambiamenti nei campioni di crominanza tra la prima e la seconda fila di pixel.

L'eccezione è 4:1:0, fornendo un campione di crominanza in ciascun blocco di risoluzione di luminanza 4x4.

Schemi comuni utilizzati nei codec moderni:

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

YCbCr 4:2:0 - esempio di fusione

Ecco un'immagine unita utilizzando YCbCr 4:2:0. Tieni presente che stiamo spendendo solo 12 bit per pixel.

Come funziona un codec video? Parte 1: Nozioni di base

Ecco come appare la stessa immagine, codificata con i principali tipi di sottocampionamento del colore. La prima riga è l'YCbCr finale, la riga inferiore mostra la risoluzione della crominanza. Risultati molto dignitosi, considerando la leggera perdita di qualità.

Come funziona un codec video? Parte 1: Nozioni di base

Ricordi quando abbiamo contato 278 GB di spazio di archiviazione per archiviare un file video della durata di un'ora con una risoluzione di 720p e 30 fotogrammi al secondo? Se utilizziamo YCbCr 4:2:0, questa dimensione verrà ridotta della metà: 139 GB. Finora, è ancora lontano da un risultato accettabile.

Puoi ottenere tu stesso l'istogramma YCbCr usando FFmpeg. In questa immagine, il blu predomina sul rosso, cosa chiaramente visibile nell'istogramma stesso.

Come funziona un codec video? Parte 1: Nozioni di base

Colore, luminosità, gamma cromatica: recensione video

Ti consigliamo di guardare questo fantastico video. Spiega cos'è la luminosità e in generale tutti i punti sono punteggiati ё sulla luminosità e sul colore.

Tipi di frame

Andiamo avanti. Proviamo a eliminare la ridondanza temporale. Ma prima definiamo alcuni termini di base. Diciamo di avere un film con 30 fotogrammi al secondo, ecco i suoi primi 4 fotogrammi:

Come funziona un codec video? Parte 1: Nozioni di base Come funziona un codec video? Parte 1: Nozioni di base Come funziona un codec video? Parte 1: Nozioni di base Come funziona un codec video? Parte 1: Nozioni di base

Possiamo vedere molte ripetizioni nei fotogrammi: ad esempio, uno sfondo blu che non cambia da fotogramma a fotogramma. Per risolvere questo problema possiamo classificarli astrattamente in tre tipologie di frame.

I-frame (Intro Frame)

L'I-frame (frame di riferimento, frame chiave, frame interno) è autonomo. Indipendentemente da ciò che desideri visualizzare, un I-frame è essenzialmente una fotografia statica. Il primo fotogramma è solitamente un I-frame, ma osserveremo regolarmente I-frame anche tra i primi fotogrammi.

Come funziona un codec video? Parte 1: Nozioni di base

P-frame (PFrame modificato)

Il P-frame (predictive frame) sfrutta il fatto che quasi sempre l'immagine corrente può essere riprodotta utilizzando il frame precedente. Ad esempio, nel secondo fotogramma l'unico cambiamento è la palla che si muove in avanti. Possiamo ottenere il fotogramma 2 semplicemente modificando leggermente il fotogramma 1, utilizzando solo la differenza tra questi fotogrammi. Per costruire il frame 2 facciamo riferimento al precedente frame 1.

Come funziona un codec video? Parte 1: Nozioni di baseCome funziona un codec video? Parte 1: Nozioni di base

Telaio B (Bi-Frame predittivo)

Che dire dei collegamenti non solo ai fotogrammi passati, ma anche a quelli futuri per fornire una compressione ancora migliore?! Questo è fondamentalmente un B-frame (frame bidirezionale).

Come funziona un codec video? Parte 1: Nozioni di baseCome funziona un codec video? Parte 1: Nozioni di baseCome funziona un codec video? Parte 1: Nozioni di base

Ritiro intermedio

Questi tipi di frame vengono utilizzati per fornire la migliore compressione possibile. Vedremo come ciò avviene nella sezione successiva. Per ora, notiamo che il più “costoso” in termini di memoria consumata è l'I-frame, il P-frame è notevolmente più economico, ma l'opzione più redditizia per i video è il B-frame.

Come funziona un codec video? Parte 1: Nozioni di base

Ridondanza temporale (previsione inter-frame)

Diamo un'occhiata a quali opzioni abbiamo per ridurre al minimo la ripetizione nel tempo. Possiamo risolvere questo tipo di ridondanza utilizzando metodi di previsione incrociata.

Cercheremo di spendere il minor numero di bit possibile per codificare una sequenza di fotogrammi 0 e 1.

Come funziona un codec video? Parte 1: Nozioni di base

Possiamo produrre sottrazione, sottraiamo semplicemente il frame 1 dal frame 0. Otteniamo il frame 1, utilizziamo solo la differenza tra esso e il frame precedente, infatti codifichiamo solo il resto risultante.

Come funziona un codec video? Parte 1: Nozioni di base

Ma cosa succederebbe se ti dicessi che esiste un metodo ancora migliore che utilizza ancora meno bit?! Innanzitutto, suddividiamo il frame 0 in una griglia chiara composta da blocchi. E poi proveremo a far corrispondere i blocchi del fotogramma 0 con il fotogramma 1. In altre parole, stimeremo il movimento tra i fotogrammi.

Da Wikipedia - blocco della compensazione del movimento

La compensazione del movimento dei blocchi divide il frame corrente in blocchi non sovrapposti e il vettore di compensazione del movimento riporta l'origine dei blocchi (un malinteso comune è che предыдущий il fotogramma è diviso in blocchi non sovrapposti e i vettori di compensazione del movimento indicano dove vanno questi blocchi. Ma in realtà è il contrario: non viene analizzato il fotogramma precedente, ma quello successivo; non è chiaro dove si muovono i blocchi, ma da dove provengono). In genere i blocchi di origine si sovrappongono nel frame di origine. Alcuni algoritmi di compressione video assemblano il fotogramma corrente da parti non di uno, ma di diversi fotogrammi trasmessi in precedenza.

Come funziona un codec video? Parte 1: Nozioni di base

Durante il processo di valutazione, vediamo che la palla si è spostata da (x= 0, y=25) a (x= 6, y=26), valori x и y determinare il vettore di movimento. Un altro passo che possiamo fare per preservare i bit è codificare solo la differenza dei vettori di movimento tra la posizione dell'ultimo blocco e quella prevista, quindi il vettore di movimento finale sarà (x=6-0=6, y=26-25=1 ).

In una situazione reale, questa palla verrebbe divisa in n blocchi, ma ciò non cambia l'essenza della questione.

Gli oggetti nell'inquadratura si muovono in tre dimensioni, quindi quando la palla si muove, può diventare visivamente più piccola (o più grande se si muove verso lo spettatore). È normale che non ci sia una corrispondenza perfetta tra i blocchi. Ecco una visione combinata della nostra stima e del quadro reale.

Come funziona un codec video? Parte 1: Nozioni di base

Ma vediamo che quando utilizziamo la stima del movimento, ci sono notevolmente meno dati per la codifica rispetto a quando utilizziamo un metodo più semplice per calcolare il delta tra i fotogrammi.

Come funziona un codec video? Parte 1: Nozioni di base

Come sarebbe la compensazione del movimento reale

Questa tecnica viene applicata a tutti i blocchi contemporaneamente. Spesso la nostra palla in movimento condizionale verrà divisa in più blocchi contemporaneamente.

Come funziona un codec video? Parte 1: Nozioni di base

Puoi farti un'idea di questi concetti usando tu stesso Giove.

Per vedere i vettori di movimento, puoi creare un video di previsione esterno utilizzando ffmpeg.

Come funziona un codec video? Parte 1: Nozioni di base

Puoi anche usare Analizzatore video Intel Pro (è a pagamento, ma è disponibile una prova gratuita limitata solo ai primi dieci fotogrammi).

Come funziona un codec video? Parte 1: Nozioni di base

Ridondanza spaziale (previsione interna)

Se analizziamo ogni fotogramma di un video, troveremo molte aree interconnesse.

Come funziona un codec video? Parte 1: Nozioni di base

Esaminiamo questo esempio. Questa scena è composta principalmente dai colori blu e bianco.

Come funziona un codec video? Parte 1: Nozioni di base

Questo è un I-frame. Non possiamo prendere i fotogrammi precedenti per la previsione, ma possiamo comprimerli. Codifichiamo la selezione del blocco rosso. Se guardiamo i suoi vicini, notiamo che ci sono alcune tendenze di colore attorno ad esso.

Come funziona un codec video? Parte 1: Nozioni di base

Partiamo dal presupposto che i colori si diffondano verticalmente nell'inquadratura. Ciò significa che il colore dei pixel sconosciuti conterrà i valori dei suoi vicini.

Come funziona un codec video? Parte 1: Nozioni di base

Tale previsione potrebbe rivelarsi errata. È per questo motivo che è necessario applicare questo metodo (previsione interna), e poi sottrarre i valori reali. Questo ci darà un blocco residuo, che risulterà in una matrice molto più compressa rispetto all'originale.

Come funziona un codec video? Parte 1: Nozioni di base

Se vuoi esercitarti con le previsioni interne, puoi creare un video dei macroblocchi e delle relative previsioni utilizzando ffmpeg. Per comprendere il significato di ciascun colore del blocco, dovrai leggere la documentazione di ffmpeg.

Come funziona un codec video? Parte 1: Nozioni di base

Oppure puoi utilizzare Intel Video Pro Analyser (come ho detto sopra, la versione di prova gratuita è limitata ai primi 10 fotogrammi, ma all'inizio ti basterà).

Come funziona un codec video? Parte 1: Nozioni di base

La seconda parte: Come funziona il codec video

Fonte: habr.com

Aggiungi un commento