Cos'è la codifica video? Spiegare con un esempio?
Prima di tutto, guardiamo il nostro obiettivo qui. La codifica video o meglio la compressione è uno dei componenti più complessi di qualsiasi sistema multimediale. Il video o meglio il contenuto visivo è molto grande. L'occhio umano percepisce i colori in base alla luce che cade sui bastoncelli e sui coni all'interno del nostro occhio. Questa semplice immagine 2D (a.k.a. frame) è ciò che è tipicamente indicato come contenuto texture. Il video è come un flip book, cioè una serie di immagini che vengono riconosciute a una velocità particolare o più comunemente conosciuta come tasso. Quindi, l'occhio sta effettivamente riconoscendo queste texture 2D a una particolare velocità (Frame Rate) e trasmettendo queste informazioni al cervello per interpretarle come dati in movimento.
Ora, vediamo perché è necessaria la compressione? Prendiamo la nostra comune TV HD o uno schermo cinematografico HD dove guardiamo i film. Ci sembra che le immagini siano in continuo movimento. Per semplicità, considererò che la velocità è di 30 fotogrammi al secondo (gli schermi cinematografici impiegano 24 fps).
Calcoliamo la quantità di dati.
Dati totali al secondo = frame HD x 30 fps = 1920 x 1080 x 3 x 30 (dove HD = 1920 x 1080 risoluzione, ogni pixel che trasporta informazioni sul colore è rappresentato da 3 byte - 24bpp)
= ~178 MByte / secondo
Se consideriamo un film di 3 ore, la memoria totale richiesta è ~1878 GByte. Questo è un sacco di spazio...
Se dobbiamo trasmettere i dati su una rete o memorizzarli in un dispositivo, abbiamo letteralmente un problema enorme a portata di mano!!!
La compressione/codifica video affronta questo. Impiega un certo set di algoritmi per rappresentare lo stesso contenuto in uno spazio molto ridotto con quasi la stessa qualità dei dati grezzi.
Guardiamo ora come funziona la codifica video. La maggior parte dei codificatori video usa una serie simile di fasi di elaborazione. Raccomanderei di fare riferimento a questa immagine per la seguente spiegazione. Il principio guida generale della compressione visiva è ridurre la quantità di memoria sfruttando le ridondanze.
Primo, guardiamo una semplice immagine. L'immagine è suddivisa in blocchi di 16x16 (detti anche Macroblocchi / MB) per facilitare l'elaborazione. Ogni MB è collegato ai suoi vicini locali, in quanto sono tutti come piccoli pezzi di un mosaico di un'immagine più grande.
Uno dei primi passi nella compressione visiva è quello di sfruttare la correlazione tra i vicini spaziali. Questo è anche lo stesso principio guida dell'Intra Prediction.
Similmente, anche 2 immagini successive hanno molto in comune, la correlazione tra i vicini temporali viene sfruttata attraverso la Motion Estimation.
Da uno di questi 2 processi, otteniamo un insieme di predittori/vettori di movimento e differenze rispetto al riferimento, cioè il segnale di errore delta, che non è altro che il contenuto della texture in forma differenziale.
Quindi, abbiamo ottenuto un insieme di riduzione nello spazio. Successivamente, abbiamo bisogno di codificare queste diverse componenti in modo tale che possa essere accuratamente ricostruito usando un processo inverso.
Il segnale di errore dei dati deve essere compresso successivamente. Per ottenere questo, un'altra funzione di correlazione viene impiegata per identificare identificatori unici per rappresentare i dati. Questo si ottiene con una funzione di trasformazione, che è per lo più una forma di DCT.
Dalla trasformazione, abbiamo un insieme di identificatori unici e piccole differenze intorno ad essi. Questi vengono poi quantizzati per inserirsi in un insieme rappresentativo di livelli. Ciò che questo processo fa è anche convertire le piccole differenze di frangia a zero.
Possiamo anche notare che c'è una piccola perdita di informazioni, ma niente che avrebbe un impatto sull'aspetto generale del video.
I coefficienti quantizzati sarebbero un insieme di identificatori unici e una stringa di zeri. Questi sono poi codificati usando schemi di codifica speciali per ottimizzare il numero di bit da trasmettere. Una semplice regola empirica per la codifica è "Usa il numero minimo di bit per gli elementi più comuni" (Nota: lo stesso principio si trova nel telegrafo dove la "e" è rappresentata da un punto). Questo processo è chiamato Variable Length Encoding, il cui output è il flusso di bit effettivo che viene memorizzato o trasmesso.
Questo flusso di bit è sottoposto a un processo inverso chiamato "Decodifica" per ricreare il contenuto effettivo. Questo riassume le fasi complessive della compressione video.
Nota: c'è un altro aspetto della compressione in cui i dati RGB24 sono convertiti in YUV420 che di per sé riduce i dati della metà. Tuttavia, dato che questo argomento è già trattato in diversi thread, ho saltato lo stesso.
Articoli simili
- Come spiegare facilmente la parola ontologia? Qual è un esempio di ontologia o analisi ontologica
- Cos'è il modello standard? Spiegare in parole semplici?
- Cos'è un file .dex? Cos'è dexopt? Che cos'è odex? Cos'è dexoat? Cos'è ELF? Come funziona tutto questo?
- Come fare un'app di streaming video dal vivo per Android senza codifica