Codifica video - stima del moto, MPEG e H.264
In questa pagina 8
Un video HD non compresso a 50 Hz richiede 1,244 Gbit/s, un 4K oltre 5 Gbit/s (Audio, immagini e video digitali non compressi e spazi di coloreIl parlato (banda 200-3400 Hz) si digitalizza con $F_c=8$ kHz e 8 bit per campione: 64 kbit/s (PCM, pacchetti di 20 ms = 160 campioni = 160 byte). La musica (banda fino a 20 kHz) con $F_c=44{,}1$ kHz, 16 bit, 2 canali: 1,411 Mbit/s. Un'immagine a colori RGB ha 3 canali da 8 bit (24 bit per pixel); nello spazio YCbCr, ottenuto con una rotazione dello spazio colore, l'occhio è molto meno sensibile alla crominanza e si scartano 3 campioni su 4 di Cb e Cr (4:2:0), dimezzando i dati: $1{,}5\cdot H\cdot W$ campioni per immagine. Un video non compresso costa $H,W,1{,}5,b,f$ bit/s (1080p a 50 Hz: 1,244 Gbit/s, 4K: 5,3 Gbit/s): serve la compressione.Audio, immagini e video digitali non compressi e spazi di colore →). Nessuna rete e nessun disco può sostenerli: servono compressioni di centinaia di volte. Il grosso del risparmio viene dalla ridondanza temporale: due immagini consecutive di un video sono quasi uguali. Questa nota spiega come la si sfrutta (stima e compensazione del movimento), come si organizzano i fotogrammi (I, P, B e GOP), come è fatto un codificatore video ibrido, e quali sono gli standard. Gli esercizi sono in Esercizio - Stima del movimento, GOP e bit-rate del video (domande ed esercizi del corso).
1. Principi
La compressione video sfrutta due ridondanze.
- Spaziale: all'interno di un codificatore video c'è una parte che comprime "spazialmente" come JPEG (Compressione di immagini - DCT e standard JPEGPer comprimere con perdita non basta quantizzare i pixel (non sono sparsi): si applica una trasformata lineare ortogonale che concentra l'energia in pochi coefficienti, si quantizzano i coefficienti e si codificano senza perdita. Le trasformate ortogonali conservano l'MSE ($\frac1N|\mathbf x-\tilde{\mathbf x}|^2=\frac1N|\mathbf y-\tilde{\mathbf y}|^2$). JPEG baseline: si sottrae 128, si divide in blocchi $8\times8$, DCT 2D ($Y=AXA^T$), quantizzazione uniforme con tabella (passi piccoli a bassa frequenza, scalata da un fattore di qualità $Q$), zig-zag scan, DC codificato in modo differenziale con categoria/ampiezza, AC con coppie (run, categoria) e simbolo EOB, codici di Huffman non standardizzati scritti nel file. Esempio completo: un blocco da 512 bit diventa 49 bit (0,766 bit/pixel).Compressione di immagini - DCT e standard JPEG →).
- Temporale: è molto più forte. Per la compressione spaziale serve una trasformata per sparsificare il segnale; per la ridondanza temporale basta un'opportuna tecnica di predizione.
Il codificatore calcola una predizione del blocco di pixel corrente e invia al decodificatore: (1) tutti i parametri necessari a fare la stessa predizione (per esempio vettori di movimento) e (2) una versione compressa dell'errore di predizione, cioè della differenza tra il blocco da comprimere e la sua predizione. Il codificatore deve tenere una copia dell'immagine decodificata (Decoded Frame Buffer, DFB): così la predizione è ripetibile identica nel decodificatore (se il codificatore predicesse dall'originale, e il decodificatore dalla versione già degradata, le due predizioni divergerebbero).
È importante limitare l'estensione delle tecniche predittive: per limitare la propagazione degli errori, per permettere l'accesso casuale al video (iniziare a guardare da un punto qualunque) e per limitare la complessità del codificatore. Per questo ci sono i tipi di immagine I, P, B, organizzati in una struttura periodica detta GOP (group of pictures).
I parametri di progetto di un codificatore sono: la modalità di predizione temporale (parametri della stima del movimento), la struttura del GOP, la strategia di mode selection (come si decide di codificare ogni blocco, tra le molte alternative). Come per le immagini, le prestazioni si misurano con tasso, qualità (PSNR e altre metriche, Qualità del servizio (QoS) e qualità dell'esperienza (QoE)La QoS (ITU-T E.800) è l'insieme delle caratteristiche di un servizio di telecomunicazioni che ne determinano la capacità di soddisfare l'utente: si misura con throughput, ritardo, jitter, perdite, disponibilità e affidabilità. La QoE è la qualità percepita dall'utente ("grado di gradimento o fastidio"): dipende da applicazione (A), risorse (R), contesto (C), utente (U) e richiede una QoS adeguata. Si misura con metriche soggettive (test con osservatori: MOS medio da 1 a 5 secondo ACR, DCR, confronto a coppie; si stimano media, deviazione standard, errore standard $SE=\frac s{\sqrt N}$ e intervallo di confidenza $\pm1{,}96,SE$) e oggettive (full/reduced/no reference): MSE, PSNR (anche YCbCr con pesi $\frac34,\frac18,\frac18$), metriche di Bjontegaard (BD-PSNR, BD-rate) per confrontare codec, SSIM (similarità strutturale), VMAF (machine learning, Netflix). Nessuna cattura gli stalli e le variazioni di qualità dello streaming.Qualità del servizio (QoS) e qualità dell'esperienza (QoE) →), complessità, ritardo (serve accumulare dati prima di codificare?) e robustezza agli errori nel bitstream.
2. Predizione temporale: stima e compensazione del movimento
Un semplice modello del video: ogni nuova immagine è il risultato del movimento di oggetti e camera. Allora l'immagine corrente si può predire "spostando" opportunamente gli oggetti dell'immagine precedente; l'errore di predizione (immagine vera meno predizione) è tipicamente un segnale molto sparso, quindi si codifica bene.
- Stima del movimento (ME): associare a ogni pixel (in pratica a ogni blocco) dell'immagine corrente un vettore di movimento che punta verso un pixel dell'immagine di riferimento . Idealmente rappresenta la proiezione sul piano d'immagine del moto 3D degli oggetti.
- Compensazione del movimento (MC): creare la predizione .
2.1 Block-matching
Si indica con il blocco di pixel centrato in nella -esima immagine (consideriamo immagini in grigi): un vettore di , con pixel. Si cerca nell'immagine di riferimento un blocco che gli somigli, traslato di . La dissimilarità si può misurare con
- SAD (sum of absolute differences): ;
- SSD (sum of squared differences): .
Si usa tipicamente la SAD: molto più rapida e con qualità vicina all'MSE. Il vettore stimato ottimizza un compromesso tra dissimilarità e costo di codifica del vettore: dove è l'insieme dei vettori candidati (finestra di ricerca). Il termine si chiama regolarizzazione: regola il compromesso tra qualità della predizione e costo di codifica dei vettori. Non è facile determinare il ottimale a priori; ci sono euristiche efficaci.
La stima del movimento serve a trovare il miglior predittore del blocco corrente, non a individuare il movimento fisico degli oggetti (spesso coincidono, non sempre). L'errore si codifica con un metodo "simile a JPEG" ed è in genere più sparso del blocco originale. Se non si trova un buon predittore (per esempio un oggetto "nuovo") conviene non usare la predizione temporale per quel blocco.
2.2 Parametri di progetto
- Forma e dimensione dei blocchi. Blocchi piccoli seguono più fedelmente il movimento ma implicano più vettori, quindi più bit e più calcolo.
- Finestra di ricerca (spesso identificata dal raggio di ricerca). Più grande è, più predittori possibili: qualità maggiore, costo maggiore.
- Funzione di dissimilarità (SAD o SSD).
- Strategia di ricerca: full search (si provano tutti i vettori della finestra) oppure strategie intelligenti che riducono la complessità con impatto minimo sulla qualità: per esempio la three-step search (9 punti per passo, uno al centro e 8 sui bordi; a ogni passo il lato dell'area di ricerca si dimezza; per una finestra si fanno circa 25 confronti invece di 196: una riduzione dell'87%) o la ricerca esagonale.
Effetto della dimensione del blocco (immagine CIF ; il "tasso" è il numero totale di bit per i vettori dell'immagine, il tempo è relativo al caso ):
| Blocco | PSNR del predittore | Tasso (bit) | Tempo | Blocchi per immagine | Bit per vettore |
|---|---|---|---|---|---|
| 26,53 dB | 7938 | 3,5x | 1584 | 5,0 | |
| 24,51 dB | 1668 | 1x | 396 | 4,2 | |
| 22,52 dB | 368 | 0,38x | 99 | 3,7 |
Passare da a quadruplica i blocchi (e i vettori): il tasso totale cresce di circa 4,8 volte anche se ogni vettore costa un po' meno bit, la qualità della predizione cresce di 2 dB e il tempo di calcolo di 3,5 volte.
2.3 Regolarizzazione e codifica dei vettori: esempi delle demo
Sulla sequenza "flower" (blocchi , SAD, raggio di ricerca 8):
- senza regolarizzazione: PSNR del predittore dB, vettori codificati con Exp-Golomb e predizione spaziale: bit, bit/vettore, bit/pixel; l'errore di predizione è molto sparso (istogramma concentrato intorno a zero; varianza dei blocchi molto minore di quella dei blocchi dell'immagine);
- con regolarizzazione : PSNR dB (perde 0,06 dB), costo bit, bit/vettore, bit/pixel; il tempo sale da 113 ms a 461 ms. La regolarizzazione riduce nettamente il costo dei vettori (perché favorisce vettori simili ai vicini, quindi più prevedibili) con impatto minimo sulla qualità;
- con blocchi (regolarizzato): PSNR dB, ma bit (4 volte i vettori, anche se bit/vettore); tempo 879 ms.
Sulla sequenza "akiyo" (quasi statica, blocchi ): PSNR del predittore dB, quasi tutti i vettori sono nulli. Exp-Golomb costa bit ( bit/vettore), ma un codificatore aritmetico raggiungerebbe l'entropia: bit ( bit/vettore). Lezione: Exp-Golomb (e anche Huffman) è inefficace quando la maggior parte dei simboli è lo stesso (entropia molto bassa, Codifica lossless - entropia, Huffman e codifiche a dizionarioLa codifica lossless rappresenta i simboli di una sorgente con parole di codice a lunghezza variabile in modo invertibile; si usano codici a prefisso (istantanei). L'entropia $H(X)=\sum p_i\log_2\frac1{p_i}$ è il limite: $H(X)\le\mathcal L^*<H(X)+1$ (Shannon), con uguaglianza se le probabilità sono potenze di 1/2. Il codice di Huffman è ottimo ma lascia fino a 1 bit di overhead per simbolo; raggruppando $K$ simboli (codifica a blocchi) si tende al tasso entropico $\mathcal H(X)\le H(X)$, ma la complessità cresce come $M^K$; la codifica aritmetica ($\mathcal L<H+2$ per messaggio) ha complessità lineare. Altre tecniche: dizionario (LZ, DEFLATE di ZIP e PNG, ANS in Zstandard), Exp-Golomb e categoria/ampiezza (usati in JPEG e nei codec video) per interi con probabilità decrescente col modulo, codifica predittiva (si codifica l'errore di predizione, che ha entropia molto più bassa).Codifica lossless - entropia, Huffman e codifiche a dizionario →).
2.4 Bit-rate dei vettori di movimento
Il costo dei vettori in bit al secondo si calcola in quattro passi: pixel per immagine; blocchi per immagine ; bit per immagine ; bit/s .
Esempio. Video HD a 30 fps con block-matching. Blocchi e bit/vettore: pixel ; blocchi ; bit/immagine ; bit/s bit/s kbit/s. Blocchi e bit/vettore: blocchi, bit/immagine, kbit/s. (I blocchi più piccoli costano, in totale, volte di più: 4 volte i vettori, ognuno un po' più caro.)
3. Tipi di immagine e GOP
- Frame I (intra coded): niente predizione temporale (eventualmente la predizione spaziale dalla stessa immagine). Vantaggi: bassa complessità (nessuna stima del movimento), punto di accesso in decodifica, limite alla propagazione degli errori. Svantaggio: a parità di qualità richiedono molti più bit di P e B.
- Frame P (predictive): ogni blocco è predetto da un singolo blocco di un'immagine di riferimento (per esempio l'ancora precedente), oppure si può usare la predizione spaziale (modo intra). Molto più compresse delle I. Complessità elevata (stima del movimento).
- Frame B (bi-prediction): ogni blocco può essere predetto da due blocchi (tipicamente una immagine passata e una futura), da uno solo, o con predizione spaziale. Perché due riferimenti: aumenta la probabilità di trovare un buon predittore. Conseguenza: l'ordine di codifica non coincide con l'ordine di visualizzazione. Compressione ancora più spinta ma grande complessità (due stime del movimento).
Le I e le P sono le ancore (anchor frames, AF). Un GOP comincia sempre con una I:
- : distanza tra due I (lunghezza del GOP);
- : distanza tra due ancore.
Esempio (, ). Ordine di visualizzazione: I due tra e si predicono da e , quindi va codificato prima di : ordine di codifica . Il decodificatore deve riordinare prima di mostrare: un ritardo in più.
Rate-distortion dei tipi di frame. Dopo aggiustamenti, i fotogrammi I sono circa 3-5 volte più grandi dei P e 10-20 volte dei B. La qualità (PSNR) dipende dal contenuto, ma quella delle I è tipicamente forzata alta perché servono a predire tutto il GOP.
4. Il codificatore video ibrido
Tutti i codificatori video ibridi seguono lo stesso schema, con differenze nell'implementazione dei moduli. Si lavora per blocchi di pixel (le unità di codifica negli standard recenti), e il tipo di ogni frame è fissato dalla struttura del GOP.
Codifica intra. Il primo blocco passa in un codificatore "tipo JPEG" (DCT, quantizzazione , codifica a lunghezza variabile VLC, per esempio Huffman); il bitstream esce attraverso un buffer di canale; è anche decodificato (quantizzazione inversa e DCT inversa) e il blocco ricostruito va nel DFB. Il secondo blocco è codificato in modo predittivo usando il DFB: la predizione può essere semplice (il valor medio, come in JPEG) o sofisticata (direzioni diverse) e richiedere parametri; l'errore di predizione è codificato come in JPEG, poi decodificato e sommato al predittore: esattamente le operazioni che farà il decodificatore, e il risultato va nel DFB. Si prosegue fino a codificare l'intera frame in modo intra; poi la frame decodificata nel DFB serve da base per la predizione temporale.
Codifica inter. Il primo blocco della frame successiva è confrontato con la frame nel DFB con la ME: si produce il vettore di movimento (codificato e usato dalla MC per produrre il predittore); l'errore di predizione è codificato, poi decodificato e sommato al predittore per ottenere il blocco decodificato nel DFB. Un modulo di controllo decide per ogni blocco tra intra e inter.
Buffer di canale. Permette di adattare il tasso di codifica a quello di trasmissione o scrittura modificando la quantizzazione (controllo di tasso).
Il decodificatore ibrido esegue le operazioni inverse: per ogni blocco decodifica il modo e i parametri (vettori, tipo di predizione spaziale), decodifica l'errore (come JPEG) e lo somma al predittore calcolato come al codificatore. Non fa stima del movimento né decisione del modo: richiede molte meno operazioni del codificatore (asimmetria utile per la distribuzione di video).
4.1 Scelta del modo di codifica
Ogni unità di codifica può essere codificata in più modi (intra o inter, e negli standard recenti varie sottovarianti di entrambi, anche con partizioni più piccole della coding unit). Nel caso semplice intra/inter, per ogni modo si fa una pre-codifica calcolando il numero di bit e la distorsione , e si sceglie Questa strategia equivale a risolvere il problema vincolato "minimizzare la distorsione con un vincolo sul bit-rate totale". Per si usano euristiche che lo legano al bit-rate obiettivo.
5. Bit-rate di un GOP e playout buffer
Per un GOP formato da una frame Intra di bit e frame P di bit (), con fotogrammi al secondo, i bit per GOP sono e la sua durata è . Il tasso medio di codifica è quindi Per (tutte intra) ; per (quasi solo P) . La funzione è strettamente decrescente: aumentare riduce il tasso.
Con un throughput di rete costante, durante la riproduzione il buffer del client varia con pendenza (Streaming adattativo e DASHPer non stallare serve $R_C\le S$ (tasso di codifica non superiore al throughput), ma $R_C$ si controlla e $S$ no. Se $S<R_C$ la latenza cresce, i buffer dei router si riempiono e si perdono pacchetti; né il drop brutale né il transcoding in rete sono praticabili, la scalabilità (SVC) è parziale. La soluzione dominante è lo streaming adattativo (ABR) tirato dal client su HTTP: il video è diviso in $N$ segmenti da $T_S$ secondi, ciascuno in $K$ livelli di bit-rate $R_C(k)$ descritti nell'MPD; il client sceglie il livello $q(n)$ di ogni segmento con $T_D=\frac{T_SR_C(q)}{S_n}$. Il playout buffer $B(t)$ (in secondi di video) segue $B'=\frac S{R_C}$ durante lo stallo e $B'=\frac S{R_C}-1$ durante la riproduzione; si parte dopo $L$ segmenti e dopo uno stallo si riprende con $M$ nuovi segmenti. La QoE si modella con $J=\sum_n\lambda_1k_n-\lambda_2\lvert k_n-k_{n-1}\rvert-\phi(\Delta_n)-\lambda_3T_{ST}$. Gli algoritmi ABR sono basati su throughput, buffer o ibridi; MPEG-DASH standardizza MPD e segmenti, non il client.Streaming adattativo e DASH →): si riempie se , si svuota se , resta costante se . La condizione si traduce, riordinando, in
- Se : il membro destro è e il sinistro è positivo, quindi mai soddisfatta (il throughput non basta nemmeno per le sole P).
- Se : soddisfatta per ogni (il throughput basta anche per tutte intra).
- Se : e la condizione diventa .
Esempio. kbit, ( kbit), fps, Mbit/s. Mbit/s, Mbit/s: siamo nel terzo caso, . Per il buffer resta costante (); per si riempie; per si svuota. Il minimo throughput che permette la trasmissione al variare di è Mbit/s (con abbastanza grande).
Grafico interattivo: Tasso di codifica medio R_C in funzione di N per Bintra = 400 kbit, alfa = 1/10, 25 fps: scende da 10 Mbit/s (tutte intra) verso 1 Mbit/s. Con S = 2 Mbit/s il buffer non si svuota solo per N >= 8
Un altro effetto: una frame I è molto grande, quindi per trasmetterla serve più tempo di una frame normale: con più link in serie la sola trasmissione di una I da 400 kbit su un link da 2 Mbit/s dura s per link, 2 s su 10 link in serie.
6. Codifica video scalabile
Nella codifica scalabile il bitstream ha struttura gerarchica: il livello base permette di decodificare una versione a qualità ridotta a un bit-rate piccolo ; uno o più livelli di enhancement ripristinano la qualità, con bit-rate addizionale . La scalabilità può essere temporale (frame rate: per esempio base solo frame I a 10 fps, enhancement 1 con I e P a 40 fps, enhancement 2 con I, P e B a 120 fps), spaziale (risoluzione) o di qualità.
Confronto con la codifica non scalabile (simulcast). Per tre livelli di qualità senza scalabilità si codifica tre volte, con tre file di bit-rate . Con la scalabilità c'è un solo file con . Tipicamente , , : ogni livello di scalabilità penalizza di circa il 5-10% (altre slide dicono fino al 15%) di bit-rate a parità di qualità.
Vantaggi: meno spazio di memorizzazione sul server e miglior uso delle risorse di rete (carico sui link in media minore). Svantaggi: richiede l'aggiornamento dei router, che devono inoltrare i pacchetti di ogni livello (base, enhancement) solo dove serve (tecnologia a gruppi multicast multipli). Oggi si usa molto in WebRTC per le videoconferenze di gruppo, meno nello streaming VoD (che preferisce DASH, Streaming adattativo e DASHPer non stallare serve $R_C\le S$ (tasso di codifica non superiore al throughput), ma $R_C$ si controlla e $S$ no. Se $S<R_C$ la latenza cresce, i buffer dei router si riempiono e si perdono pacchetti; né il drop brutale né il transcoding in rete sono praticabili, la scalabilità (SVC) è parziale. La soluzione dominante è lo streaming adattativo (ABR) tirato dal client su HTTP: il video è diviso in $N$ segmenti da $T_S$ secondi, ciascuno in $K$ livelli di bit-rate $R_C(k)$ descritti nell'MPD; il client sceglie il livello $q(n)$ di ogni segmento con $T_D=\frac{T_SR_C(q)}{S_n}$. Il playout buffer $B(t)$ (in secondi di video) segue $B'=\frac S{R_C}$ durante lo stallo e $B'=\frac S{R_C}-1$ durante la riproduzione; si parte dopo $L$ segmenti e dopo uno stallo si riprende con $M$ nuovi segmenti. La QoE si modella con $J=\sum_n\lambda_1k_n-\lambda_2\lvert k_n-k_{n-1}\rvert-\phi(\Delta_n)-\lambda_3T_{ST}$. Gli algoritmi ABR sono basati su throughput, buffer o ibridi; MPEG-DASH standardizza MPD e segmenti, non il client.Streaming adattativo e DASH →).
7. Standard principali
- MPEG-2 (primi anni '90): il primo standard video con grande diffusione (DVD, canali digitali satellitari). Codec ibrido con frame I, P e B. Niente predizione spaziale: le intra sono codificate in modo molto simile a JPEG. Obsoleto ma con nicchie (DVD, TV non HD, videosorveglianza). Risoluzioni fino a , fino a 60 fps, fino a 80 Mbit/s; YCbCr con o senza sottocampionamento; 8 bit per campione; strumenti di codifica scalabile.
- H.264/AVC (2003): ancora molto diffuso. Rispetto a MPEG-2: predizione spaziale nell'intra, forma e dimensione variabile dei blocchi per la stima del movimento, trasformata simile alla DCT ma con coefficienti interi (rapidità e ripetibilità), filtro di de-blocking (toglie gli artefatti a blocchi a basso bit-rate), codifica lossless ottimizzata. Tasso più che dimezzato a parità di qualità.
- H.265/HEVC (2013): alberi quaternari di codifica, intra migliorata e altro; resta ibrido. Tasso circa dimezzato rispetto a H.264. Licensing poco efficace.
- H.266/VVC (2021): ibrido con molti miglioramenti; complessità aumentata di un ordine di grandezza; tasso circa dimezzato rispetto a HEVC (a qualità percepita la riduzione è ancora maggiore, 40-50% rispetto a HEVC).
- VP9 e AV1: ibridi open-source con caratteristiche simili rispettivamente a H.264 e H.265.
Le prestazioni si confrontano con le curve tasso-distorsione (PSNR in funzione del tasso): per esempio HEVC a 500 kbit/s raggiunge una qualità per cui MPEG-2 avrebbe bisogno di quasi 5 volte il bit-rate.
| Codec | Bit-rate | PSNR | Tempo di codifica | Velocità vs real time |
|---|---|---|---|---|
| MPEG-2 | 2,02 Mbit/s | 40,30 dB | 2,56 s | 11,7x |
| H.264 | 1,90 Mbit/s | 45,43 dB | 10,89 s | 2,75x |
| H.265 | 1,90 Mbit/s | 46,26 dB | 30,04 s | 1,00x |
| AV1 | 2,02 Mbit/s | 47,40 dB | 89,03 s | 0,33x |
(Codifica con ffmpeg su PC di un video sintetico 720p di 30 s.) Si vede il compromesso: più efficienza (più dB a pari bit-rate) costa molta più complessità e tempo di codifica; AV1 è sotto il tempo reale.
Diffusione (stime delle slide per il 2026). TV digitale terrestre: HEVC circa 57%, AVC circa 35%, MPEG-2 sotto 10% (cicli di aggiornamento lunghi per la compatibilità con i ricevitori; DVB-T2 impone HEVC). Piattaforme di streaming: AV1 circa 35-40% (risparmio di banda, royalty-free), AVC circa 30% (retrocompatibilità), HEVC circa 25% (4K HDR su Apple e TV). Comunicazioni real-time: AVC circa 50% (accelerazione hardware), VP9 25%, VP8 15%, AV1 10% (in crescita). Priorità del real-time: bassa latenza e resilienza ai pacchetti persi.
Domande d'esame
1. Il principio della stima del movimento per block-matching è: (a) trovare blocchi corrispondenti in due immagini e interpretarne la distanza come spostamento, (b) trovare feature corrispondenti, (c) stimare il movimento globale della camera? Traccia: (a); non si cerca il movimento fisico ma il miglior predittore, con costo .
2. Che cosa fa la regolarizzazione nella stima del movimento? Traccia: aggiunge al costo, quindi peggiora (di poco) l'errore di predizione ma migliora il costo di codifica dei vettori, tende a produrre vettori piccoli e regolari (bassa entropia).
3. Un GOP I+9P con , kbit, 30 fps, throughput 2 Mbit/s: il buffer di riproduzione si riempie o si svuota? Traccia: bit per GOP kbit; il GOP dura 10 frame s, quindi 3 GOP al secondo e kbit/s Mbit/s : il buffer si svuota.
Versione ripasso
Idea. Un video non compresso costa 36 Mbit/s (CIF) fino a decine di Gbit/s (8K). Si sfrutta la ridondanza spaziale (parte "tipo JPEG") e soprattutto temporale (immagini consecutive simili, basta una predizione). Si invia: parametri di predizione + errore di predizione compresso. Il codificatore tiene il DFB (immagini decodificate) per ripetere la stessa predizione del decodificatore. Predizione limitata per propagazione degli errori, accesso casuale, complessità tipi I, P, B e GOP.
Stima del movimento (block-matching). Per ogni blocco si cerca nell'immagine di riferimento. Dissimilarità SAD (, rapida) o SSD. ; regola qualità della predizione contro costo dei vettori (regolarizzazione). Compensazione: . Si cerca il miglior predittore, non il moto fisico; se non c'è un buon predittore: intra. Errore codificato come in JPEG.
- Parametri: dimensione del blocco (piccoli: più vettori, bit e calcolo), finestra di ricerca, funzione , strategia (full search, three-step: 9 punti per passo, 25 confronti su 196 ; esagonale).
- CIF: PSNR 26,53, 7938 bit, 3,5x; 24,51, 1668 bit, 1x; 22,52, 368 bit, 0,38x (blocchi 1584, 396, 99).
- Demo: senza regolarizzazione 1926 bit (4,86 bit/vettore, PSNR 23,01); con 1566 bit (3,95 bit/vettore, PSNR 22,95, tempo ); regolarizzato 5200 bit. "akiyo": quasi tutti vettori nulli, Exp-Golomb 3226 bit contro entropia 267 bit.
- Bit-rate dei vettori: blocchi ; bit/s . Esempio HD 30 fps: , 2 bit: kbit/s; , 2,5 bit: 607,5 kbit/s.
Frame. I: solo intra; bassa complessità, accesso casuale, ferma gli errori; molti bit. P: un riferimento; compressa. B: due riferimenti (passato e futuro), compressione massima, doppia ME, ordine di codifica visualizzazione ( codifica ). GOP: = distanza tra I, = distanza tra ancore (I e P). Dimensioni: I circa 3-5 volte P, 10-20 volte B.
Codificatore ibrido. Intra: DCT, , VLC, buffer di canale; decodifica interna (, IDCT) verso il DFB; predizione spaziale (anche il valor medio). Inter: ME + MC dal DFB, errore codificato; controllo intra/inter per blocco. Buffer di canale: controllo del tasso via quantizzazione. Decodificatore: decodifica modo e parametri, errore, somma al predittore; niente ME né decisione di modo: molto più semplice. Scelta del modo: (equivale alla minimizzazione di con vincolo sul tasso).
GOP I+P. , , (decrescente in ): ; . Buffer: (si riempie se ). Condizione : mai se ; sempre se ; altrimenti . Esempio kbit, , 25 fps, Mbit/s: , , (: costante; : si riempie); minimo throughput Mbit/s. Esempio GOP I+9P, , kbit, 30 fps: 840 kbit/GOP, 3 GOP/s, Mbit/s.
Scalabile. Livello base () + enhancement (); un solo file contro simulcast; penalità 5-10% (fino a 15%) per livello; meno memoria e carico sui link, ma router da aggiornare (multicast multipli). Usata in WebRTC.
Standard. MPEG-2 (anni '90, DVD, solo intra tipo JPEG, fino a 80 Mbit/s). H.264/AVC (2003): intra spaziale, blocchi variabili, trasformata intera, de-blocking; tasso più che dimezzato. HEVC (2013): alberi quaternari, tasso . VVC (2021): complessità , tasso di HEVC. VP9, AV1: open source (simili a H.264 e H.265). Esempio 720p: MPEG-2 2,02 Mbit/s 40,30 dB; H.264 1,90 Mbit/s 45,43 dB; H.265 1,90 46,26; AV1 2,02 47,40 (tempi 2,56, 10,89, 30,04, 89,03 s). Diffusione 2026 (stime): TV HEVC 57%; streaming AV1 35-40%; real-time AVC 50%.
Errori tipici: confondere ed ; dimenticare che le B si codificano dopo le P future; dire che il decodificatore fa la stima del movimento; scambiare per il bit-rate dell'intero video invece del tasso medio del GOP; confrontare con senza considerare le I; credere che la ME trovi il movimento fisico.
Collegamenti: Compressione di immagini - DCT e standard JPEGPer comprimere con perdita non basta quantizzare i pixel (non sono sparsi): si applica una trasformata lineare ortogonale che concentra l'energia in pochi coefficienti, si quantizzano i coefficienti e si codificano senza perdita. Le trasformate ortogonali conservano l'MSE ($\frac1N|\mathbf x-\tilde{\mathbf x}|^2=\frac1N|\mathbf y-\tilde{\mathbf y}|^2$). JPEG baseline: si sottrae 128, si divide in blocchi $8\times8$, DCT 2D ($Y=AXA^T$), quantizzazione uniforme con tabella (passi piccoli a bassa frequenza, scalata da un fattore di qualità $Q$), zig-zag scan, DC codificato in modo differenziale con categoria/ampiezza, AC con coppie (run, categoria) e simbolo EOB, codici di Huffman non standardizzati scritti nel file. Esempio completo: un blocco da 512 bit diventa 49 bit (0,766 bit/pixel).Compressione di immagini - DCT e standard JPEG →, Streaming adattativo e DASHPer non stallare serve $R_C\le S$ (tasso di codifica non superiore al throughput), ma $R_C$ si controlla e $S$ no. Se $S<R_C$ la latenza cresce, i buffer dei router si riempiono e si perdono pacchetti; né il drop brutale né il transcoding in rete sono praticabili, la scalabilità (SVC) è parziale. La soluzione dominante è lo streaming adattativo (ABR) tirato dal client su HTTP: il video è diviso in $N$ segmenti da $T_S$ secondi, ciascuno in $K$ livelli di bit-rate $R_C(k)$ descritti nell'MPD; il client sceglie il livello $q(n)$ di ogni segmento con $T_D=\frac{T_SR_C(q)}{S_n}$. Il playout buffer $B(t)$ (in secondi di video) segue $B'=\frac S{R_C}$ durante lo stallo e $B'=\frac S{R_C}-1$ durante la riproduzione; si parte dopo $L$ segmenti e dopo uno stallo si riprende con $M$ nuovi segmenti. La QoE si modella con $J=\sum_n\lambda_1k_n-\lambda_2\lvert k_n-k_{n-1}\rvert-\phi(\Delta_n)-\lambda_3T_{ST}$. Gli algoritmi ABR sono basati su throughput, buffer o ibridi; MPEG-DASH standardizza MPD e segmenti, non il client.Streaming adattativo e DASH →, Esercizio - Stima del movimento, GOP e bit-rate del video (domande ed esercizi del corso).
Domande tipiche.
- Principio del block-matching: per ogni blocco si cerca il blocco più simile nel riferimento; il vettore è lo spostamento; si cerca il miglior predittore, non il moto fisico.
- Regolarizzazione: aggiunge ; peggiora un po' la predizione ma riduce il costo dei vettori (vettori regolari, entropia minore).
- GOP I+9P con kbit, , 30 fps: 840 kbit per GOP, Mbit/s Mbit/s: il buffer si svuota.
- Frame B: due riferimenti, ordine di codifica diverso da quello di visualizzazione, massima compressione e massima complessità.