Una valutazione comparativa dei codec di
Transcript
Una valutazione comparativa dei codec di
Università di Bologna Facoltà di Scienze Matematiche, Fisiche e Naturali Dipartimento di Informatica Corso di Laurea in Informatica Tesi di Laurea Una valutazione comparativa dei codec di compressione video di ultima generazione Relatore Prof. Fabio Panzieri Candidato Simone Chiesa Università di Bologna matr. 0000119125 Parole chiave: compressione video, codec, comparazione, standard, prestazioni Anno Accademico 2005/06 A mio padre e a mia madre "La Vita, senza Amore, sarebbe solo un conglomerato di molecole" Indice generale VIDEO DIGITALE 1.1 Cos'è un codec?........................................................................................................................9 1.2 Lossy o Lossless?...................................................................................................................10 Compressione lossless.......................................................................................................10 Compressione lossy...........................................................................................................11 Differenza tra flussi audio e video.................................................................................... 12 1.3 I container.............................................................................................................................. 14 Formato File...................................................................................................................... 14 Specifiche..........................................................................................................................14 I formati container.............................................................................................................15 1.4 Linee TV, pixel e campioni................................................................................................... 17 1.5 I tipi di spazio colore............................................................................................................. 17 RGB.................................................................................................................................. 18 YUV.................................................................................................................................. 19 YUV 4:4:4.........................................................................................................................20 YUV 4:2:2.........................................................................................................................20 YUV 4:2:0.........................................................................................................................21 Conversione RGB ↔ YUV...............................................................................................23 LA COMPRESSIONE VIDEO 2.1 Tipi di frames.........................................................................................................................27 Gli intra-frames................................................................................................................. 28 I Delta-Frames od Inter-Frames........................................................................................ 28 B-frames / Bi-directional encoding:..................................................................................29 2.2 Conversione dello spazio di colore........................................................................................31 2.3 Blocking.................................................................................................................................32 2.4 Modellizzazione del moto......................................................................................................33 Motion Estimation (ME) .................................................................................................. 33 Motion Compensation (MC)............................................................................................. 34 2.5 DCT, Discrete Cosine Transform.......................................................................................... 37 2.6 Quantizzazione.......................................................................................................................38 2.7 Zig-Zag Scanning.................................................................................................................. 40 2.8 Run-Level encoding (RLE) e Variable-Lenght coding (VLC)..............................................40 2.9 Bit-rate................................................................................................................................... 44 2.10 CBR e VBR......................................................................................................................... 44 2.11 1-pass e n-pass..................................................................................................................... 45 Modalità 1-pass................................................................................................................. 46 Modalità a 2-pass.............................................................................................................. 47 2.12 I difetti dei codec lossy........................................................................................................ 48 LO STANDARD MPEG-4 3.1 MPEG.................................................................................................................................... 50 3.2 MPEG-4................................................................................................................................. 52 Componenti dell'MPEG-4.................................................................................................54 3.3 H.264/AVC............................................................................................................................ 55 Algoritmi e profili............................................................................................................. 56 Macro-blocchi e slice........................................................................................................ 59 Predizione e codifica intra.................................................................................................59 Predizione e codifica inter.................................................................................................60 Trasformata e quantizzazione........................................................................................... 60 Filtro di ricostruzione........................................................................................................61 Codifica VLC.................................................................................................................... 61 3.4 Incremento in qualità e in complessità.................................................................................. 62 3.5 Applicazioni:..........................................................................................................................64 Diffusione televisiva a definizione standard..................................................................... 65 Diffusione televisiva ad alta definizione...........................................................................65 3.6 Implementazioni software......................................................................................................66 VALUTAZIONE DELLA QUALITA' 4.1 Il problema dei metri di valutazione...................................................................................... 68 4.2 Problemi.................................................................................................................................69 Dipendenze dalle scene di input........................................................................................69 Dipendenze dai sistemi di trasmissione digitali................................................................ 69 Nuovi disturbi del video digitale.......................................................................................69 La necessità dell'indipendenza della tecnologia................................................................70 4.3 Valutazione soggettiva...........................................................................................................70 4.4 Valutazione oggettiva............................................................................................................ 71 Il PSNR............................................................................................................................. 71 SSIM................................................................................................................................. 74 VQM................................................................................................................................. 74 COMPARAZIONE 5.1 Risorse utilizzate....................................................................................................................77 5.2 Codec LOSSLESS................................................................................................................. 79 5.3 Codec LOSSY........................................................................................................................99 Introduzione Il video digitale è ormai una realtà che abbraccia diversi momenti della nostra giornata. Tutti, chi più e chi meno, si trovano e si troveranno sempre più a fare i conti con la tecnologia di trasmissione audiovisiva digitale. Come negli anni '50 la diffusione della Televisione ha dato un contributo fondamentale all'alfabetizzazione di massa, così nel 2000 la diffusione dei servizi di video on demand ha iniziato il processo di alfabetizzazione avanzata per il cittadino, che comporta un'estensione di alcuni valori fondamentali della democrazia come libertà di stampa, di pensiero, di espressione. Se fino ad oggi queste libertà si sono concretizzate limitatamente alla scrittura ed alle immagini per problemi, così diciamo, tecnici, oggi con l'abbassamento dei prezzi delle nuove tecnologie trasmettere l'informazione tramite audiovisivi è più che mai alla portata di tutti. Il video è molto più diretto, veloce, appetibile rispetto alle parole scritte che richiedono più concentrazione da parte di chi le legge. Le immagini accompagnate dai suoni descrivono da sole una scena con un colpo d'occhio da mezzo secondo (un principio conosciuto bene dai professionisti della pubblicità). I canali di trasmissione si moltiplicano, le fonti aumentano in maniera esponenziale ogni giorno e la sete di conoscenza accresce anche e soprattutto laddove esistono restrizioni alla libertà (guerre, dittature, regimi totalitari, ecc.). Ormai sono note a tutti le potenzialità della rete Internet e già da qualche anno i servizi di informazione on-line hanno sorpassato i tradizionali giornali e telegiornali. Le TV via Internet tramite streaming o download sono già una realtà (in Italia è popolare l'ottima Arcoiris.tv) così come lo scambio di files tramite peer-to-peer o l'archiviazione in rete di grandi database audiovisivi (Google Video). Presto non saranno più solo poche persone a decidere che cosa debba passare sugli schermi, ma sarà il singolo individuo a scegliere come, quando e cosa guardare. Già oggi sono disponibili anche servizi di video on demand tramite satellite o digitale terrestre, ma è una realtà ancora per “pochi” (dati i costi degli abbonamenti) e che “puzza” ancora del vecchio sistema televisivo in cui c'è sempre qualcuno che sceglie che cosa proporre allo spettatore. Entro qualche anno sono convinto che le televisioni come le conosciamo noi scompariranno: il sistema piramidale attuale lascerà il posto a un'informazione e una produzione artistica “dal basso”, in cui il confine tra produttore di audiovisivi e spettatore sarà molto sfumato. Oggi è facile prendere in mano una videocamera e girare un video digitale. Ma è ancora difficile per molti semi-professionisti fare il passo successivo: renderlo un prodotto distribuibile e consultabile da tutti in maniera corretta e semplice. L'encoding è l'ultimo passo della post-produzione digitale e giugno 2006 7 rappresenta uno scoglio che sia il professionista sia l'amatore cineasta, giornalista o quant'altro devono imparare a superare al più presto se si vuole produrre in maniera autonoma, corretta e standardizzata video di qualità. Anche l'utente semplice che fruisce delle nuove tecnologie audiovisive (I-pod, fotocamere digitali, videofonini, ecc.) deve conoscere le basi dell'encoding se vuole sfruttare a pieno le potenzialità dei dispositivi. E per finire, anche il semplice spettatore che preleva video della rete dovrebbe sapere che cosa è un codec o rischia di ritrovarsi svariati messaggi di errore ogni qualvolta cerchi di aprire un video sul proprio lettore multimediale, per non parlare dell'aumento di qualità possibile tramite un corretto settaggio delle impostazioni di decoding. Questo documento tratta dell'encoding di video digitale. E' una panoramica sulle tecnologie attuali e sui codec di compressione video disponibili attualmente sul mercato commerciale e opensource. Il Capitolo 1 è un'introduzione per capire come funziona il video digitale. Il capitolo 2 tratta i principi e le tecniche di base della compressione video. Il capitolo 3 è dedicato all'MPEG-4 e al nuovo importantissimo standard H.264/AVC. Nel capitolo 4 si discutono le tecniche per valutare la qualità e le prestazioni di un video digitale. Nel capitolo 5 c'è una comparazione e una valutazione pratica dei migliori codec video in circolazione, per aiutare a scegliere quello più adatto alle proprie esigenze. Per il suo linguaggio e per il suo contenuto questo documento è indicato sia al neofita, sia all'appassionato, sia al professionista del video digitale. 8 giugno 2006 1 VIDEO DIGITALE 1.1 Cos'è un codec? Un CODEC (enCOder/DECoder o COmpressor/DECompressor) è un programma o un dispositivo che si occupa di codificare e decodificare digitalmente un segnale o un flusso di segnali (tipicamente audio o video). Tale programma può essere installabile (su personal computer o apparecchiature multimediali predisposte) oppure essere integrato in un componente hardware dedicato (ad es. nei lettori CD o DVD casalinghi o in alcune schede video/audio per PC). Un codec codifica il segnale per la trasmissione, la memorizzazione o la criptazione e lo decodifica per la visione o la modifica. Oltre alla digitalizzazione del segnale, i codec effettuano anche una compressione (e decompressione in lettura) dei dati ad esso relativi, in modo da poter ridurre lo spazio di memorizzazione occupato a vantaggio della portabilità o della trasmissibilità del flusso codificato. Esistono vari tipi di codec, differenti tra loro per il tipo di segnale cui sono destinati e per l'algoritmo di compressione in essi implementato. Molti flussi di dati multimediali hanno necessità di contenere sia dati audio che dati video, e spesso qualche forma di meta-dati che permettano la sincronizzazione dell'audio e del video. Ognuno di questi tre flussi possono essere gestiti da giugno 2006 VIDEO DIGITALE 9 differenti programmi, processi o circuiti hardware, ma per essere utilizzabili devono essere incapsulati insieme in un "container". Molte persone credono che AVI sia un codec, ma questo è sbagliato. AVI è un container che i diversi codec possono usare. La confusione deriva dal fatto che spesso il nome del formato (estensione), del container e del codec coincidono (un esempio è MP3). Ci sono altri container alternativi ben conosciuti come per esempio Ogg, ASF, QuickTime, RealMedia. Mentre alcuni esempi di codec sono m4a, CDA, FLAC, wave, AC3 per l'audio; MPEG2, DivX, Huffyuv, Xvid, H.264 per il video. In definitiva, un codec è un insieme di algoritmi che analizzano, decompongono, comprimono e infine memorizzano un flusso audio/video, che seguirà il processo inverso per essere utilizzato. In questa tesi ci occuperemo principalmente di analizzare il processo di coding. 1.2 Lossy o Lossless? L'obiettivo di ogni progettista di codec dovrebbe essere di mantenere la qualità audio e video e allo stesso tempo comprimere lo spazio il più possibile. Ma questi 2 fattori sono inversamente proporzionali, ovvero maggiore è la qualità maggiore è lo spazio occupato e viceversa, quindi lo scopo del progettista diventa trovare un algoritmo che abbia il miglior compromesso tra qualità, compressione e velocità di esecuzione. Le tecniche di compressione video (ma questo vale per gli algoritmi di compressione in generale) possono essere suddivise in due grandi categorie: le tecniche cosiddette "lossless", nelle quali la compressione è un processo perfettamente reversibile che avviene senza perdita di informazione e dove video originale e video decompresso sono identici in tutti i dettagli, e le tecniche "lossy" o tecniche di compressione non reversibile, nelle quali video compresso e decompresso non sono più identici in quanto al momento della compressione sono state volutamente eliminate alcune informazioni ritenute "sacrificabili". Le tecniche "lossy" sono le più diffuse per la compressione del multimediale, ed infatti appartengono a questa categoria le codifiche MPEG (1, 2 e 4), il Divx, l'Xvid, l'mp3, il Vorbis ecc...; invece generalmente le tecniche di compressione lossless vengono utilizzate nella compressione dei documenti (zip, rar, etc...) o nel multimediale nella gestione di materiale sia per l'editing (audio e video) che per l'archiviazione sicura. 1.2.1 Compressione lossless Da un punto di vista teorico la massima qualità si otterrebbe facendo uso di video non compresso, 10 VIDEO DIGITALE giugno 2006 ma passando alla pratica ci si scontra subito con due problemi fondamentali: il video non compresso occupa troppo spazio (soprattutto quando si utilizzano risoluzioni elevate, ad esempio un video in RGB24 di 720x576 pixel occupa circa 30MB al secondo, e con 2GB si riescono a registrare al massimo un paio di minuti), ed inoltre richiede prestazioni elevate per il corretto funzionamento (soprattutto per quanto riguarda la velocità dell'Hard Disk..). I codec lossless permettono di ottenere la stessa qualità ma riducendo lo spazio occupato. Un video compresso con il codec Huffyuv per esempio, richiede circa un terzo dello spazio necessario rispetto a quello di un video non compresso (video a 704x576 richiedono intorno ai 9MB al secondo, valore alla portata della maggior parte degli Hard Disk in commercio). I codec lossless vengono principalmente utilizzati in ambito professionale: per l'editing, per il passaggio del materiale tra sistemi diversi o per l'archiviazione di materiale audiovisivo. Alcuni esempi di codec audio lossy sono: AAC (Advanced Audio Coding), MP3 (MPEG-1 Layer 3), Vorbis, lossy Windows Media Audio. I codec video sono elencati nel capitolo 5. 1.2.2 Compressione lossy Quando si parla di codec video si parla soprattutto di codec lossy. I metodi di compressione di dati di tipo lossy sono quelli in cui i dati prima compressi e poi decompressi sono diversi dagli originali, ma sono "abbastanza somiglianti" per essere utili a seconda dei casi. Il vantaggio dei metodi lossy è che producono file molto più piccoli rispetto ai metodi lossless, pur mantenendo i requisiti di qualità minima dell'applicazione. Questo tipo di compressione è spesso usata in Internet e specialmente nello streaming di dati multimediali e nelle applicazioni di videotelefonia. Quando un utente acquisisce un file compresso lossy (per esempio per ridurre il tempo di download da Internet) il file ricevuto può essere molto diverso dall'originale a livello di bit ma può essere indistinguibile alle orecchie o agli occhi umani per la maggior parte degli utilizzi. Molti metodi si focalizzano sulle idiosincrasie dell'anatomia umana considerando, per esempio, che l'occhio può vedere solo alcune frequenze della luce e che ci sono modelli psico-acustici che descrivono come il suono può essere altamente compresso senza degradare la qualità del suono percepito. L'incremento della qualità utilizzando codec lossless sarebbe spesso impercettibile e il considerevole aumento di spazio richiesto (soprattutto per il video) non ne giustifica di fatto l'utilizzo nei prodotti user-consumer. Ecco perché sugli scaffali dei negozi si trovano DVD (che è codificato con MPEG-2, lossy) e non cassette Mini-DV o DV-CAM (lossless). Eppure per i non addetti ai lavori il DVD è considerato video ad alta qualità. Su Internet vengono venduti MP3 (lossy) e non tracce audio CDA o file WAV giugno 2006 VIDEO DIGITALE 11 (lossless). Anche i nuovi supporti di alta definizione (Blu-Ray e HD-DVD) fanno uso di codec lossy e in particolare del codec H.264/AVC, il codec video della specifica standard definita nell'MPEG-4 part-10 (vedi Capitolo 3). Per realizzare una compressione lossy si fa quindi ricorso alla riduzione della precisione dei colori dei singoli pixel (codec video) o delle frequenze da riprodurre (in alcuni codec audio vengono soppresse le frequenze non udibili dall'orecchio umano), alla eliminazione delle ridondanze o alla scrittura delle sole differenze (codec video) rispetto ad una immagine di riferimento. Esistono codec molto buoni che riescono a comprimere i dati senza che la differenza di qualità sia percettibile. Esempi di codec audio lossless sono: Apple Lossless, FLAC, Monkey's Audio, Shorten, TTA, lossless Windows Media Audio, WavPack. 1.2.3 Differenza tra flussi audio e video Quando si vuole comprimere un video ci si trova a dover fare i conti con diversi parametri di configurazione, qualsiasi codec si utilizzi. Facendo alcuni esperimenti si nota subito come un piccolo cambiamento nel settaggio della codifica video influisca molto sul file-size finale, mentre cambiando i parametri per l'audio non si ottengono variazioni significative. E' importante a questo punto capire la differenza, in termini di spazio occupato, tra differenti tipi di dato multimediale. Un flusso audio è in un certo senso bidimensionale: un suono ha bisogno di un solo numero per la sua rappresentazione (il valore di ampiezza del segnale), tipicamente 16 o 24 bit (al massimo 32). Questo valore viene registrato un certo numero di volte in un determinato intervallo di tempo (di solito un secondo), in relazione alla frequenza desiderata. Campionare un suono a 32 Khz significa registrare la variazione del segnale di ampiezza 32.000 volte al secondo. Quindi un flusso audio campionato tipicamente a 16 bit e 44.1 Khz (qualità cd) occuperà1 16 x 44.100 = 705.600 bit/s = 86,13 KB/s Per un'ora di audio stereo (a 2 canali, quindi si registrano 2 flussi audio) non compresso saranno quindi necessari 1 Per la comprensione dei calcoli effettuati ricordiamo alcune nozioni di base delle unità di misura digitali: • 1 Byte = 8 bit • i Bytes si indicano con la B maiuscola, i bit con la b minuscola • Quando si passa tra Kilo, Mega e Giga bisogna moltiplicare o dividere per 1024, non per 1000. Quindi: 1 KB = 1024 bit 1 MB = 1024 KB 1 GB = 1024 MB 12 VIDEO DIGITALE giugno 2006 2 x 16 x 44.100 x 60 x 60 = 5.080.320.000 bit = 605,62 MB Un dato video, o pixel, ha bisogno tipicamente anch'esso di 24-bit per essere rappresentato correttamente (vedi sezione 1.5) ma questo valore va moltiplicato per il numero di linee orizzontali e verticali dell'immagine. E' quindi un valore a 4 dimensioni in cui i fattori sono: valore del pixel, larghezza, altezza e tempo. Supponendo di avere valori standard come 24-bit per pixel e risoluzione di 720 linee per 576 colonne ad una frequenza (PAL) di 25 immagini al secondo, si fa un rapido calcolo: 24 x 720 x 576 x 25 = 248.832.000 bit/s = 30.375 KB/s = 29,66 MB/s per un'ora di video non compresso ci vorranno allora 29,66 x 60 x 60 = 106.787 MB = 104,28 GB Un minuto di audio stereo non compresso pesa 10 MB, un ora 605 MB. Un minuto di video non compresso pesa 1780 MB, un'ora 106.800 MB. Abbiamo quindi un rapporto di 178:1, ovvero i dati video non compressi pesano 178 volte più di quelli audio (stereo). Si conclude che lo spazio richiesto per memorizzare un flusso video non compresso è enormemente maggiore di quello richiesto per memorizzare un flusso audio. Pertanto una corretta e bilanciata codifica di un documento audiovisivo avrà sempre un audio di ottima qualità, anche se la qualità video sarà scarsa. Nei codec lossy però il rapporto di compressione (ovvero lo spazio di memorizzazione richiesto dal file compresso comparato a quello richiesto dal file non compresso) su dati di tipo video è quasi sempre largamente superiore rispetto a quello su dati di tipo audio. L'audio può essere compresso a 10:1 senza perdita di qualità percettibile, il video può essere compresso anche oltre 300:1 senza che l'occhio umano scorga le differenze. Questo di fatto attenua un po' la forbice tra audio e video. Inoltre si pensi che immagini ferme compresse con metodi lossy (per esempio un'immagine JPEG) sono spesso compresse a 10:1, così come l'audio, ma la perdita di qualità è più visibile, soprattutto se le immagini sono piccole. Si può già ipotizzare quindi che nel comprimere video si utilizzino tecniche avanzate che agiscono sui flussi di immagini con maggiore efficacia rispetto alla compressione dei singoli fotogrammi. giugno 2006 VIDEO DIGITALE 13 1.3 I container 1.3.1 Formato File In informatica, un formato di file è la convenzione che viene usata per leggere, scrivere e interpretare i contenuti di un file. Poiché i files non sono altro che insiemi ordinati di bytes, cioè semplici numeri, per poter associare al loro contenuto cose diverse si usano convenzioni che legano i bytes ad un significato. Ad esempio, un formato di file per immagini può stabilire che i primi due bytes sono l'altezza e la larghezza dell'immagine, e i seguenti i colori secondo uno schema preordinato. I files di testo usano vari standard di codifica (come lo standard ASCII) per rappresentare lettere e formattazioni diverse. È teoricamente possibile, con leggere manipolazioni, interpretare il contenuto di un file come se fosse codificato secondo un formato diverso da quello con cui è stato creato: i byte letti sono generalmente validi, anche se non dotati di molto senso; ad esempio è possibile leggere un'immagine come se fosse un file musicale, ma molto probabilmente si otterranno solo rumori e non musica. Il formato di un certo file è comunemente indicato attraverso l'estensione, che è una serie di lettere (in genere tre, per motivi storici) unita al nome del file attraverso un punto. Ad esempio, "prova.txt" è un file di testo (o meglio, il suo contenuto va interpretato come testo), mentre "prova.jpg" è un'immagine. 1.3.2 Specifiche Per molti formati sono state pubblicate delle specifiche che descrivono esattamente come i dati devono essere codificati e che possono essere usate per stabilire se un programma specifico tratti correttamente o meno un determinato formato. Non sempre tali specifiche sono disponibili: innanzitutto alcuni formati sono considerati segreti industriali e le loro specifiche non vengono distribuite pubblicamente, come avviene ad esempio per molti dei formati proprietari di Microsoft; inoltre in molti casi gli sviluppatori non scrivono un documento di specifica separato, ma definiscono il formato solo implicitamente attraverso il programma che lo gestisce. In questo modo i dati salvati con quel programma non possono essere letti con altri programmi simili (il file può sempre essere letto da qualunque programma: ma i dati restano incomprensibili, se non si conosce il formato con cui sono stati salvati). Risalire ai dati originali salvati in un formato sconosciuto è sempre possibile, attraverso un lavoro di reverse engeenering, ma è di solito un processo molto lungo e costoso. Se il formato in questione è anche criptato, risalire ai dati diventa 14 VIDEO DIGITALE giugno 2006 praticamente impossibile. Ci sono esempi in cui si effettua invece il contrario, ovvero si progettano e si pubblicano le specifiche e gli standard ma non si implementano concretamente i programmi. E' il caso del gruppo di lavoro internazionale MPEG, che ha stabilito alcuni degli standard video più importanti e diffusi a livello mondiale. 1.3.3 I formati container Un formato container è un formato di file che può contenere vari tipi di dati multimediali. Si potrebbe dire che il container sia un sottoinsieme del concetto di formato, specializzato per i dati multimediali. Conoscendo le specifiche del container il programma dedicato è in grado di identificare e interpretare i differenti tipi di dato e di farne l'interleaving (ad esempio individuare e settare un valore che stabilisce quanto spesso i flussi audio e video sono sincronizzati). I formati container più semplici possono contenere un solo tipo di audio o video codificato, mentre i più avanzati (e flessibili) sono in grado di raggruppare audio, video, sottotitoli, capitoli e meta-dati (tags), insieme con le informazioni necessarie per riprodurre i vari flussi sincronizzati. Ad esempio WAV è un container audio semplice mentre mp4 è un container flessibile che può gestire al suo interno molti tipi di audio e video. L'estensione di un file caratterizza il tipo di container: per esempio “prova.mkv” è un formato container Matroska, “prova.rm” è un formato container Real Media. Da notare che il termine “formato container” viene spesso abbreviato solo in “container” oppure direttamente in “formato” creando così una certa confusione terminologica. In questo testo cercheremo di mantenere le distinzioni, ma il lettore non si preoccupi troppo se fa confusione tra i due termini, che in fondo nella pratica sono la stessa cosa. Le differenze tra i vari container risiedono in cinque principali punti: 1. Popolarità: quanto largamente è diffuso e supportato un container. AVI è ancora il container più popolare sebbene ormai sia obsoleto, perché è stato lo standard adottato nei sistemi Microsoft 2. Sovra-spazio: è la differenza in MB tra due file con lo stesso contenuto ma due container diversi. Un film di due ore in AVI può occupare fino a 3 MB in più dello stesso film in Matroska. 3. Supporto per funzionalità avanzate dei codec. I container più vecchi come AVI non supportano nuove funzionalità come B-Frames, VBR audio, VFR nativo, sebbene possano giugno 2006 VIDEO DIGITALE 15 essere "truccati" per aggiungere il supporto, ma creando così problemi di incompatibilità 4. Supporto per contenuto avanzato, come capitoli, sottotitoli, meta-tags, user-data. 5. Supporto per lo streaming. Tabella 1.3.3 - Confronto tra i container più diffusi: Matroska è il formato container di dominio pubblico: è sicuramente il migliore e il più flessibile. Peccato sia ancora poco popolare e poco utilizzato. Container 3GP Proprieta BVBR VBR Capitoli Sottotitoli rio frame audio video 3GPP ASF (Advanced Microsoft Systems Format) ? si si si ? ? Standard video supportati Standard audio supportati Stream 3gp Timed Text MPEG-4, H.263 e H.264/AVC AMR-NB/WB e (HE)-AAC si Quasi tutti tramite VFW o DMO, H.264/AVC è problematico Quasi tutti tramite ACM o DMO, Vorbis è problematico si Quasi tutto tramite Quasi tutti tramite VFW, H.264/AVC è ACM o DMO, problematico a Vorbis è causa dei bproblematico frames si si si si Si, ma solo tramite “hacks” AVI Microsoft si si si Si, ma solo tramite “hacks ” DivX DivX si si si si si Tutti quelli codificati con FourCC DivX mp3, PCM, AC-3 si pubblico si si si si si Tutti tutti si BSD ? ? ? ? ? tutti tutti si MPEG-2 PS (Program Stream) MPEG si si ? Solo nei file VOB su DVD Solo nei file VOB su DVD MPEG-1, MPEG-2 MPEG-1 Layers I, II, III (mp3), AC-3, LPCM, DTS si MPEG-2 TS (Transport Stream) MPEG si si si No possibile via ETSI EN 300 743 MPEG-1, MPEG-2, MPEG-4 ASP, H.264/MPEG-4 AVC MPEG-1 Layers I, II, III (mp3), AC-3, LPCM, DTS, AAC si MOV Apple si si si si si Tutti tramite QuickTime codec manager Tutti tramite Sound Manager o CoreAudio si si Si, ma con restrizi oni Si, ma con restrizioni MPEG-1, MPEG-2, MPEG-1 Layers I, MPEG-4 ASP, II, III (mp3), MPEGH.264/MPEG-4 2/4 (HE)-AAC, AVC vorbis si Theora, quasi Si, ma con tutto tramite VFW, Vorbis, quasi tutto OGMtools H.264/AVC non tramite ACM funziona si Matroska MCF MP4 MPEG si si OGG/ OGM Xiph.org RMVB RealNet works si ? si MPEG si si si VOB 16 si si No si ? Si, ma solo tramite “hacks” si VobSub RealVideo 8, 9, 10 (HE)-AAC, Cook Codec, Vorbis, RealAudio Lossless si MPEG-2 Part 2 AC-3, Linear PCM, DTS, MPEG-2 Part 3, MPEG-1 Layer II si VIDEO DIGITALE giugno 2006 1.4 Linee TV, pixel e campioni Una immagine TV analogica viene normalmente descritta come il risultato di una scansione operata da sinistra verso destra e dall'alto verso il basso. Ogni scansione completa è costituita da 625 linee e, in base allo standard adottato in Europa (PAL), viene ripetuta per 25 volte in un secondo. Per motivi storici esistono diversi standard che vengono adottati in tutto il mondo come illustrato nella cartina geografica a lato. Standard PAL SECAM NTSC FPS 25,00 25,00 29,97 linee 625 625 525 freq. 50Hz 50Hz 60Hz 1.4 - Distribuzione degli standard video nel mondo Le 625 linee TV non vengono impiegate totalmente per descrivere l'immagine. Infatti oltre alle informazioni sul contenuto di luminanza e crominanza dell'immagine sono necessarie altre informazioni per la cui trasmissione si richiede un periodo di pausa pari al tempo di trasmissione di ben 49 linee. Le linee attive dell'immagine sono quindi 576. Nel campo della TV digitale si utilizza invece un altra modalità di descrizione dell'immagine, suddividendola in pixel. Per ogni linea TV si considerano quindi 720 pixel pertanto una intera immagine TV è formata da 720 x 576 pixel. Ad ogni pixel sono associati i valori di luminosità dell'immagine, in gergo luminanza Y, e i valori relativi al colore, in gergo crominanza C. Ogni pixel è quindi costituito da campioni di luminanza e crominanza in numero variabile in funzione del livello qualitativo che si deve ottenere che viene descritto nella raccomandazione CCIR.601. 1.5 I tipi di spazio colore Vediamo le caratteristiche dei vari spazi colore, ovvero del modo di registrare le informazioni del giugno 2006 VIDEO DIGITALE 17 singolo pixel. 1.5.1 RGB RGB è l'acronimo di Red, Green e blue. E' possibile esprimere ciascun colore come somma dei tre contributi elementari a partire dai quali si creano tutti gli altri con misture additive. Numerosi formati di immagini fisse, come BMP, GIF e TIFF, memorizzano ciascun pixel come triade RGB. Le informazioni di ogni pixel sono date da una coordinata spaziale del tipo (numero, numero, numero) = (Red, Green, Blu) dove "numero" è un valore da 0 a 255 che è rappresentabile in binario con 8 bit (il più grande numero decimale rappresentabile con n bit si ottiene con la formula: 2n-1, ovvero 28-1 = 256-1 = 255). Questo significa che in formato colore RGB servono 24 bit per ogni pixel ovvero 3 bytes (1 byte = 8 bit). Per la cronaca nero = (0,0,0), bianco = (255,255,255); tutte le tonalità di grigio sono rappresentate da valori del tipo (x,x,x), ovvero terne dello stesso numero. Perciò un'immagine 720 x 576 occupa (stesso calcolo fatto in precedenza ma senza contare numero di frame/s): 720 x 576 x 24 = 9.953.280 bit = 1.19 MB circa Uno degli sprechi di questo modello rappresentativo è dovuto alle caratteristiche dell'occhio umano. Questo infatti, non è sensibile in maniera identica a tutti e tre i colori fondamentali ma in maniera decrescente al verde, al rosso ed infine al blu. Inoltre, la sua capacità di discernere i dettagli spaziali è accentuata nei verdi al centro dello spettro visibile, e decisamente inferiore nei blu. In parole un po' più semplici, l'occhio umano è più sensibile alle differenze di luminosità piuttosto che a quelle di colore; e nella pratica ciò si traduce nel fatto che siamo "più bravi" nel riconoscere la differenza tra due grigi, piuttosto che la differenza di sfumature cromatiche tra rossi, verdi o azzurri. 18 VIDEO DIGITALE giugno 2006 Risposta relativa dell'occhio alla soglia dei cambi di intensità a differenti frequenze angolari Tutti i punti sopra la curva rappresentano la condizione in cui l'occhio non è capace di rilevare alcun cambiamento di intensità, i punti al di sotto invece la condizione nella quale l'occhio percepisce le variazioni. L'intensità luminosa è chiamata luminanza, mentre la somma dei contributi cromatici delle radiazioni RGB è chiamata crominanza. La luminanza è, per intenderci, la grandezza che da sola caratterizza ogni punto dell'immagine in bianco e nero. Da quanto detto fino ad ora, si deduce dunque come sia inutile trasmettere tutti i dati relativi alla crominanza, visto che l'occhio ne vuole solo una parte. E' per questo motivo che è stato concepito lo standard di rappresentazione YUV. 1.5.2 YUV Anche in questo caso si tratta di una sigla, nella quale Y è la componente luminanza (la luminosità del pixel, ciò che nel linguaggio di tutti i giorni viene definito come "chiaro" o "scuro") mentre U e V sono le componenti di crominanza o componenti differenza: esse definiscono la quantità di colore. Spesso U viene indicato anche come Cb (componente differenza del blu), mentre V con Cr (componente differenza del rosso). L'obbiettivo che ci si è prefissati con la definizione dello standard YUV, è quello di rappresentare un gruppo di pixel con un numero inferiore di bytes rispetto alla corrispondente rappresentazione RGB. Esistono diversi tipi di YUV: • YUV 4:4:4 giugno 2006 VIDEO DIGITALE 19 • YUV 4:2:2 • YUV 4:2:0 • YUV 4:1:1 (utilizzato per la TV americana, NTSC) tutti riferiti a gruppi di 4 pixel. Per ogni pixel viene memorizzata la luminanza corrispondente, mentre si risparmiano bit sulle informazioni riguardanti il colore, descrivendo questo per gruppi e non per singoli pixel. 1.5.3 YUV 4:4:4 In questa rappresentazione non si effettua alcuna approssimazione, perciò non si ha nessun guadagno. E' per questo motivo che non viene utilizzata nella compressione. In pratica, per descrivere ciascun pixel si utilizzano 3 byte (24 bit) Pixel 1 Pixel 2 Pixel 3 Pixel 4 Y 1 byte 1 byte 1 byte 1 byte U 1 byte 1 byte 1 byte 1 byte V 1 byte 1 byte 1 byte 1 byte Perciò un'immagine 720 x 576 occupa: 720 x 576 x 24 = 9.953.280 bit = 1.19 MB proprio come se fosse rappresentata in RGB. E dunque 1 secondo di filmato occupa ,come già visto, ben 30 MB, una massa di dati difficilmente gestibile anche su macchine molto potenti, dal momento che richiederebbe un transfer rate di circa 248 Mbit/s. 1.5.4 YUV 4:2:2 Questa rappresentazione in ambiente Windows Direct Draw è conosciuta col nome YUY2. In essa vengono eliminate informazioni di colore, utilizzando otto byte per rappresentare un blocco (quadrato) di quattro pixel. Per ciascun pixel si memorizza per intero la luminanza, come sempre, 20 VIDEO DIGITALE giugno 2006 mentre per la crominanza si divide il gruppo in coppie, e a ciascuna coppia si assegna un byte per il colore U e uno per il colore V, facendo la media tra le componenti U e V dei singoli pixel (es. U = (U1+U2)/2) Pixel 1 Pixel 2 Pixel 3 Pixel 4 Y 1 byte 1 byte 1 byte 1 byte U V 1 byte 1 byte 1 byte 1 byte Dove U 1U 2 2 ecc. V 1V 2 2 ecc U 12= V 12= Ne segue che ogni pixel è descritto da: 1 + 0,5 + 0,5 = 2 byte = 16 bit quindi una immagine 720 x 576 occuperà: 720 x 576 x 16 = 0,79 MB 8 x 1024 x 1024 con un risparmio rispetto a RGB e YUV 4:4:4 del 33% Questo formato standard viene utilizzato per la digitalizzazione di video PAL, che non trarrebbe vantaggio dall'utilizzo del 4:4:4, poiché il PAL colore utilizza una banda video dimezzata rispetto al bianco/nero. 1.5.5 YUV 4:2:0 Questa rappresentazione, in ambito Windows Direct Draw va sotto il nome di YV12, ed è il formato utilizzato dalla maggior parte dei codec nella prima fase di compressione. In questo caso, giugno 2006 VIDEO DIGITALE 21 per descrivere un blocco di 4 pixel, si utilizzano 6 byte. Come sempre 4 per la luminosità (uno per pixel), mentre gli altri due vengono utilizzati uno per ciascun componente di crominanza U= U1U2U3U4 4 Pixel 1 Pixel 2 Pixel 3 Pixel 4 Y 1 byte 1 byte 1 byte 1 byte U V 1 byte 1 byte Pertanto ogni pixel è rappresentato da: 1 + 0,25 + 0,25 = 1,5 byte = 12 bit e un'immagine 720 x 576 occuperà 720 x 576 x 12 = 4.976.640 bit = 0,593 MB esattamente la metà di una stessa immagine in RGB o YUV 4:4:4. Risparmio netto del 50% dunque, e sensibile aumento della velocità di compressione. Utilizzare la modalità YV12 non presenta alcuno svantaggio soprattutto se si utilizzano codec lossy. Facendo un confronto tra due immagini codificate in RGB24 e in YV12 non si nota alcuna differenza, nemmeno all'ingrandimento. In fondo, se ci pensate, un quadrato di quattro pixel in un campo di 720 x 576 occupa solo lo 0,00096% del totale, quindi una porzione infinitesimale. RGB24 22 YUY2 VIDEO DIGITALE YV12 giugno 2006 Per contro, ci sono almeno due vantaggi. Uno, già accennato, è l'incremento di velocità, che si traduce in oltre 3 frames al secondo (varia a seconda dell'hardware), il secondo sta nel fatto che evitando la doppia conversione con la legge della televisione, si evitano pure i piccoli errori sui colori che essa genera. In conclusione, nella compressione video conviene usare lo spazio colore YV12. 1.5.6 Conversione RGB ↔ YUV Il passaggio dalla modalità RGB a quella YUV si può effettuare attraverso la "Legge Della Televisione", la cui formula è: CONVERSIONE RGB → YUV Y= U (Cb) = V (Cr) = 0.5635(B-Y) + 128 = 0.7133(R-Y) + 128 = 0.2990R + 0.5870G + 0.1140B -0.1684R - 0.3316G + 0.5B + 128 0.2R - 0.4187G - 0.0813B + 128 Basta una rapida occhiata per capire come esista un legame univoco tra le due rappresentazioni, la formula è infatti facilmente invertibile. Uno stesso colore può pertanto essere rappresentato indifferentemente in ciascuno dei due modi. E' sufficiente un byte (8 bit) per descrivere il singolo fattore (RGB o YUV) e dunque occorrono 3 x 8 = 24 bit per descrivere ciascun pixel col proprio colore, sia che lo si rappresenti in modalità RGB che YUV. Dunque per effettuare una trasformazione da RGB a YUV, bisogna applicare la legge della televisione. Naturalmente ciò va ripetuto per ogni pixel dell'immagine, il ché significa che il processore deve compiere per ciascun pixel ben sei addizioni, due operazioni di shift (divisione per 2) e due somme per 128. Ciò si traduce, per una immagine di 720 x 576 in un totale di: 10 x 720 x 576 = 4.147.200 operazioni e, per 1 secondo di filmato: giugno 2006 VIDEO DIGITALE 23 4.147.200 x 25 = 103.680.000 operazioni di cui: 62.208.000 addizioni 20.736.000 shift 20.736.000 somme per 128 Nei moderni processori, grazie alle istruzioni MMX ed SSE, questo non comporta un eccessivo impegno della CPU, tuttavia sottrae numerosi cicli di clock alla compressione, rallentandola. Ovviamente lo stesso discorso vale per la conversione da YUV a RGB. 24 VIDEO DIGITALE giugno 2006 2 LA COMPRESSIONE VIDEO Contrariamente a quanto verrebbe da pensare, comprimere un video non equivale a comprimere nello stesso modo ogni singolo fotogramma, trattandolo come se si comprimesse una qualsiasi immagine digitale, e poi rimetterli in sequenza. I progettisti dei codec MPEG, analizzando le caratteristiche tipiche di un flusso video, furono in grado di individuare delle "peculiarità" che potevano essere sfruttate ai fini della compressione. Così, quando si posero la fatidica domanda "come implementare un algoritmo di compressione video", individuarono diverse possibili vie da perseguire: ottimizzare il metodo di memorizzazione digitale dei dati relativi al video, sfruttare delle caratteristiche intrinseche al video stesso dovute alla sua struttura sequenziale, e, studiando accuratamente il sistema visivo umano, cercarono quelle caratteristiche che era possibile sfruttare ai fini della compressione stessa. L'elenco seguente riassume a grandi linee gli approcci che furono individuati ed utilizzati nella progettazione dell'encoder video MPEG-1, approcci che combinati tra loro avrebbero consentito di sviluppare algoritmi di compressione così efficienti da ridurre ad esempio di 30 volte2 le dimensioni occupate da un file video senza apparente degrado qualitativo. A. Tecniche relative al modo di memorizzazione del video stesso, in combinazione con le caratteristiche del sistema visivo umano. E' possibile comprimere un video riducendo la precisione con cui vengono memorizzate le informazioni: un esempio tipico di questo tipo di compressione, nel caso di un flusso video digitale, è il passaggio dallo spazio colore RGB a quello YUV. B. Tecniche che sfruttano alcune caratteristiche intrinseche al video stesso. E' possibile comprimere un segnale video rimuovendo la ridondanza (ripetitività) statistica contenuta in un video e mantenendo solo le nuove informazioni, ovvero quelle effettivamente utili; si cerca cioè una rappresentazione "meno correlata" delle immagini, correlata nel senso delle similitudini all'interno dello stesso fotogramma e tra fotogrammi adiacenti, eliminando quindi nel possibile tutte le ripetizioni. Quindi, dato che è statisticamente provato che pixel adiacenti (e vicini) all'interno di una 2 L'MPEG-2, che è tuttora lo standard di compressione più importante del mondo, e che è stato il successore dell'MPEG-1, riduce di 30 volte lo spazio richiesto per la memorizzazione di un video non compresso. giugno 2006 LA COMPRESSIONE VIDEO 25 stessa immagine presentano caratteristiche molto simili per quel che riguarda il colore e la luminosità (cosa del resto piuttosto intuitiva: se considero una porzione azzurra di cielo, con buona probabilità i pixel vicini avranno lo stesso colore), venne ideata la codifica intra-frames che si occupò per l'appunto di rimuovere questa ripetitività o ridondanza spaziale all'interno dello stesso fotogramma. Inoltre esiste una netta correlazione non solo tra i pixel dello stesso fotogramma, ma anche tra i pixel di fotogrammi adiacenti. Infatti, dato che in ogni secondo si susseguono 25 fotogrammi (PAL), è logico aspettarsi che un fotogramma ed i due a lui vicini (il successivo ed il precedente) spesso risultano pressoché identici (fanno eccezione le situazioni in cui si hanno cambi di scena); questa correlazione o ridondanza temporale venne trattata con l'implementazione della codifica inter-frames. C. Tecniche che sfruttano intensivamente le caratteristiche del sistema visivo umano. Studiando la percezione che l'occhio e il cervello umano hanno della realtà ed in particolare del movimento, ci si è resi conto della scarsa sensibilità del sistema visivo umano nei riguardi delle cosiddette alte frequenze video. Il concetto di frequenza nel video è associato alla "complessità" di una scena. Le basse frequenze corrispondono ai colori uniformi (un cielo sereno senza nubi, il colore di una automobile) mentre le alte frequenze corrispondono alle immagini frastagliate tipo le foglie di un albero visto da lontano, i quadretti minuti di una giacca, o i caratteri della pagina di un giornale. E' possibile "tagliare", buttar via, alcune delle informazioni sulle alte frequenze di un'immagine senza per questo portare ad un visibile deterioramento dell'immagine stessa. Per come è strutturato, il sistema visivo umano non è in grado di percepire le variazioni nei dettagli di figure molto frastagliate; è molto difficile rendersi conto di una perdita di dettaglio nelle fronde di alcuni alberi in movimento; è molto più semplice invece notare anche la più piccola variazione di colore o luminosità nell'azzurro di un cielo limpido e sereno sullo sfondo di un video. Ci sono due schemi di base di compressione lossy: • Nei transform codecs vengono presi dei campioni di immagine o di suono, spezzettati in piccoli segmenti, trasformati in un nuovo spazio di base e quantizzati. I valori risultanti sono poi codificati ricorsivamente. • Nei predictive codecs i dati precedenti e/o successivi già decodificati sono usati per prevedere il corrente campione di suono o frame video. L'errore tra il dato previsto e il dato reale, insieme ad ogni altra informazione extra necessaria per riprodurre la previsione, è poi quantizzata e codificata. 26 LA COMPRESSIONE VIDEO giugno 2006 In alcuni sistemi le due tecniche sono combinate, con i codec di trasformazione che vengono usati per comprimere i segnali errati generati dallo stadio di previsione. 2.1 Tipi di frames Anzitutto è necessario pensare ad un video come ad una serie di immagini (fotogrammi) che si susseguono in rapida sequenza. Quindi quando si comprime un flusso video si stanno sostanzialmente comprimendo delle immagini, ma non solo: si stanno comprimendo immagini in sequenza. E' possibile farsi un'idea su come viene trattato un flusso video, osservando la figura seguente: Ogni immagine viene scomposta in singoli blocchetti ed ogni blocchetto è trattato singolarmente. Il singolo fotogramma è formato da gruppi di blocchi ed i fotogrammi sono a loro volta impacchettati in gruppi di fotogrammi. La codifica intra-frames e quella inter-frames non sono altro che metodi diversi con cui vengono trattati (compressi) i singoli fotogrammi. In pratica prima della compressione una sequenza video non compressa è qualcosa del tipo FFFFFFFFFFFFF..., mentre giugno 2006 LA COMPRESSIONE VIDEO 27 dopo la compressione conterrà una sequenza di fotogrammi del tipo IPBBBPBBBPIBBBP..., dove con I ho indicato un intra-frame mentre P e B descrivono due differenti tipi di fotogrammi di tipo inter-frame. Vediamoli più in dettaglio. 2.1.1 Gli intra-frames I fotogrammi di tipo I, chiamati anche I-frames o Key-Frames (fotogrammi chiave), sono fotogrammi che vengono codificati utilizzando le informazioni contenute nel fotogramma stesso e non contengono nessun riferimento od informazione sui fotogrammi adiacenti. In pratica sono compressi alla stregua di un'immagine singola, allo stesso modo di quando un'immagine viene salvata in formato JPEG. Intervengono solo tecniche di rimozione di ridondanza spaziale (similitudine tra pixel adiacenti), mentre non viene applicato nessun algoritmo di compressione temporale (ovvero compressione che tiene conto anche dei fotogrammi successivi e/o precedenti). Sebbene con un'immagine compressa in formato JPEG di buona qualità si possa ottenere un rapporto di compressione anche di 20:1, siamo ancora lontani dal valore del rapporto di compressione cercato per il video; prima si parlava di qualcosa tipo 30:1 per un video MPEG-2, mentre per un video in MPEG-4, il rapporto può scendere anche a valori di 50-60:1. Gli I-Frames sono inseriti generalmente dall'encoder video ogni qualvolta vi sia un cosiddetto cambio di scena, ovvero in tutti quei casi nei quali manchi una corrispondenza temporale tra fotogrammi adiacenti. Quando ad esempio un fotogramma è completamente diverso dal precedente, l'encoder probabilmente codificherà tale immagine come fotogramma di tipo I o chiave. Se inoltre viene specificato un intervallo massimo tra un fotogramma chiave ed il successivo il codec dovrà necessariamente inserire un fotogramma chiave anche se non strettamente necessario. Questo risulta utile in quanto quando ci si sposta all'interno di un file video mentre lo si sta guardando, alla ricerca di una particolare scena, è possibile solo spostarsi tra un fotogramma chiave ed il successivo. Fotogrammi chiave troppo distanziati renderebbero la ricerca piuttosto complicata ed è per questo che in genere si utilizza un valore massimo per la distanza tra un key-frame ed il successivo corrispondente a circa 10-12 secondi di video (250, 300 fotogrammi nel caso del sistema PAL). 2.1.2 I Delta-Frames od Inter-Frames Chiamati anche P-frames: si usa una codifica di tipo P (Predicted frames) per quei fotogrammi che vengono codificati utilizzando informazioni acquisite dal fotogramma precedente, sia questo di tipo I o di tipo P. Ogni blocco di 16 x 16 pixel in cui viene suddiviso il singolo fotogramma, con la 28 LA COMPRESSIONE VIDEO giugno 2006 codifica di tipo P può essere compresso in modo indipendente (come nel caso dell'I-Frame) oppure può essere compensato e bilanciato utilizzando informazioni del fotogramma precedente. Utilizzando le somiglianze tra fotogrammi successivi i fotogrammi P risultano essere più piccoli dei corrispondenti I-Frames. Spesso in una sequenza video, un gruppo o serie di fotogrammi risultano tra loro molto simili. Considerate ad esempio il caso limite del conduttore di un telegiornale che parla seduto alla scrivania. Per la gran parte del tempo, lo sfondo rimarrà praticamente invariato. Prendendo in considerazione che per ogni secondo di video si susseguono 25 fotogrammi, risulterebbe molto più utile poter memorizzare non i singoli fotogrammi in modo indipendente, quanto piuttosto memorizzare e quindi successivamente comprimere esclusivamente le minime differenze tra di loro. A questo scopo vengono utilizzati i fotogrammi di tipo P, che consentono di eliminare le informazioni ridondanti e ripetitive: un fotogramma di tipo P contiene le informazioni della posizione (X',Y') nel fotogramma corrente in cui si è spostato un blocco che aveva coordinate (X,Y) in quello precedente (Motion Estimation / Compensation). Ripeto, in tal modo, al posto di mantenere l'informazione spaziale (tipo JPEG) del singolo fotogramma, vengono memorizzate le sole informazioni sulla variazione di posizione (ad ogni blocco viene associato il suo vettore di moto che consente di ricostruire l'immagine originale), informazioni che a conti fatti richiedono molti meno bit rispetto alla memorizzazione dell'immagine completa. Lo svantaggio dell'utilizzo di questo tipo di fotogrammi si ha in fase di decodifica; è infatti necessario "ricostruire" ciascun fotogramma P prima di poterlo visualizzare, e per far questo si deve sempre partire dal fotogramma P seguente all'ultimo fotogramma chiave; ovvero per visualizzare ad esempio il quarto fotogramma P di una sequenza tipo IPPPPPPP è necessario comunque ricostruire anche i 3 fotogrammi P precedenti. Un discorso piuttosto approfondito meritano l'altro tipo di inter-frames, ovvero i fotogrammi di tipo B (bi-directional) che introducono la codifica bi-direzionale. 2.1.3 B-frames / Bi-directional encoding: Per i fotogrammi di tipo B la ricerca del moto (Motion Estimation / Compensation) è effettuata non solo sul fotogramma precedente (come nel caso di P-Frames) ma anche sul fotogramma successivo. La codifica ed anche la decodifica risultano quindi decisamente più complesse. Sostanzialmente i fotogrammi B sono di tipo "bi-direzionale", nel senso che fanno riferimento sia a ciò che li precede, sia a quello che segue. Inserire in un fotogramma informazioni che si riferiscono ad un fotogramma successivo è possibile solo alterando l'ordine in cui i fotogrammi vengono archiviati all'interno del giugno 2006 LA COMPRESSIONE VIDEO 29 file video compresso. Questo è effettivamente quello che fa l'encoder (e di cui tiene conto il decoder in fase di decodifica). Facciamo un esempio. Supponiamo di avere 4 fotogrammi da comprimere. Il primo di questi sarà necessariamente un fotogramma chiave (I-Frame), mentre vogliamo che i successivi due siano B-Frames (che generalmente hanno una dimensione di 1/4 del P-Frame corrispondente); l'ultimo deve essere necessariamente un P-frame, in quanto i fotogrammi B necessitano dopo di loro di qualcosa da cui essere derivati. In sequenza avremmo: n° fotogramma tipo di fotogramma: 1 I 2 B 3 B 4 P tuttavia i fotogrammi verranno archiviati all'interno del filmato in questo modo: n° fotogramma tipo di fotogramma: 1 I 4 P 2 B 3 B Dopo aver codificato l'I-Frame, l'encoder salta avanti di due fotogrammi e codifica quello che è destinato ad essere il fotogramma P (ovvero il quarto) e lo codifica come se seguisse immediatamente l'I-frame: n° fotogramma tipo di fotogramma: 1 I 4 P Questo processo genererà un P-frame di dimensioni superiori a quello che si avrebbe codificando come P-frame il 2° fotogramma, in quanto generalmente vi saranno più cambiamenti (ovvero differenze) tra il 1° fotogramma ed il 4° che non tra il 1° ed il 2°. Tuttavia, l'utilizzo dei due Bframe porterà complessivamente ad una riduzione del numero di informazioni (dimensioni) necessarie alla codifica (come ho già detto un B-frame occupa 1/4 delle dimensioni di un P-frame). Ora abbiamo un fotogramma I ed uno P compressi. Fatto questo, l'encoder ritorna al 2° fotogramma (che è destinato ad essere il nostro primo B-Frame) e facendo riferimento sia al fotogramma I che a quello P per la stima e ricerca del movimento, analizza le eventuali somiglianze e procede alla codifica del B-Frame: n° fotogramma tipo di fotogramma: 1 I 4 P 2 B L'encoder prende quindi il 3° fotogramma e confrontandolo sempre con l'I-frame ed il P-frame 30 LA COMPRESSIONE VIDEO giugno 2006 iniziale genera il secondo B-frame: n° fotogramma tipo di fotogramma: 1 I 4 P 2 B 3 B I B-frame non possono comunque mai fare riferimento uno all'altro, ovvero è sempre necessario avere un I-frame e un P-frame tra più B-frames consecutivi. Questa procedura porta a complicare ulteriormente la fase di decodifica in quanto ora non solo è necessario rigenerare i fotogrammi in base alle informazioni codificate, ma i fotogrammi stessi risultano non essere più archiviati con il corretto ordine. Sintesi L'utilizzo di queste tecniche permette di ridurre la quantità di bit necessari per la codifica dell'informazione trasmettendo (codificando) le differenze tra fotogrammi, piuttosto che archiviando i fotogrammi stessi. Alla luce di quanto appena detto, credo sia doveroso anticipare quello che dovrebbe essere uno dei principali fattori da tenere in considerazione quando ci si accinge a comprimere un video. Sequenze video con scene in rapido movimento o con un'elevata dinamica sono molto più impegnative da codificare e richiedono un numero di bit (bitrate) più elevato: essendo maggiori le differenze tra i fotogrammi adiacenti, maggiori sono le informazioni che devono essere memorizzate e conservate. Al contrario, scene statiche con movimenti lenti o pochi cambi di scena, presentano minime differenze tra fotogrammi adiacenti, minime differenze che si traducono con un numero decisamente inferiore di informazioni da mantenere e trasmettere ovvero con un basso bitrate. 2.2 Conversione dello spazio di colore Spesso quando si comprime un file video viene applicata anche una trasformazione del suo spazio colore, ovvero come abbiamo visto, il modo in cui vengono memorizzate le informazioni del video stesso. E' prassi trasformare un filmato RGB24 o RGB32 in YV12 prima della compressione vera e propria poichè nel formato YV12 c'è un notevole guadagno di spazio senza compromettere sensibilmente la qualità. Si ha comunque una prima perdita totale di informazioni, in quanto si passa da 24 o 32 bit per pixel (bpp) del formato RGB ai soli 12 bpp del formato YV12; si ha in pratica un dimezzamento delle dimensioni del video, con perdita irreversibile di informazioni ma giugno 2006 LA COMPRESSIONE VIDEO 31 degrado qualitativo praticamente nullo (non percettibile), data la ridotta sensibilità alle variazioni di colore del sistema visivo umano. 2.3 Blocking L'immagine originale viene suddivisa in macro-blocchi di 16 x 16 pixel; di qui la necessità che il video da comprimere sia un multiplo di 16 nelle dimensioni verticali ed orizzontali (altezza e larghezza). Alcuni codec consentono di comprimere flussi video con risoluzioni anche multiple di 8 , di 4 e probabilmente di 2, tuttavia in queste situazioni la suddivisione in macro-blocchi non è ottimizzata, e potrebbero richiedere un bitrate più elevato od addirittura presentare degli artefatti video durante la decompressione, a causa di una Motion Estimation effettuata su macro-blocchi non standard. Immagine originale blocking Nello spazio di colore YV12 all’interno di ciascun macro-blocco 16 x 16, si possono distinguere 4 blocchi di 8 x 8 pixel per quel che riguarda la luminosità ed 1 solo blocco di 8 x 8 valori (ogni valore rappresenta 4 pixel) per ogni componente del colore Cb e Cr (dato che la risoluzione per il colore viene dimezzata), per un totale 6 blocchi di 8 x 8 pixel. L'encoder a questo punto decide quali fotogrammi devono essere trattati come I-Frames e quali invece saranno trattati come P o Bframes. Sugli I-Frames viene direttamente applicata la DCT (vengono compressi come vere e proprie immagini in formato JPEG), mentre sugli altri fotogrammi vengono effettuate delle procedure di modellizzazione del moto. 32 LA COMPRESSIONE VIDEO giugno 2006 Y, Luminanza: risoluzione invariata, 16x16 pixels, ovvero 4 blocchi di 8x8 Cr, Crominanza Rosso: Ingrandimento di uno dei macroblocchi 16x16 in cui è stata suddivisa l'immagine e simulazione (nel senso che le componenti Cb e Cr non corrispondono alla realtà) della decomposizione del macroblocco selezionato nelle componenti dello spazio di colore YV12 risoluzione dimezzata, il macroblocco 16x16 è approssimato con un blocco di 8x8 pixel Cb, Crominanza Blu: risoluzione dimezzata, il macroblocco 16x16 è approssimato con un blocco di 8x8 pixel 2.4 Modellizzazione del moto La procedura è piuttosto complessa ed è difficile sintetizzare il tutto in poche righe. Tenterò di illustrare solo i concetti di base in modo tale da farsi per lo meno un'idea generale. Ripeto: le cose in realtà non sono così semplici ma un'analisi dettagliata di come funziona una compressione video non è l'oggetto di questa tesi. In questa fase viene sfruttata la ridondanza temporale dei fotogrammi del video e vengono quindi costruiti i P-frames ed i B-frames. Come? Con due procedure: 2.4.1 Motion Estimation (ME) per ciascun macro-blocco 16 x 16 o blocco 8 x 8 (a seconda della precisione sulla ricerca del moto, la ricerca viene effettuata sui macro-blocchi 16 x 16 o sui blocchi 8 x 8; di seguito utilizzerò sempre il termine blocco, restando sottinteso che potrebbe anche trattarsi di un macro-blocco) viene giugno 2006 LA COMPRESSIONE VIDEO 33 effettuata una stima del movimento. In pratica l'encoder tenta di individuare tra i fotogrammi adiacenti (nel solo fotogramma precedente per i P-Frames, nel precedente e nel successivo per i BFrames) il blocco più simile (se non uguale). Dopodiché viene associato al blocco su cui è stata effettuata l'analisi un vettore di moto, cioè una coppia di numeri tipo (x,y) = (-1,4) che individuano sul piano ipotetico rappresentato dal fotogramma, il vettore di spostamento, sostanzialmente una freccia che mi indica direzione, verso e entità dello spostamento del blocco passando dal fotogramma 1 al fotogramma 2. Tale vettore deve essere necessariamente associato ad ogni blocco su cui viene effettuata la ME, e viene utilizzato in fase di decodifica per ricostruire l'immagine originale. Si noti inoltre che la ricerca per il blocco di riferimento viene generalmente effettuata in un intorno limitato del blocco di partenza (area in grigio nella figura in basso) in quanto se la ricerca fosse effettuata su tutto il fotogramma, i tempi per la codifica potrebbero allungarsi in modo non accettabile; l'efficenza del metodo è assicurata dal principio della ridondanza spaziale: la probabilità di trovare un blocco simile man mano che ci si allontana dal blocco di partenza, diminuisce in modo esponenziale con l'aumentare della distanza. 2.4.2 Motion Compensation (MC) viene creato il blocco differenza, in pratica viene sostituito il blocco originale su cui è stata effettuata la ricerca, con il risultato che si ottiene sottraendo dal blocco molto simile trovato nel fotogramma 1 (reference frame) il blocco in questione nel fotogramma 2. Se tutto ha funzionato a dovere, ovvero l'encoder non ha commesso errori nella ricerca del blocco di riferimento (nel fotogramma 1), si ottiene un netto vantaggio consistente nel fatto che il nuovo blocco "differenza" sarà costituito da un numero decisamente inferiore di dati (nella matrice del blocco saranno presenti molti zeri (colore nero). Le uniche informazioni aggiuntive da considerare saranno quelle relative al vettore di moto (una coppia di numeri). 34 LA COMPRESSIONE VIDEO giugno 2006 Esempio Osservate le seguenti immagini: si tratta di una sequenza video di un'auto che si sposta da sinistra a destra. A sinistra abbiamo il fotogramma A, a destra il fotogramma successivo B: Fotogramma A Fotogramma B (successivo) Il fotogramma seguente mostra la differenza tra le due immagini, differenza calcolata pixel a pixel senza l'utilizzo di nessuna tecnica di compensazione del moto; è in bianco e nero, in quanto si tratta della differenza sulla sola componente della luminanza (Y). giugno 2006 LA COMPRESSIONE VIDEO 35 L'immagine differenza tra i due fotogrammi A e B, senza Motion Compensation Osservate ora le due immagini seguenti: l'immagine di sinistra mostra il fotogramma A con tracciati i vettori di moto; ogni vettore (linea) è centrato sul relativo macro-blocco, ed indica la direzione in cui si sposterà tale macro-blocco nel fotogramma B successivo. La direzione del vettore è stata precedentemente calcolata mediante il procedimento di motion estimation. L'immagine di destra è il risultato della differenza tra i due fotogrammi A e B, utilizzando, al posto del fotogramma A, il fotogramma A su cui è stata effettuata la stima di moto. Quello che è importante osservare è che l'immagine di destra contiene un numero di dettagli (informazioni) notevolmente inferiore rispetto all'immagine qui sopra mostrata (ottenuta dalla differenza senza ME) e richiede quindi un numero inferiore di bit per essere codificata. Fotogramma A con tracciati i vettori di moto 36 L'immagine differenza tra i due fotogrammi A e B, con Motion Compensation LA COMPRESSIONE VIDEO giugno 2006 2.5 DCT, Discrete Cosine Transform Torniamo ai macro-blocchi di 16 x 16 pixel, che, per la conversione nel formato colore YUV 4:2:0 (YV12), corrispondono a 6 blocchi di 8 x 8 pixel, numeri o coefficienti che dir si voglia (4 per la luminosità e 2 per il colore). Ognuno di questi blocchi 8 x 8 può essere descritto da una matrice di 8 x 8 valori numerici, ovvero un quadrato di 64 numeri da 0 a 255, che, a seconda del blocco in questione, descrivono luminosità (Y) di ciascun pixel o colore (Cb e Cr) di ciascun gruppo di 4 (2 x 2) pixel. Generalmente queste singole matrici risultano composte tutte da valori non nulli (a meno che non si tratti di immagini totalmente nere). Una funzione matematica, la DCT (Discrete Cosine Transform), viene applicata alle singole matrici 8x8; questa funzione trasforma le matrici dei valori Y, Cb e Cr, nelle matrici 8x8 contenenti i valori delle frequenze video. Ovvero si ottengono nuovi quadrati 8 x 8 sempre di 64 numeri, con la differenza che ora i singoli coefficienti non rappresentano più, ad esempio, la luminosità dei 64 pixel del nostro blocchetto, ma la distribuzione delle frequenze video. Ogni coefficiente rappresenta una determinata frequenza video: le basse frequenze (colori uniformi) sono rappresentate dai coefficienti in alto a sx della matrice, le alte frequenze (colori frastagliati) nell'angolo in basso a dx. Generalmente, ad una risoluzione di 8 x 8 pixel, si ha una certa uniformità nella distribuzione del colore, ovvero pixel adiacenti risultano piuttosto simili se non addirittura uguali. Per questo motivo, nella grande maggioranza dei casi la matrice dei coefficienti DCT avrà valori significativi (diversi da 0) concentrati nell'angolo in alto a sinistra, ovvero nel campo delle basse frequenza. In particolare il valore in posizione (1,1) (il primo coefficiente in alto a sinistra) descrive il valore medio di tutto il blocco 8 x 8 ed è il coefficiente più importante. L'operazione è del tutto reversibile; nessuna informazioni fin qui viene persa e dalla matrice 8 x 8 DCT è comunque possibile ritornare alla matrice originale 8 x 8 tramite l'operazione inversa iDCT (inverse DCT). Uno dei blocchi 8x8 dell'immagine originale giugno 2006 Rappresentazione grafica della matrice contenente i valori originali del blocchetto 8x8: i valori, nella maggior parte dei casi, sono piuttosto simili a causa della uniformità spaziale delle distribuzioni di colore delle immagini di 8x8 pixels LA COMPRESSIONE VIDEO Rappresentazione grafica della matrice dei coefficienti DCT: solo pochi coefficienti presentano valori significativi. L'energia è stata concentrata soprattuto nel campo delle basse frequenze. 37 2.6 Quantizzazione Fino a questo punto tutte le operazioni effettuate dall'encoder sono perfettamente reversibili; nessuna informazione è stata persa ed è possibile ritornare ai fotogrammi originali effettuando le operazioni nella direzione inversa. Per ottenere un ulteriore risparmio di bit, a questo punto non rimane che scartare alcune informazioni “poco significative”, poco importanti. Per quanto detto in precedenza, data la relativa insensibilità del nostro occhio alle alte frequenze video, potremmo scartare alcune delle informazioni relative alle alte frequenze senza per questo percepire un qualche degrado qualitativo. A tal fine, ogni coefficiente della matrice 8 x 8 DCT viene diviso per un numero intero (divisore) ed il resto della divisione viene scartato. Ovvero tutti i coefficienti più piccoli del divisore vengono approssimati a 0 e vengono scartati (perdita di informazioni). I 64 divisori con cui dividere ognuno dei 64 coefficienti della matrice 8 x 8 DCT si trovano nella matrice di quantizzazione (che è appunto una matrice di 8 x 8 = 64 numeri interi), matrice che è possibile scegliere in fase di codifica. Vengono utilizzate due differenti matrici di quantizzazione: una per gli Intra-Frames (I-Frames) ed una per gli Inter o Delta-Frames (P e B-Frames). Quello che avviene durante la fase di quantizzazione può essere intuito osservando le seguenti immagini (i pallini nelle singole celle rappresentano i coefficienti e, maggiore il diametro del pallino, maggiore è il coefficiente in valore assoluto; lo zero è rappresentato da una cella vuota. Si noti che i coefficienti DCT possono assumere anche valori negativi): Matrice dei coefficienti DCT(x,y) 38 Matrice di quantizzazione Q, Intra o Inter-Frames (Coefficienti Q(x,y)) LA COMPRESSIONE VIDEO Matrice dei coefficienti DCT(x,y) quantizzati giugno 2006 Il netto vantaggio è ora quello di avere una matrice DCT con un elevato numero di coefficienti nulli; in molti casi restano da 1 a 3 coefficienti diversi da zero, raggruppati nell'angolo superiore sinistro della matrice. Si noti come i coefficienti di quantizzazione per le alte frequenze (in basso a destra) siano nettamente superiori rispetto a quelli per le basse frequenze: il coefficiente DCT in alto a sinistra (quello più importante, che descrive il valore medio dell'intero blocco) dovrà essere approssimato (quantizzato) di meno, ed infatti risulta avere il minor coefficiente di quantizzazione. Durante la fase di decodifica, il decoder moltiplicherà ogni coefficiente DCT quantizzato per il rispettivo valore della matrice di quantizzazione, e ricostruirà la relativa matrice dei coefficienti DCT, che ovviamente non potrà essere equivalente all'originale, ma ne sarà una sua approssimazione; tuttavia, sebbene molti dei 64 coefficienti della matrice DCT originale siano stati "persi", se la compressione (quantizzazione) non è stata troppo elevata (ovvero coefficienti della matrice di quantizzazione troppo elevati) difficilmente si è in grado di notare la differenza tra l'immagine originale (non compressa) e quella (de)compressa, questo poiché le informazioni (quelle più importanti) dell'immagine originale sono state in gran parte concentrate in alcuni dei coefficienti DCT (quelli delle basse frequenze). Qui sotto è illustrato il procedimento che avviene in fase di decodifica; come si può notare la matrice dei coefficienti DCT non risulta uguale a quella di partenza: Matrice dei coefficienti DCT(x,y)Quantizzati giugno 2006 Durante la decodifica, moltiplicando la matrice quantizzata dei coefficienti DCT per la matrice di quantizzazione Q utilizzata dall'encoder, si ottiene una approssimazione della matrice dei coefficienti DCT originale di partenza. Tale matrice DCT "ricostruita" viene quindi utilizzata dal decoder per ricostruire l'immagine originale, tramite la trasformata inversa del coseno (iDCT). LA COMPRESSIONE VIDEO Matrice dei coefficienti DCT(x,y) "ricostruita" 39 2.7 Zig-Zag Scanning I coefficienti delle matrici DCT quantizzate vengono memorizzati e salvati in array (sono delle matrici lineari) con dei metodi detti Scansione a Zig-Zag (ma solo se il video è deinterlacciato, altrimenti il procedimento di scansione è diverso). Per le caratteristiche delle matrici DCT (tutti i coefficienti non nulli risultano per lo più concentrati nell’angolo in altro a sinistra nella matrice), i numeri diversi dallo 0 tendono ad essere raggruppati tutti assieme. Il risultato: una lunga sequenza di zeri, intervallata da alcuni coefficienti non nulli: 2.8 Run-Level encoding (RLE) e Variable-Lenght coding (VLC) Il procedimento fin qui descritto è servito per trasformare i dati in una forma trattabile da una serie di algoritmi matematici descritti generalmente come Entropy Encoding che, sfruttando la distribuzione casuale dei dati, tentano di rimuovere una certa ridondanza statistica naturalmente presente, ad esempio memorizzando i valori più comuni con dei codici brevi, mentre quelli meno comuni con dei codici più complessi. Tra le tecniche di questo tipo rientrano: • codifica Run-Lenght: utilizzata quando i dati presentano ripetizioni consecutive di alcuni simboli • codifica di Huffman: rappresenta simboli a probabilità di occorrenza decrescente mediante una codifica a lunghezza crescente • 40 codifica DPCM (Difference Pulse Code Modulation): rappresenta i simboli originali come LA COMPRESSIONE VIDEO giugno 2006 differenza tra il simbolo corrente ed una predizione dei simboli precedenti • codifica LZW: utilizza una tabella per rappresentare sequenze ricorrenti di simboli • codifica aritmetica: rappresenta gruppi di simboli, in base alla probabilità di ricorrenza degli stessi, mediante una rappresentazione in virgola mobile. Vediamo qui di seguito un esempio di applicazione della prima di queste tecniche (Run-Lenght). Al termine della procedura di scansione a Zig-Zag, ci troviamo in presenza di una sequenza di numeri del tipo: Sequenza originale: 90, 5, 10, 2, 10, 1, 0, 0, -2, -4, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, -2, ... Utilizzando la Run-Level encoding, sequenze consecutive di simboli identici vengono combinati assieme e vengono rappresentati da un singolo simbolo o codice. Ad esempio è possibile rappresentare la serie di numeri qui sopra rappresentata come una coppia di coefficienti (run, level) dove run = numero di zeri precedenti al valore level, con level corrispondente ad ogni valore diverso da zero che è presente nella nostra sequenza; utilizzando l'esempio di sopra, applicando una codifica Run-Level come quella descritta (in cui tutte le sequenze di 0 consecutive sono rappresentate con il numero degli zeri che precedono il coefficiente non nullo), si otterrebbe la sequenza seguente: Sequenza Run-Level: (0, 90)(0, 5)(0, 10)(0, 2)(0, 10)(0, 1)(2, -2)(0, -4)(0, 3)(4, 3)(5, 1)(0, -2) ... A questo punto è possibile applicare tecniche di compressione Entropy Encoding o VariableLenght Coding, dove le sequenze od i gruppi di dati che si presentano più frequentemente vengono rappresentati con un codice breve, mentre vengono assegnati codici più lunghi a quelle sequenze che si presentano piuttosto di rado. La conseguenza di questa nuova rappresentazione dei dati è che mediamente occorrono un numero inferiore di bit per la memorizzazione dello stesso simbolo rispetto a quando i dati si presentavano nella forma di partenza. Esempi tipici di algoritmi che vengono applicati nella codifica a codice a lunghezza variabile, sono il cosiddetto albero di Huffman (che porta ad un rapporto di compressione tipicamente 1.5:1), le codifiche aritmetiche e le giugno 2006 LA COMPRESSIONE VIDEO 41 codifiche sostituzionali come ad esempio l'algoritmo LZW usato nella compressione delle immagini GIF e che in una forma modificata, combinata con la codifica di Huffman, è presente nei famosi formati di compressione lossless gzip, pkzip e png. SINTESI Lo schema riassuntivo di una compressione video può essere il seguente: Il risultato della codifica video è un flusso di dati binari denominato Elementary Stream (ES): esso contiene tutta l'informazione necessaria a decodificare un segnale video. La figura seguente è una rappresentazione schematica dell'organizzazione dei dati presenti nello stream e può essere utilizzata per ricapitolare brevemente gli algoritmi e le funzioni precedentemente descritti. 42 LA COMPRESSIONE VIDEO giugno 2006 A livello superiore troviamo la Sequence. L'intestazione (Sequence header) contiene le informazioni di base, necessarie per iniziare la decodifica, quali le dimensioni delle picture, il formato dell'immagine (aspect ratio), la frequenza di quadro, le tabelle di quantizzazione. L'intestazione, data la sua importanza, è ripetuta periodicamente (ad esempio due volte al secondo). Raggruppati nella sequenza vi sono i Group Of Pictures. L'intestazione (GOP header) contiene le informazioni necessarie per la riproduzione temporalmente corretta del video (time code) e alcuni flag utilizzati nell'editing. Le picture costituiscono ciascun GOP. L'intestazione (picture header) contiene un riferimento temporale e l'indicazione del tipo di picture (I,P,B). La picture è costituita da slice. L'intestazione (slice header) è identificata, come le altre intestazioni, da un codice (start code) che non può essere duplicato all'interno del flusso. E' l'entità minima, all'interno del flusso elementare video, grazie alla quale è possibile ottenere la sincronizzazione e quindi la corretta decodifica. In genere una slice corrisponde ad un insieme di macro-blocchi pari a 16 righe video, ma in applicazioni in cui occorra una veloce e sicura sincronizzazione, è possibile avere più slice, al limite una slice in corrispondenza di ciascun macroblocco. L'intestazione del macro-blocco (macroblock header) contiene tutta l'informazione necessaria a decodificare correttamente la porzione di immagine, ovvero i 64 elementi di immagine che lo costituiscono: l'indirizzo spaziale all'interno dell'immagine, i vettori movimento, i modi di predizione e di trasformazione (field/frame), il fattore di quantizzazione. Seguono i coefficienti DCT codificati VLC (run+level) e le parole EOB (End Of Block) separano i quattro blocchi (block) di luminanza e i due di crominanza. OSSERVAZIONI Le tecniche descritte in questo capitolo sono quelle di base della compressione MPEG-2 ma valgono per qualsiasi codificatore. Ogni codec utilizza metodi diversi e approcci diversi, utilizzando anche tecniche non descritte in queste pagine. Un'analisi dettagliata del funzionamento di ogni codec testato sarebbe impossibile per almeno 2 buoni motivi: il primo è la complessità del funzionamento di ciascuno di essi e il fatto che un lavoro del genere andrebbe oltre gli scopi di questo documento; il secondo è che molti codec sono closed-source (come Real Media e Windows Media Video) e quindi il loro funzionamento è coperto da segreto industriale. Nel capitolo 3 sarà analizzato il funzionamento di H.264 che è lo standard open di maggiore interesse in quanto è quello adottato attualmente da molti sistemi e che rappresenta il presente e il futuro prossimo della codifica digitale. giugno 2006 LA COMPRESSIONE VIDEO 43 2.9 Bit-rate il bitrate (o bit-rate) è il metro di misura della velocità di un flusso video (lo dice la parola stessa, bit-rate = velocità dei bit), ovvero la quantità di bit che vengono trasmessi in ogni secondo. L'unità di misura del bitrate sono i bit al secondo (bps), o generalmente i kilobit per secondo (kbps) e tutti i loro multipli (megabit, gigabit, ecc...). Per codificare una singola immagine o fotogramma sono necessari un determinato numero di bit, e poiché nel caso di un flusso video si ha un determinato numero di fotogrammi ogni secondo, ecco che si passa dai bit (o Kilobit) al bitrate. L'immagine seguente aiuta a chiarire il concetto (si ricorda ancora che 25 frame/s vale per il sistema PAL): Ovviamente, più alto il bitrate, mantenendo costante il numero di fotogrammi che scorrono ogni secondo, più alta è la quantità di bit riservata ad ogni fotogramma. Più elevato è il numero di bit disponibili per ogni singolo fotogramma, maggiore sarà il numero di informazioni che possono essere memorizzate e maggiore sarà quindi la qualità del singolo fotogramma. 2.10 CBR e VBR Esistono fondamentalmente due metodi di codifica: la CBR (Constant Bit Rate, codifica a bit rate costante) e la VBR (Variable Bit Rate, codifica a bit rate variabile). La codifica CBR è il metodo meno ottimizzato: si fissa un bitrate e si comprime tutto il video utilizzando tale flusso costante. La scarsa ottimizzazione deriva dal fatto che fissato un bitrate, 44 LA COMPRESSIONE VIDEO giugno 2006 diciamo così, medio (per avere una idea 4000 Kbit/s per un video progressivo 720x576) nelle scene statiche tale bit rate è eccessivo (in certi casi bastano anche 2500-3000 Kbit/s), mentre nelle scene particolarmente dinamiche in cui per avere una buona qualità occorrono spesso anche più di 60007000 Kbit/s) si ottengono immagini piene di artefatti. L'alternativa sarebbe quella di mantenere fisso un bit rate ad esempio di 8000 Kbit/s garantendo sempre ottima qualità: lo svantaggio è la elevata occupazione di spazio. Il discorso è ben diverso se si utilizza il metodo VBR: in tal caso l'encoder utilizza un maggior bit rate nelle scene più dinamiche e al contrario minore bit rate nelle scene statiche, ottimizzando lo spazio occupato. La scelta del tipo di bit-rate è spesso lasciata all'utente, che può anche definire i valori di "picco" entro i quali può oscillare il bitrate, per meglio controllare le dimensioni finali del file. Valori per una codifica di buona qualità possono essere quelli riportati nella seguente tabella: Risoluzione 720*576 480*576 352*576 352*288 Bit rate di picco (Kbps) 6500 4500 3600 2400 Bit rate medio (Kbps) 4000-5000 2800-3600 2400-2600 1600-1750 Per certe applicazioni è conveniente utilizzare una codifica a qualità costante, per altre a bit-rate variabile: la codifica VBR è spesso adottata per il video memorizzato, ad esempio su supporto ottico (DVD). In altri casi invece è vincolata la velocità, ad esempio perché l'informazione deve essere trasferita su un canale a bitrate costante (streaming). 2.11 1-pass e n-pass Ovvero il numero di "passate" a cui è sottoposto un video per la compressione. Nella compressione a 1-pass viene analizzato il video originale e contemporaneamente si crea l'output del video compresso. Nella modalità a più passate (in genere 2) il primo passaggio serve per analizzare il filmato e creare un file di log con delle statistiche che verrà usato nelle passate successive per creare un video compresso ottimizzato. giugno 2006 LA COMPRESSIONE VIDEO 45 2.11.1 Modalità 1-pass La modalità a 1-pass si può fare genericamente in 3 modi diversi: 1-Pass – CBR Modalità ad un passaggio a bitrate costante: in questo caso ad ogni fotogramma viene assegnato lo stesso numero di bit, indipendentemente dalla sua complessità. In realtà è più un metodo a bitrate medio, in quanto il valore costante, più che essere rispettato sul singolo fotogramma, si tenta di rispettarlo in un determinato intervallo di fotogrammi (mediamente ai fotogrammi viene assegnato il bitrate selezionato). La quantità di bit, per la precisione di Kbps assegnati a ciascun fotogramma è selezionabile dall'utente. 1-Pass – quality: Modalità ad un passaggio cosiddetta a "qualità costante": il codec tenta di comprimere ogni fotogramma con la stessa qualità, indifferentemente dalla complessità o meno del fotogramma stesso. La differenza con la modalità "1-Pass - quantizer" dove il quantizer è fisso per ogni fotogramma e dove può assumere solo valori interi (es. 2, 3, 4...) , viene qui utilizzato un "quantizer medio costante" ovvero mediamente il quantizer rimane costate e può assumere anche valori non interi come ad es. 2,5, valori ottenuto facendo variare il quantizer tra 2 e 3 in fotogrammi successivi: il primo fotogramma viene ad esempio codificato con quantizer 2, il secondo con quantizer 3, il terzo con quantizer 2, il quarto con quantizer 3 e così via, in modo tale che mediamente il quantizer assume il valore 2,5. 1-Pass – quantizer Un altro metodo di compressione a "qualità costante": la differenza con modalità 1 Pass - quality è che ora ad ogni fotogramma viene assegnato lo stesso quantizer, ovvero viene compresso ogni fotogramma allo stesso identico modo (ricordo che il quantizer indica il livello di dettaglio che viene rimosso), mentre nel metodo sopracitato (1-Pass - quality), i quantizer non erano fissi ma piuttosto modulati, variati, a seconda del comportamento di altri parametri del codec onde garantire complessivamente un effetto "qualità costante". Con questo metodo invece i quantizer vengono bloccati ed in un certo senso può essere considerato effettivamente il vero metodo a qualità costante; i valori possono variare da 1 a n, ma non si consiglia mai di usare il valore 1 (la cui 46 LA COMPRESSIONE VIDEO giugno 2006 differenza con il valore 2 è minima e non giustifica l'aumento notevole di dimensioni nel file finale). Nel caso del codec x.264 per esempio il range consigliato è da 15 a 40 su una scala da 0 a 51. 2.11.2 Modalità a 2-pass La modalità di compressione in due passaggi richiede circa il doppio del tempo rispetto alle modalità ad una singola passata viste in precedenza, tuttavia è anche l'unico metodo di compressione che consente di impostare a priori la dimensione esatta del file video (con un margine di errore minimo) ed è anche quella che, a parità di bitrate, fornirà la qualità video migliore. Sebbene sia possibile prevedere anche con il metodo "1 Pass - CBR" la dimensione finale del nostro file (è sufficiente effettuare qualche piccolo conto), è altrettanto vero che la modalità CBR non consente una elevata precisione sulla dimensione finale senza contare che la qualità ottenibile, a parità di bitrate medio impiegato, risulta generalmente inferiore. Inoltre, dai test effettuati a basso bitrate, è risultato che molti codec nella modalità CBR producono un file dalle dimensioni completamente sballate, o comunque con una differenza notevole rispetto alla dimensione “teorica”. L'utilizzo del doppio passaggio sostanzialmente consente di risparmiare bit preziosi nelle scene video semplici da comprimere, per riservarli a quelle più complesse. Lo schema seguente illustra il funzionamento della modalità 2-Pass: L'utilizzo dei due passaggi è necessario in quanto il codec di compressione non può conoscere a priori quali e quante siano le scene più semplici e quali e quante quelle più complesse. Ecco quindi che risulta necessario effettuare una prima analisi del video, cosa che viene effettuata nel primo passaggio: il codec comprime il film con la massima qualità possibile (minima compressione) e genera un file contenente le statistiche di bitrate del file originale e le indicazioni dove posizionare i fotogrammi chiave, i P-frames ed i B-Frames. Durante il secondo passaggio viene poi generato il giugno 2006 LA COMPRESSIONE VIDEO 47 filmato finale sulla base di queste statistiche. SINTESI con il metodo di codifica a due passaggi è possibile mantenere sostanzialmente una qualità costante in tutto il video ottimizzando il sistema VBR, indipendentemente dalla complessità della sezione di video in esame. La differenza sostanziale rispetto ai metodi ad un solo passaggio (CBR e VBR), è che con i 2 passaggi si ottiene un video ancora più ottimizzato e dalle dimensioni e bitrate più corretti. Resta comunque ovvio che la qualità media ottenibile dipenderà dal bitrate scelto dall'utente e che al di sotto di determinati valori, per quanto si tenti di agire sui parametri di configurazione del codec, il bitrate sarà comunque troppo basso per garantire una buona qualità. 2.12 I difetti dei codec lossy I difetti causati dalla compressione lossy percettibili dai sensi umani sono conosciuti come artefatti (dall'inglese "artifacts"). Se il bitrate non è sufficientemente elevato e se non si è configurato propriamente l'encoder, si possono presentare alcuni difetti dovuti proprio al tipo di compressione e non magari ad un bug dell'encoder stesso. I più evidenti sono due e vengono generalmente indicati con il nome di "blocking-artifact" e "mosquito-noise". Un esempio di "blocking-artifacts" del video dovuta ad un bitrate non adeguato (troppo basso) 48 Un esempio di "mosquito-noise" attorno alle parole (indicato dalle frecce), anche qui causato da un bitrate inadeguato LA COMPRESSIONE VIDEO giugno 2006 Il "blocking-artifacts" o "blocchettizzazione" o "quadrettatura" che dir si voglia, è causato da una eccessiva compressione del fotogramma, e la conseguenza è che si vedono ad occhio nudo i blocchi in cui è stata suddivisa l'immagine ai fini della compressione prima dell'utilizzo della DCT. Il fenomeno è causato da una non perfetta corrispondenza tra i diversi blocchi a causa di un numero troppo elevato di informazioni che sono state "eliminate" al momento della quantizzazione della matrice delle frequenze DCT Il "mosquito-noise" detto anche "ringing" si presenta invece come un alone di disturbo, un rumore accanto agli oggetti che presentano un netto contrasto con lo sfondo. Le immagini qui sopra aiutano a chiarire i due concetti ed illustrano i due più tipici difetti causati da un compressione eccessiva basata sugli algoritmi Discrete Cosine Transform, ovvero da un bitrate non adeguato alla situazione. Si ricorda inoltre che la compressione di dati lossy soffre del fenomeno chiamato generation loss, ovvero la ripetizione del ciclo di compressione sugli stessi dati peggiora di molto la qualità rispetto al singolo ciclo. giugno 2006 LA COMPRESSIONE VIDEO 49 3 LO STANDARD MPEG-4 3.1 MPEG Innanzitutto una cosa importante da chiarire: MPEG non è un codec e nemmeno un formato. MPEG (da pronunciare "em-peg") è l'acronimo di "Moving Pictures Experts Group", ed è il soprannome attribuito all' ISO/IEC JTC1 SC29 WG11, dove: ISO: International Organization for Standardization IEC: International Electrotechnical Committee JTC1: Joint Technical Commitee 1 SC29: Sub-committee 29 WG11: Working Group 11 MPEG è quindi un gruppo di lavoro internazionale che stabilisce degli standard. Fondato dall'Ing. Leonardo Chiariglione del CSELT (Centro Studi e Laboratori di Telecomunicazioni), lavora allo studio di sistemi di compressione per immagini in movimento con audio associato. La metodologia adottata suddivide il lavoro in tre fasi, che riguardano i Requisiti, la Competitività e la Convergenza. Requisiti: La precisa definizione dei requisiti è di estrema importanza nella ricerca degli obiettivi che si vogliono raggiungere, e costituisce il primo passo del lavoro. Competitività: Nello sviluppo di uno standard internazionale, è importante che la vita dello standard stesso sia la 50 LO STANDARD MPEG-4 giugno 2006 più lunga possibile. Ciò significa che la tecnologia utilizzata dev'essere lo stato dell'arte, e che le competenze della ricerca accademica e industriale devono essere fuse in un unico obiettivo comune. In questa fase, l'MPEG lavora in concerto con le industrie che si dimostrano interessate allo standard, valutando le differenti proposte presentate. Convergenza: In questa fase finale le proposte considerate valide e promettenti vengono integrate in un'unica soluzione, rifinita mediante passi successivi attraverso programmi di simulazione, software e sperimentazioni. MPEG è nato nel 1988 e da allora ha prodotto diverse versioni dello standard. • MPEG-1: Utilizzato nei Video CD è un formato a bassa qualità (analoga al sistema VHS). Definito a livello di standard nel 1992, questo formato è stato progettato per la codifica di immagini in movimento e per l'audio ad esse associato con bitrate fino a circa 1,15 Mbit/s per il video e dai 384 ai 192 Kbit/s per l'audio. • MPEG-2 E' stato sviluppato a partire dall'MPEG-1 ma progettato per una varietà più ampia di applicazioni. Esiste dal 1994. L'applicazione primaria è la trasmissione a qualità televisiva CCIR 601 con un bitrate tra 3 e 10 Mbit/s, ma è efficiente anche per applicazioni con bitrate superiori come HDTV. E' utilizzato nelle trasmissioni satellitari digitali, nei DVD e nel digitale terrestre. La sua caratteristica principale è la scalabilità, cioè la possibilità di creare soluzioni di codifica e decodifica più o meno complesse in base al tipo di prodotto da realizzare. • MPEG-3 Inizialmente sviluppato per HDTV in seguito si è scoperto che l'MPEG-2 era sufficiente per HDTV e quindi questo nuovo standard venne abbandonato • MPEG-4 Sviluppato dal 1993 al 1998, è stato progettato per la codifica audiovisiva a bassissimo bitrate. Tale formato può essere considerato un'evoluzione dell'MPEG-2 nella gestione di immagini provenienti dalla televisione digitale, dalle applicazioni grafiche interattive, nella distribuzione e nell'accesso di multimedialità in rete. La principale caratteristica è la capacità di gestire la codifica di singoli oggetti: audio, video, sottotitoli sono considerati indipendenti. lo standard supporta anche caratteristiche specificate da terze parti come una particolare gestione dei Digital Rights Management o una gestione giugno 2006 LO STANDARD MPEG-4 51 interattiva dei contenuti. A livello qualitativo lo standard non offre miglioramenti evidenti come nel passaggio da MPEG-1 a MPEG-2, ma a livello di bitrate il risparmio è significativo. Per la codifica video è stabilito lo standard H.264. • MPEG-7 Un sistema formale per descrivere i contenuti multimediali • MPEG-21 Gruppo nato per sviluppare una piattaforma comune per le future applicazioni multimediali Quello che ci interessa maggiormente è l'MPEG-4 in quanto è lo standard che attualmente si sta affermando in quasi tutti i campi della codifica video digitale. Nonostante le sue specifiche siano ormai "vecchie" di 8 anni solo adesso, nel 2006, si stanno diffondendo sul mercato prodotti hardware e software che implementano questo standard. Nel corso degli anni sono state aggiunte ed elaborate delle altre parti ed alcune di queste sono tutt'ora in evoluzione. 3.2 MPEG-4 L'ing L. Chiariglione, così definisce le comunicazioni multimediali: "Comunicazione Multimediale" è la possibilità di comunicare informazione audio-video che 1. sia naturale, sintetica, o entrambe 2. sia in tempo reale e non 3. supporti differenti funzionalità a seconda delle esigenze dell'utente 4. fluisca da e verso differenti sorgenti simultaneamente 5. non richieda all'utente di preoccuparsi di specifici canali di comunicazione, ma usi una tecnologia che ne sia cosciente 6. dia all'utente la possibilità di interagire con differenti elementi di informazione 7. consenta di presentare all'utente i risultati della sua interazione con il contenuto in una maniera idonea alle sue necessità 52 LO STANDARD MPEG-4 giugno 2006 Nel Luglio del 1993, l'MPEG ha iniziato lo sviluppo dell'MPEG-4, che soddisferà i sette punti qui elencati; le specifiche MPEG-4 diventeranno Standard Internazionale nel Novembre del 1998, con codice ISO/IEC 14496 e titolo ``Coding of Audio-Visual Objects''. Il progetto è basato su tre idee fondamentali: Indipendenza dalla rete fisica: L'indipendenza dal livello fisico del paradigma OSI per le reti di telecomunicazione è stata adottata fin da MPEG-1, ed è confermata in MPEG-4. Ciò non significa che lo standard non possa trarre tutti i possibili vantaggi dalle peculiarità della rete utilizzata. Interattività: Il successo del World Wide Web, dovuto alla capacità che ha l'utente di interagire con il contenuto della rete Internet, ha spinto i progettisti dell'MPEG a dotare di simili funzionalità il nuovo standard (si pensi al nuovo Google Video o ai canali televisivi via web). Anche il video per i telefonini e le videoconferenze sono in MPEG-4. Codice on demand: Prima ancora che venissero ideati i Network Computer, era già stato dimostrato che un decodificatore programmabile, in grado di scaricare quando necessario gli opportuni algoritmi di decodifica, è una soluzione preferibile all'avere già tutto il codice in locale. L'MPEG-4 fa un largo uso del concetto di "oggetto audio-video" (AVO). Ogni sequenza MPEG risulta composta da più AVO, ognuno dei quali è costituito da informazioni sul contenuto dell'oggetto e da informazioni su come, quando e dove l'oggetto vada riprodotto. Il codificatore esegue un multiplexing, o "mux", ovvero mixaggio degli AVO, eventualmente su diversi canali logici, e li invia al decoder, dove avviene il de-multiplexing, o "demux", ovvero gli AVO vengono decompressi, composti in una sequenza audio-video, e infine mandati in output. All'utente si dà la possibilità di interagire con la composizione e la presentazione degli oggetti: le informazioni di interazione posso essere trattate localmente dal decodificatore, o trasmesse al codificatore. Ogni AVO può appartenere a una classe di oggetti già nota al decodificatore, oppure a una classe non nota. In quest'ultimo caso, il decodificatore deve essere in grado di richiedere e ricevere le definizioni delle nuove classi, possibilmente in parallelo agli altri dati, e quindi di provvedere alla decodifica dell'AVO. Il decoder, quindi, deve possedere una libreria di classi comprendente le classi standard, quelle eventualmente installate dall'utente, e quelle scaricate "al volo" dalla rete. In parole semplici, un MPEG-4 non è né un file video né un file audio ma una "scatola" che li contiene entrambi o uno solo dei due e contiene al suo interno molte altre informazioni. Questa è giugno 2006 LO STANDARD MPEG-4 53 una grossa differenza concettuale da altri tipi di formato come l'MPEG-2 in cui audio e video sono mixati all'origine in un solo file e non possono essere trattati separatamente. 3.2.1 Componenti dell'MPEG-4 Ecco la lista dei diversi sotto-standard divisi in Part (parti), quelli evidenziati sono di maggiore interesse per i nostri scopi: Part Tipo descrizione 1 Systems Descrive la sincronizzazione e il multiplexing di video e audio 2 Visual codec per dati visivi (video, still textures, synthetic images, ecc). Uno dei molti "profili" in Part 2 è l'Advanced Simple Profile (ASP) 3 Audio codec per la compressione di segnali audio 4 Conformance Descrive le procedure per testare la conformità delle altre part 5 Reference Software Fornisce software per mostrare e chiarire le altre part 6 Delivery Multimedia Integration Framework (DMIF) Interfaccia tra l'applicazione e il trasporto 7 Optimized Refernce Software Fornisce esempi di come fare al meglio le implementazioni (è in relazione con la part 5) 8 Carriage on IP networks Specifica un metodo per trasportare il contenuto MPEG-4 su reti IP 9 Reference Hardware Fornisce disegni hardware per mostrare come implementare le altre part 10 Advanced Video Coding (AVC) Codec per segnali video. E' tecnicamente identico allo standard ITU-T H.264 11 Scene description and Application engine (BIFS) Può essere usato per contenuto 3D o sottotitoli 12 ISO Base Media File Format Formato file per memorizzare contenuto multimediale 13 Intellectual Property Management and Protection (IPMP) Extension Gestisce i diritti d'autore 14 MPEG-4 File Format Il formato file designato come container, che è basato sulla part 12 15 AVC File Format 54 Per la memorizzazione di video AVC (basato dulla part 12) LO STANDARD MPEG-4 giugno 2006 Part Tipo descrizione 16 Animation Framework eXtension (AFX) Gestisce le animazioni 17 Timed Text subtitle format Gestisce i sottotitoli 18 Font Compression and Streaming Per i font Open 19 Synthesized Texture Stream (non ancora finito) 20 Lightweight Scene Representation (LASeR) (non ancora finito – allo stadio FCD in luglio 2005, ha raggiunto lo stadio CD in gennaio 2006) 21 MPEG-J Graphical (non ancora finito – allo stadio FCD in luglio 2005, ha Framework eXtension (GFX) raggiunto lo stadio CD in gennaio 2006) 22 Open Format Specification (OFFS) Una descrizione dettagliata Basato su OpenType (non ancora finito – allo stadio CD in luglio 2005) dell'MPEG-4 è disponibile sul sito ufficiale: http://www.chiariglione.org/mpeg/ 3.3 H.264/AVC La codifica delle informazioni video è oggetto di studio dei gruppi di normalizzazione ISO/IEC (MPEG, Motion Picture Expert Group) e ITU (VCEG, Video Coding Experts Group), il cui lavoro portò alla definizione della parte 2 di MPEG-2 e allo standard ITU-T H.262 nel 1995. L'ITU sviluppò indipendentemente l'H.263 e due estensioni (pubblicate sotto forma di annessi) denominate H.263+ e H.263++. Nel frattempo in MPEG si procedeva allo sviluppo della parte 2relativa alla codifica video dello standard MPEG-4, partendo come base da H.263. giugno 2006 LO STANDARD MPEG-4 55 Nel 2001 fu deciso, per evitare divergenze nello sviluppo ed i problemi di sincronizzazione fra i due organismi di standardizzazione, di stabilire un gruppo congiunto, il JVT (Joint Video Team) per portare a termine il lavoro di definizione di un unico sistema di codifica video. Nella riunione MPEG-4 del marzo 2003 a Pattaya venne approvato il nuovo sistema di codifica, AVC (Advanced Video Coding), come parte 10 dello standard MPEG-4 ISO/IEC 14496-10. In ambito ITU lo standard, inizialmente indicato provvisoriamente come H.26L, sarà pubblicato come ITU-T H.264. H.264 e MPEG-4 part 10 sono quindi tecnicamente identici 3.3.1 Algoritmi e profili Lo standard AVC, così come avviene nel caso di MPEG-1 e MPEG-2, non definisce un CODEC, bensì la sintassi del flusso dati (stream syntax) e il metodo di decodificarlo. Tabella 3.3.1a: Confronto tra le funzionalità di alcuni standard. Fonte: Wikipedia.org 56 LO STANDARD MPEG-4 giugno 2006 I tool, cioè gli algoritmi, adottati, non sono sostanzialmente diversi da quelli illustrati nel Capitolo 2: la maggiore efficienza di codifica è dovuta alla cura dei dettagli di ciascun elemento funzionale. La tabella nella pagina accanto illustra le differenze, a livello di algoritmi usati, tra i vari standard, tra cui MPEG-4 ASP e MPEG-4 AVC (sono due standard diversi, uno rispetta le specifiche della part-2, più datate, l'altro le specifiche della part-10, più recenti). Lo standard supporta la codifica del video nel formato 4:2:0, interlacciato o progressivo. Schema di codifica di H.264/AVC In MPEG-4 H.264/AVC sono previsti differenti profili, indirizzati ad applicazioni differenti: – Baseline Profile (BP): destinato ad applicazioni in cui si richieda un ridotto ritardo dovuto alla codifica/decodifica, ad esempio videotelefonia. – Main Profile (MP): per applicazioni diffusive o generiche, anche con video interlacciato. – Extended Profile (XP): per applicazioni mobili e streaming. – High Profile (HiP): per applicazioni broadcasting e di disc storage, in particolare per le applicazioni televisive HD (è il profilo adottato in HD-DVD e Blu-ray). – High 10 Profile (Hi10P): andando oltre le capacità dei prodotti consumer di oggi, questo profilo è superiore all'High Profile, aggiungendo il supporto fino a 10 bit per campione di precisione dell'immagine decodificata. – High 4:2:2 Profile (Hi422P): principalmente orientato alle applicazioni professionali che usano video interlacciato, si pone al di sopra dello standard Hi10P, aggiungendo il supporto per il formato di campionamento colori 4:2:2 oltre ai 10 bit già citati per Hi10P. Per ciascun elemento funzionale, nel seguito si descrivono brevemente i miglioramenti apportati in giugno 2006 LO STANDARD MPEG-4 57 AVC rispetto ad MPEG-2, che possono essere sintetizzati in: • applicazione della trasformata su blocchi più piccoli • miglioramenti relativi alla valutazione e alla compensazione del movimento • filtro di ricostruzione nel loop di decodifica per ridurre l'effetto di blocchettizzazione • miglioramento della codifica entropica. Sono definiti diversi livelli in AVC (che si trovano per esempio nei parametri di settaggio): Tabella 3.3.1b: Schema dei livelli per H.264/AVC Level Max video bit Max Max frame rate (VCL) per macroblocks size Baseline, per secondo (macroblocks) Extended e Main profile Max video Max video bit rate bit rate (VCL) per (VCL) per High 10 High Profile Profile Max video bit rate (VCL) per High 4:2:2 profile Esempi di risoluzioni / framerate 1 1485 99 64 kbit/s 80 kbit/s 192 kbit/s 256 kbit/s 128x96/30.9 176x144/15.0 1b 1485 99 128 kbit/s 160 kbit/s 384 kbit/s 512 kbit/s 128x96/30.9 176x144/15.0 1.1 3000 396 192 kbit/s 240 kbit/s 576 kbit/s 768 kbit/s 176x144/30.3 320x240/10.0 1.2 6000 396 384 kbit/s 480 kbit/s 1152 kbit/s 1536 kbit/s 176x144/60.6 320x240/20.0 352x288/15.2 1.3 11880 396 768 kbit/s 960 kbit/s 2304 kbit/s 3072 kbit/s 352x288/30.0 2 11880 396 2 Mbit/s 2.5 Mbit/s 6 Mbit/s 8 Mbit/s 352x288/30.0 2.1 19800 792 4 Mbit/s 5 Mbit/s 12 Mbit/s 16 Mbit/s 352x480/30.0 352x576/25.0 2.2 20250 1620 4 Mbit/s 5 Mbit/s 12 Mbit/s 16 Mbit/s 720x480/15.0 352x576/25.6 3 40500 1620 10 Mbit/s 12.5 Mbit/s 30 Mbit/s 40 Mbit/s 720x480/30.0 720x576/25.0 3.1 108000 3600 14 Mbit/s 17.5 Mbit/s 42 Mbit/s 56 Mbit/s 1280x720/30.0 720x576/66.7 3.2 216000 5120 20 Mbit/s 25 Mbit/s 60 Mbit/s 80 Mbit/s 1280x720/60.0 4 245760 8192 20 Mbit/s 25 Mbit/s 60 Mbit/s 80 Mbit/s 1920x1088/30.1 2048x1024/30.0 4.1 245760 8192 50 Mbit/s 62.5 Mbit/s 150 Mbit/s 200 Mbit/s 1920x1088/30.1 2048x1024/30.0 4.2 522240 8704 50 Mbit/s 62.5 Mbit/s 150 Mbit/s 200 Mbit/s 1920x1088/64.0 2048x1088/60.0 5 589824 22080 135 Mbit/s 168.75 Mbit/s 405 Mbit/s 540 Mbit/s 1920x1088/72.3 2560x1920/30.7 5.1 983040 36864 240 Mbit/s 960 Mbit/s 1920x1088/120 4096x2048/30.0 58 300 Mbit/s 720 Mbit/s LO STANDARD MPEG-4 giugno 2006 3.3.2 Macro-blocchi e slice I macro-blocchi sono anche in AVC costituiti da 16 x 16 elementi di immagine: 16 x 16 campioni (sample) di luminanza e 8 x 8 campioni per ciascuna componente di crominanza Cb e Cr. I blocchi (block) sono costituiti da 4 x 4 campioni (un quarto della dimensione adottata in MPEG-2). I macroblocchi sono organizzati in slice, un sottoinsieme di immagine decodificabile indipendentemente dalle altre. L'ordine di trasmissione dei macro-blocchi non è necessariamente quello originario nell'immagine, ma è indicato dal codificatore in una apposita mappa (Macroblock Allocation Map). Sono definiti 5 differenti tipi di slice. I primi tre, analogamente a quanto visto nel capitolo 2, sono I (intra), P (predictive) e B (bipredictive) e le predizioni sono ottenute a partire dalle picture precedentemente codificate. In AVC più picture possono essere utilizzate per le predizioni e pertanto codificatore e decodificatore memorizzano le picture utilizzate per le predizioni in una apposita memoria (multipicture buffer) e il controllo per la gestione del buffer è specificato nel flusso dati. Nelle applicazioni di streaming via internet spesso lo stesso video è codificato a differenti bitrate ed il decoder tenta di accedere al flusso a più elevato bitrate, che fornisce una più elevata qualità, ma se le condizioni del canale non lo permettono, commuta al flusso a bitrate più basso. Quando si utilizza MPEG-2 queste operazioni di commutazione possono essere effettuate a livello di GOP, in corrispondenza di una I-picture e ciò implica l'uso di GOP relativamente corti e lo sfruttamento non ottimale della ridondanza temporale dell'informazione video. In AVC sono stati pertanto definiti ulteriori due tipi di slice, denominati SI (Switching I) e SP (Switching P) che consentono un'efficiente commutazione fra flussi di dati a bitrate differente, senza rinunciare al massimo sfruttamento della ridondanza temporale. 3.3.3 Predizione e codifica intra Nella codifica intra è sfruttata la sola correlazione spaziale: per aumentare l'efficienza vengono codificate le differenze fra i campioni del macro-blocco e i campioni precedentemente codificati, tipicamente quelli posizionati sopra e a sinistra e sono definiti 9 modi distinti di predizione. Nel caso di aree piatte, con scarso dettaglio si può adottare la codifica intra sull'intera area 16 x 16 ed in tal caso sono definiti altri 4 modi di predizione per l'intero macro-blocco. giugno 2006 LO STANDARD MPEG-4 59 3.3.4 Predizione e codifica inter Nella codifica di tipo inter, come abbiamo visto nel capitolo 2, si parte da una predizione ottenuta, sfruttando la correlazione temporale, da uno o due quadri precedentemente codificati. La predizione può essere ottenuta mediante una stima ed una compensazione del movimento (motion compesated prediction). A differenza dagli standard precedenti, in H.264 la dimensione del blocco su cui si effettua la predizione può variare da 16 x 16 fino a 4 x 4. Questo metodo di partizionare i macroblock in sub-block è denominato tree structured motion compensation e in fase di codifica sono possibili molteplici scelte che hanno implicazioni differenti sul numero di bit necessario a codificare i vettori movimento e le differenze residue: in genere dimensioni elevate del blocco sono convenienti in aree piatte, mentre in aree ricche di dettagli si può trarre vantaggio dall'uso di aree ridotte. La precisione per i vettori movimento si incrementa da 1/2 elemento di immagine, utilizzato in MPEG-2, a 1/4 di elemento di immagine in AVC. Per ottenere questa precisione si utilizza un filtro digitale (6-tap FIR, Finite Impulse Response) che fornisce, a partire dalla somma pesata dei valori dei 6 campioni di luminanza adiacenti, i valori interpolati a 1/2 e una successiva interpolazione bilineare permette di ricavare i valori a 1/4. Nel caso della crominanza e di formato 4:2:0 la precisione è portata a 1/8, che corrisponde al valore 1/4 per la luminanza. Esiste una correlazione fra i vettori movimento delle sotto-partizioni adiacenti: essa è sfruttata calcolando un valore di predizione MVp dei vettori movimento relativi ad un macro-blocco. Il valore di MVp è calcolato sia in codifica che in decodifica sulla base della struttura in termini di sotto-partizioni che costituiscono il macro-block. In questo modo al decoder vengono inviati solo gli MVd, i valori delle differenze fra i vettori movimento e il valore predetto MVp. 3.3.5 Trasformata e quantizzazione Si utilizzano tre trasformate che dipendono dal tipo di dati che devono essere elaborati: – una trasformata 4 x 4 dei 16 coefficienti DC nel caso di macro-blocchi intra 16 x 16 – una trasformata 2 x 2 per i coefficienti DC delle crominanze di tutti i macro-blocchi – una trasformata 4 x 4 di tutti gli altri dati differenze. Il tipo di trasformata adottato è basato sulla DCT (Discrete Cosine Transform), ma sono state apportate delle modifiche affinché le operazioni richiedano somme e shifting effettuabili con 60 LO STANDARD MPEG-4 giugno 2006 numeri interi a 16 bit in modo da non avere perdita di precisione effettuando la trasformazione diretta seguita da quella inversa. Esistono 52 passi di quantizzazione, denominati QP e questa ampia gamma di valori permette al codificatore di raggiungere il miglior compromesso fra qualità e bitrate. 3.3.6 Filtro di ricostruzione L'effetto di blocchettizzazione è uno dei degradamenti caratteristici delle tecniche di compressione che operano su macro-blocchi di campioni video: è particolarmente visibile e fastidioso. AVC introduce un filtro apposito che è applicato prima della trasformata inversa sia nel codificatore, prima della ricostruzione delle immagini utilizzate per le predizioni, sia nel decodificatore. Si ottengono due principali vantaggi: una minore visibilità dei bordi dei blocchi e una migliore predizione inter con compensazione del movimento (nel caso di predizione intra i macroblocchi sono filtrati, ma la predizione è ottenuta dai macro-blocchi ricostruiti non filtrati). 3.3.7 Codifica VLC I simboli che rappresentano i parametri relativi ai modi di codifica e predizione, i vettori movimento e i coefficienti della trasformata vengono codificati con codici a lunghezza variabile. Lo standard specifica diversi tipi di codifica entropica: una codifica a lunghezza variabile (VLC, Variable Lenght Coding) basata su tabelle di assegnazione statiche oppure basate sul contesto CAVLC (Context Adaptive Variable Lenght Coding) e CABAC (Context Adaptive Binary Arithmetic Coding). Il CAVLC utilizza diverse tabelle VLC specificatamente ottimizzate per i vari elementi sintattici in base a quelli precedentemente trasmessi. A seguito della predizione, trasformazione e quantizzazione i valori relativi ai coefficienti sono molto spesso nulli o molto piccoli: la codifica a lunghezza variabile sfrutta le sequenze di zero (codifica run-level), l'elevata frequenza di valori +1 e -1, e la correlazione fra il numero di coefficienti non nulli di un blocco e quello nei blocchi adiacenti. Il CABAC, che è utilizzato nel Main Profile, sfrutta in modo ancora più efficiente la correlazione fra simboli perché utilizza la statistica dei simboli precedentemente codificati per stimare la probabilità condizionata, usata per selezionare uno fra i diversi modelli. giugno 2006 LO STANDARD MPEG-4 61 3.4 Incremento in qualità e in complessità Il sistema di codifica MPEG-2 video è stato definito nella prima metà degli anni '90 in base alle possibilità realizzative, in termini di complessità circuitale e quindi di costi, disponibili all'epoca. E' stato proprio il corretto compromesso fra qualità offerta e costi che ha consentito l'affermazione dello standard e il suo ampio campo di applicazione, soprattutto nell'ambito dei prodotti del mercato di massa. Nel 1994 gli ASIC (Application Specific Integrated Circuit) utilizzati per la progettazione del decoder erano caratterizzati da una densità di integrazione per microcircuito (chip) pari a 120 mila porte logiche (gate) con dimensioni del gate fra 0,5 a 1 μm. Dieci anni dopo si arriva a 25 milioni di gate con dimensione della porta inferiore a 0,1 μm. L'immediata conseguenza è che oggi è pensabile la realizzazione di uno standard che, come l'AVC, pur non traendo origine da cambiamenti sostanziali degli algoritmi, raffina l'uso dei tool di compressione al fine di sfruttare tutte le fonti di correlazioni spazio-temporali fra le informazioni video e di ridurre le distorsioni più visibili, in particolare l'effetto di blocchettizzazione. La tabella 3.4 riassume una valutazione dell'incremento in complessità e in efficienza previsto per AVC. Il decodificatore per il Main Profile di AVC, adatto per le applicazioni televisive, è fino a quattro volte più complesso di quello per il Main Profile di MPEG-2 e la complessità sale fino a otto volte nel caso del codificatore. Tabella 3.4: Complessità e miglioramenti di H.264/AVC rispetto a MPEG-2 Profilo Applicazioni previste Aumento della complessità stimata per il decodificatore Stima preliminare del miglioramento in efficienza Baseline Applicazioni a basso ritardo, videotelefono, mobile, ... Circa 2,5 volte Circa 1,5 volte eXtended Mobile, streaming, ... Circa 3,5 volte Circa 1,75 Main Distribuzione del segnale video interlacciato Circa 4 volte Circa 2 All'incremento in complessità corrisponde quello in termini di qualità percepita dell'immagine codecodificata. La possibilità di usare diverse dimensioni dei blocchi (da 16 x 16 fino a 4 x 4) e di aumentare la precisione dei vettori movimento a 1/4 di elemento di immagine è un contributo 62 LO STANDARD MPEG-4 giugno 2006 importante all'efficienza di codifica, a spese di un incremento delle possibilità di scelta da parte del codificatore (e quindi della sua complessità). Lo sfruttamento della correlazione fra i coefficienti appartenenti a macro-blocchi adiacenti consente un miglioramento significativo nel caso di ampie aree di immagine con caratteristiche simili (ad esempio l'erba nel campo di calcio), a spese di un incremento in complessità: debbono essere effettuati elaborazioni che coinvolgono più macroblocchi sia a livello di codificatore che di decodificatore. Un ulteriore incremento nell'efficienza è dato dal miglior sfruttamento della correlazione fra i dati: la codifica entropica (CAVLC e, nel Main Profile, CABAC) richiede più memoria per le tabelle, anche a livello di decodificatore. L'adozione del filtro di ricostruzione all'interno del loop di decodifica è molto importante per migliorare la qualità soggettiva: riduce infatti l'effetto blocchettizzazione, particolarmente fastidioso nel caso di codifica a basso bitrate oppure per immagini particolarmente critiche. MPEG-2 non è particolarmente efficiente nella codifica degli elementi di sintassi quali le intestazioni (di sequence, picture, slice) e ciò lo rende totalmente inadatto all'uso ai bitrate inferiori a 2 Mbit/s (come vedremo nei test). AVC è molto più efficiente anche in questo compito, rendendolo adatto anche ad applicazioni in cui non sono disponibili elevati bitrate, ad esempio streaming su web. In generale, si può sostenere che i miglioramenti oggettivi e soggettivi offerti da AVC rispetto a MPEG-2 siano soprattutto validi nel caso di elevati fattori di compressione ed uso a bassi bitrate e ovviamente dipendano dal contenuto delle immagini. Vediamo le differenze in termini pratici: per codificare 90 minuti di un DVD mantenendo la stessa qualità visiva l'H.264/AVC permette di risparmiare 3 volte lo spazio richiesto con MPEG-2 e quasi 2 volte quello richiesto con MPEG-4 ASP (part 2, non-AVC): giugno 2006 LO STANDARD MPEG-4 63 Così come è avvenuto nel caso di MPEG-2, è probabile che inizialmente non tutti i tool previsti dallo standard vengano utilizzati nel modo ottimale (per ragioni di complessità, e quindi costo e tempo di codifica) e che quindi i primi codificatori non offriranno il miglioramento desumibile dai test effettuati con codificatori che non operano in tempo reale. Le prestazioni dei codificatori miglioreranno nel tempo, comunque la qualità percepita dipende non solo dal bitrate disponibile, ma anche dalla criticità del materiale video da codificare e dalle condizioni di visualizzazione e da tecnologia, dimensioni e risoluzione degli schermi. 3.5 Applicazioni: L'elevata efficienza a bassi bitrate rende AVC adatto ad applicazioni di tipo mobile, normalmente caratterizzate da una limitata disponibilità di banda. Tra i dispositivi ideali ci sono telefoni cellulari, PDA (Personal Digital Assistant), PC palmari, fotocamere digitali e sistemi di archiviazione portatile come il famosissimo I-Pod di Apple. Ma H.264 si è rivelato ideale per molti altri tipi di applicazione. La distribuzione dell'informazione video per mezzo di connessioni a larga banda (xDSL e fibra ottica) fruibile in modalità streaming, download o video on demand mediante protocollo internet e utilizzando il PC o il terminale TV è un'applicazione attraente per le società di telecomunicazioni poiché le mette in grado di fornire contemporaneamente servizi di telefonia, dati e TV (tipo Fastweb). I concorrenti principali di AVC Extended Profile per questo tipo di applicazioni sono standard proprietari (che analizzeremo nei test) come Windows Media Video e Real Video. AVC è un open standard, è stato sviluppato mediante un processo di Open Call for Proposal e, in linea di principio, offre significativi vantaggi rispetto ai sistemi proprietari. Nessun elemento di un open standard può essere sotto il controllo di una singola industria e un singolo 64 LO STANDARD MPEG-4 giugno 2006 produttore non può causare, introducendo una nuova versione hardware o software, discontinuità nella compatibilità con il pregresso (backward compatibility). Il gran numero di industrie che competono, introducendo miglioramenti nell'uso dei tool e incrementando l'efficienza, favorisce lo sviluppo del prodotto, così come si è verificato nel caso di MPEG-2. 3.5.1 Diffusione televisiva a definizione standard Il Main Profile di AVC è caratterizzato da una maggiore complessità, per consentire la codifica del segnale video interlacciato e offrire una qualità adatta alla diffusione televisiva, con una qualità simile a quella ottenibile con MPEG-2 video, ma con un risparmio in termini di bitrate mediamente valutabile nell'ordine del 50%. l'adozione di AVC per la diffusione satellitare potrebbe triplicare la capacità in confronto a quella attuale. Ovviamente l'investimento relativo ai terminali d'utente (STB, set-top-box) rappresenta in questo caso una porzione molto significativa per lo sviluppo del servizio e quindi è difficile giustificare una sostituzione dell'attuale parco di STB. Analogamente il gruppo DVB-T, relativo allo standard di diffusione terrestre, è interessato a valutare l'adozione di AVC: in questo caso si potrebbe avere un incremento del numero di programmi disponibili per ogni canale terrestre. Occorre ricordare che MPEG-2 è attualmente utilizzato soprattutto nei decodificatori DVD: il DVD Forum (www.dvdforum.org) infatti sta valutando la possibile adozione di AVC per incrementare significativamente la durata del video disponibile sul DVD, oltre ad utilizzarlo sicuramente per i nuovi supporti HD-DVD. 3.5.2 Diffusione televisiva ad alta definizione L'adozione di AVC consentirebbe di utilizzare l'attuale formato DVD anche per la memorizzazione di film in alta definizione, non rendendo necessario il passaggio a tecnologie più complesse e costose di registrazione ottica. Relativamente alla diffusione, l'AVC è preso in considerazione dall'Advanced Television Systems Committee (www.atsc.org), l'organizzazione internazionale che si occupa di definire lo standard HDTV (High Definition TeleVision). Anche nel caso della TV ad alta definizione, i concorrenti sono gli standard proprietari Microsoft VC-1 (il nuovo standard derivato dall'attuale codec Windows Media Video 9) e Realvideo. Alcune applicazioni candidate all'utilizzo di H.264/AVC: – formato HD-DVD del DVD Forum giugno 2006 LO STANDARD MPEG-4 65 – formato Blu-Ray del Blu-Ray Disc Association (BDA) – Il Digital Video Broadcast (DVB) ha approvato l'uso di H.264/AVC per la televisione broadcast in Europa alla fine del 2004 Standard per i ricevitori di canali HDTV e Pay-TV per i servizi di televisione broadcast – digitale terrestre in Francia (fine 2004) I' Advanced Television Systems Committee (ATSC) in USA sta considerando la possibilità di – adottare uno o due codec video avanzati per il modo opzionale di trasmissione avanzata Enhanced-VSB (E-VSB) per la televisione broadcast negli Stati Uniti. H.264/AVC e VC-1 (Microsoft) sono i due candidati maggiori. – Il servizio Digital Multimedia Broadcast (DMB) nella Repubblica di Korea userà H.264/AVC – I servizi di broadcast del ISDB-T in Giappone useranno il codec h.264/AVC, inclusi i maggiori broadcasters: NHK, Tokyo Broadcast System (TBS), Nippon Television (NTV), TV Asahi, Fuji Television, TV Tokyo useranno il nuovo standard i servizi di broadcast diretto satellitare come: BBC HD (UK), – DirecTV(USA), Dish Network(USA), Euro1080(EU), Premiere (DE), ProSieben (DE), SkyHD (UK e Irlanda) e soprattutto Sky Italia (IT) L'IETF ha completato un formato payload (RFC 3984) per trasportare video H.264/AVC – usando il Real-Time Transport Protocol (RTP) l'Internet Streaming Media (ISMA) ha adottato H.264/AVC per le sue nuove specifiche ISMA – 2.0 Ma la lista è ancora lunga e comprende servizi di telefonia, canali di comunicazione interni militari, e soprattutto Video su Internet. 3.6 Implementazioni software Il numero di codec AVC disponibili sul mercato ha raggiunto il numero di 65 (aprile 2006). La lista dettagliata e i relativi links è disponibile al seguente indirizzo: 66 LO STANDARD MPEG-4 giugno 2006 http://forum.doom9.org/showthread.php?t=95939 Ricordiamo che tra i primi sostenitori di H.264 c'è la Apple Computer che ha integrato H.264 nel Mac OS X 10.4 (Tiger) e in molti suoi prodotti, tra i quali il celeberrimo I-Pod. CONTAINERS Molte implementazioni supportano diversi formati di container e questo genera gran confusione e svariati problemi di interoperabilità. I tipi di file prodotti da codec H.264 possono essere: .mp4 E' il container di AVC definito nello standard MPEG-4 (ISO 14496-15) .mpg E' il container di AVC definito nello standard MPEG-2 (ISO 13818-1, AMD3) .avi L'uso di AVC-in-AVI non è standardizzato e quindi provoca problemi di incompatibilità. Le limitazioni tecniche di AVI e VFW (per esempio riguardo i b-frames) unite all'hacking necessario per farli funzionare con AVC, impediscono la piena implementazione di tutte le caratteristiche possibili offerte da AVC e quindi frenano la qualità e la velocità di sviluppo, l'interoperabilità e la competizione. .264/.h264 il bitstream video puro, non contenuto in nessun container giugno 2006 LO STANDARD MPEG-4 67 4 VALUTAZIONE DELLA QUALITA' 4.1 Il problema dei metri di valutazione L'avvento dei sistemi di compressione, memorizzazione e trasmissione di video digitale ha portato con sé limitazioni fondamentali delle tecniche e metodologie che venivano usate per misurare la qualità di un segnale video analogico. I parametri tradizionali hanno sempre contato sulla "costanza" delle performance di un sistema video per differenti scene di input. Ovvero, si poteva mandare un segnale di test (per esempio le classiche barre di colore statiche) ed essere relativamente fiduciosi che il sistema avrebbe risposto similmente anche per del video con immagini in movimento. Molte ricerche sono state effettuate per stabilire i parametri delle prestazioni di un video analogico tradizionale (guadagno, fase, distorsione della forma d'onda, ecc). Mentre l'avvento dei sistemi di compressione video (i codec) non ha invalidato questi parametri tradizionali, esso ha certamente reso più inconsistente la loro connessione con la qualità del video percepito dall'utente. Barre colore tradizionali (statiche) 68 un frame estratto da un video test per il controllo del segnale digitale (15 secondi in loop). La scena è dinamica: le gigure geometriche ruotano e gli oggetti si spostano sullo schermo VALUTAZIONE DELLA QUALITA' giugno 2006 4.2 Problemi 4.2.1 Dipendenze dalle scene di input I sistemi video digitali adattano e cambiano il loro comportamento a seconda della scena di input. Le prestazioni possono variare molto in base alle caratteristiche dinamiche del segnale di input (movimento, livello dei dettagli nello spazio, ecc.). Nella fase di testing di un sistema di trasmissione digitale, usare scene di input diverse da quelle che verrano usate poi in produzione3 può indurre a valutazioni qualitative sbagliate. 4.2.2 Dipendenze dai sistemi di trasmissione digitali Le caratteristiche operative sei sistemi di trasmissione digitale (bitrate, error-rate, dropped packet rate) possono variare nel tempo e questo può produrre fluttuazioni di qualità. Questi cambiamenti transitori possono essere molto difficili da catturare senza che le prestazioni del sistema vengano monitorate continuamente. Idealmente, questo monitoraggio dovrebbe essere fatto in produzione, in quanto mettere off-line il sistema di trasmissione e inserire segnali di test conosciuti cambierebbe le condizioni sotto le quali il sistema sta operando e falserebbe la misurazione. Due esempi che dimostrano questo effetto sono il multiplexer (un dispositivo hardware deidicato), che unisce in un singolo canale a bitrate costante diversi canali a bitrate variabile, e la trasmissione in streaming via Internet utilizzando una bandwidth non garantita. Solo un monitoraggio in produzione continuo e non intrusivo può catturare accuratamente ciò che lo spettatore sta vedendo in ogni preciso istante. E' quindi necessario un nuovo paradigma di misurazione. 4.2.3 Nuovi disturbi del video digitale I sistemi di video digitale producono differenti tipi di disturbo (artefatti) rispetto ai sistemi video analogici. Esempi di questi artefatti sono la blocchettizzazione, gli error-blocks (blocchi di immagine completamente sbagliati), il mosquito-noise, il blurring (sfocatura), il jerkiness o strobing (blocchi o insiemi di macro-blocchi che rimangono fermi). Per quantificare pienamente le caratteristiche di performance di un sistema video digitale, è auspicabile avere un set di parametri in cui ogni parametro è sensibile ad uno specifico tipo di disturbo. Questo è simile a ciò che era stato 3 Col termine in produzione si intende “durante il funzionamento reale”, come per esempio un sistema di streaming durante la vera trasmissione dei filmati e non una trasmissione di test o simulata. giugno 2006 VALUTAZIONE DELLA QUALITA' 69 sviluppato per i disturbi analogici (per esempio il multi-burst misura la risposta di frequenza, il signal-to-noise misura il livello del rumore nel segnale analogico). 4.2.4 La necessità dell'indipendenza della tecnologia. La persistenza degli stessi sistemi video analogici negli ultimi 40 anni ha permesso di ottenere oggi materiale di video testing molto accurato. Al contrario, la rapida evoluzione della compressione, memorizzazione e trasmissione di video digitale prevede un'operazione di misurazione delle prestazioni molto più difficile. Per evitare che diventino in breve tempo obsolete, i nuovi sistemi di misurazione per il video digitale devono essere indipendenti dalla tecnologia attuale, o comunque non direttamente dipendenti da uno specifico codec o da architetture di trasporto. Una via per ottenere quest'indipendenza è di far sì che lo strumento di misurazione percepisca e misuri i disturbi video come farebbe un essere umano. I metodi oggettivi attuali si avvicinano molto a questo scopo, ma il giudizio degli esseri umani resta ancora il più affidabile e completo. 4.3 Valutazione soggettiva Nella valutazione della qualità soggettiva di un video compresso ci si basa su di un giudizio, per così dire "ad occhio", e si dà un voto basandosi ad esempio su di una scala come quella illustrata qui di seguito: Punteggio 5 4 3 2 1 Qualità Eccellente / Ottima Buona Sufficiente / Discreta Non sufficiente Pessima, del tutto insufficiente Presenza di artefatti e disturbi Impercettibili Appena percettibili ma non fastidiosi Percettibili e leggermente fastidiosi Fastidiosi Molto fastidiosi Da quanto si evince nei test che ho effettuato personalmente è ancora il metodo più affidabile. Come vedremo in seguito esistono metodi oggettivi basati su modelli matematici che cercano di simulare il giudizio di un essere umano, ma nessun programma potrà mai sostituire le "sensazioni", le "percezioni" di un singolo individuo. Soprattutto perché ogni persona percepisce in maniera diversa i difetti di un video, e solo unendo giudizi di persone diverse si può avere una visione 70 VALUTAZIONE DELLA QUALITA' giugno 2006 globale della qualità. In alcuni test di sistemi disponibili in commercio sono state notate nelle valutazioni soggettive differenze anche di 3 punti sulla scala da 1 a 5. Per esempio, risultati di test soggettivi sulla qualità di sistemi a 45 Mbit/s (sistemi usati da alcuni broadcasters che trasmettono con diverse coppie di codec) hanno variato da 2.16 a 4.64. 4.4 Valutazione oggettiva Le tecniche di valutazione oggettiva sono modelli matematici che emulano i risultati delle valutazioni di qualità soggettive basati su criteri e metriche che possono essere misurate oggettivamente. La via più tradizionale per valutare la qualità di un codec consiste nel calcolare il rapporto di picchi di signal-to-noise (SNR) tra il segnale sorgente e il segnale processato, ma negli ultimi anni sono stati elaborati anche altri metri di misura più precisi. Vediamoli. 4.4.1 Il PSNR E' l'acronimo di Peak-to-peak Signal-to-Noise Ratio. E' il sistema più usato per misurare la qualità di un'immagine ricostruita partendo da quella originale. Per capire come funziona analizziamo prima il Mean Squared Error (MSE). Per 2 immagini monocromatiche I e K di m x n pixel si definisce l'approssimazione del disturbo generato come: Genericamente il PSNR è uguale al MSE ma è più conveniente perché usa una scala logaritmica. Viene definito nel modo seguente: dove MAXI è il massimo valore di pixel dell'immagine. Quando i pixel sono rappresentati usando 8 bit per pixel, esso è 255. giugno 2006 VALUTAZIONE DELLA QUALITA' 71 Originale Compresso Y-YUV MSE Originale Compresso Y-YUV PSNR Al lato pratico il PSNR tipicamente assume valori compresi tra 20 e 50 dB (con due o quattro cifre decimali significative) e valori più elevati testimoniano un qualità superiore ovvero una maggior fedeltà con l'originale non compresso. La seguente immagine aiuta a farsi un'idea del rapporto esistente tra valore del PSNR, bitrate (espresso in Mbps) e qualità soggettiva percettibile: 72 VALUTAZIONE DELLA QUALITA' giugno 2006 Il PSNR può essere calcolato per ciascuna delle componenti Y-YUV, U-YUV, V-YUV, R-RGB, GRGB, B-RGB. Un grafico del PSNR di un'immagine YUV potrebbe essere il seguente: Come si nota l'andamento delle 3 curve è molto simile, pertanto si potrebbe fare una media tra queste e realizzare una sola curva rappresentativa delle 3 componenti YUV, così da ridurre il numero di informazioni ed avere una visione più chiara nel caso si confrontino più video sullo stesso grafico. Nei test effettuati è stata usata la funzione compare() del programma AVISynth che effettua il calcolo del PSNR e restituisce un file di log con i valori per ogni singolo frame (utile per fare i grafici) e il valore della media, chiamato overall PSNR che verrà adottato come valore unico per le misurazioni PSNR. E' necessario sottolineare che piccole variazioni del PSNR, dell'ordine di 1-2 dB, difficilmente saranno evidenziabili con un giudizio soggettivo (sopratutto per bitrate elevati) e che sebbene utilizzato universalmente per la valutazione della qualità di un'immagine, il PSNR è in grado di dire relativamente poco sulla gravità di alcuni difetti di compressione quali la blocchettizzazione ed il ringing. giugno 2006 VALUTAZIONE DELLA QUALITA' 73 4.4.2 SSIM L'indice SSIM è basato sulla misura di 3 componenti (luminanza, contrasto e struttura) e sulla loro combinazione in un unico valore. Orginale Compresso SSIM 4.4.3 VQM Il sistema VQM, sviluppato da Feng Xiao nel 2000, usa le DCT per simulare la percezione umana. Originale Compresso VQM La spiegazione di come viene calcolato è piuttosto complessa e può essere consultata nel rapporto ufficiale al seguente indirizzo: http://www-ise.stanford.edu/class/ee392j/projects/projects/xiao_report.pdf 74 VALUTAZIONE DELLA QUALITA' giugno 2006 Altre metriche sono state proposte recentemente, tra cui: • MSAD • Delta • Bluring measure Nei test effettuati non sono però stati utilizzati in quanto non ancora diffusi e riconosciuti ufficialmente. giugno 2006 VALUTAZIONE DELLA QUALITA' 75 5 COMPARAZIONE In questo capitolo ci occuperemo di valutare nella pratica il comportamento dei più recenti codec di compressione video sia lossless che lossy. La scelta dei codec è stata determinata da diversi fattori, tra i quali: popolarità, efficienza già comprovata (escludendo quindi quei codec le cui performance sono molto al di sotto della media) e disponibilità (free, trial versions, ecc.). Codec basati su hardware specifico non sono stati presi in considerazione. Tutti i test sono stati effettuati personalmente da chi ha scritto il presente documento, verificando sempre la correttezza del file di output ottenuto e effettuando ove necessario valutazioni soggettive della qualità. I test hanno lo scopo di confrontare le prestazioni dei codec e di stabilire quali siano i migliori codec attualmente disponibili (giugno 2006) sul mercato. Il confronto verrà affrontato come una “gara” in cui ci saranno vincitori e perdenti. Si effettueranno test a differenti bitrate e su differenti video, cercando di ottenere risultati scientificamente validi, basati su criteri affidabili. Nel confronto dei codec lossless, non essendoci variazioni di qualità visiva, verranno premiati: ● velocità ● rapporto di compressione ● versatilità Nei codec lossy invece verranno premiati: 76 ● velocità ● compressione ● qualità visiva ● versatilità COMPARAZIONE giugno 2006 5.1 Risorse utilizzate HARDWARE Tutti i test sono stati effettuati con il seguente hardware: processore AMD Athlon 64 3000+@2,53Ghz Scheda madre ASUS A8n-E RAM 2x 512MB PC3200 V-DATA DDR scheda video Radeon x850 256MB VIVO Hard Disk Maxtor 6B250s0, 7200rpm, 250GB, SATA2 monitor LG 795FT+ a tubo catodico - FLATRON risoluzione 1280x1024 @85Hz SOFTWARE Sistema Operativo Windows XP Professional SP2 Software per l'encoding: PROGRAMMA FUNZIONE VERSIONE 2.55 LINK AviSynth frameserving www.avisynth.org VirtualDub editing ed encoding 1.6.15 build 24442 www.virtualdub.org VirtualDubMod editing ed encoding 1.5.10.2 build 2542 http://sourceforge.net/projects/virtu aldubmod Yamb Mux / demux 1.6.0 http://yamb.unite-video.com yuv2avi conversione video - www.streamcrest.com players: PROGRAMMA VERSIONE LINK Media Player Classics 6.9.4.0 http://sourceforge.net/project/showfiles.php?group_id= 82303&package_id=84358 Elecard Mpeg Player 4.0.61 www.elecard.com VideoLan 0.8.5 www.videolan.org/vlc/ Windows Media Player 11-beta www.microsoft.com giugno 2006 COMPARAZIONE 77 software per l'analisi qualitativa oggettiva: PROGRAMMA VERSIONE LINK MSU Video Quality Measure 1.2 beta www.compression.ru PSNR Creator 1.1 www.canalxvid.com Avisynth (funzione compare() ) 2.55 ww.avisynth.org Software utilizzato per il decoding: E' stato usato il pacchetto opensource ffdshow (http://ffdshow.sourceforge.net) contente le librerie libavcodec che, testate sull'autorevole forum di doom9, sono risultate sviluppare i migliori decoder (http://forum.doom9.org/showthread.php?t=99402). CLIPS Sono state utilizzate sequenze video test standard, disponibili per il download sul sito del VQEG (Video Quality Experts Group) http://media.xiph.org/vqeg/TestSeqences/Reference/ . Tali files sono in formato .yuv quindi ho utilizzato il programma yuv2avi per convertire i files in AVI con spazio colore RGB a 24-bit. Alcune di queste clip erano interlacciate (vedere l'appendice per un approfondimento) e per valutarne correttamente la qualità video con tutti i codec (molti non supportano l'interlacciamento) ho dovuto prima de-interlacciarle. Esistono vari modi per deinterlacciare un video ma non è l'argomento di questa tesi. Io ho scelto un metodo misto che si basa sull'eliminazione del campo dispari e sul ridimensionamento dell'immagine. Dopo varie prove ho constatato che per la valutazione qualitativa di un frame è il metodo migliore, che evita la formazione di qualsiasi artefatto e garantisce maggior coerenza con l'immagine originale. 78 COMPARAZIONE giugno 2006 5.2 Codec LOSSLESS Codec analizzati: Alpary Avizlib Camstudio CorePng FFV1 Huffyuv Lagarith Lzo Mindvid MSU lossless Picvideo lossless giugno 2006 COMPARAZIONE 79 Alpary v2.0 build 957.040607 (12/04/2005) Creato dalla società Alparysoft, supporta compressione lossless in RGB, YUY2 e YV12. Non supporta il codec instance. AVIzlib v2.2.3 E' un codec lossless per Video For Windows. E' indicato dagli autori come l'ideale per animazione digitale o l'animazione in 3DCGs. Contiene due tipi di codec a seconda dell'uso. Può essere usato come input solo un segnale RGB. Comunque il codec permette di convertirlo in YUV (i.e. YUV2 o YV12) senza perdita visibile all'occhio umano. CamStudio Lossless codec 1.0 (13/03/2003) Codec molto veloce ottimizzato per le applicazioni di screen capture. – Opera in RGB ed è in grado di comprimere a 16,24 o 32-bit RGB bitmaps. – Supporta la compressione temporale – Può comprimere utilizzando 2 algoritmi diversi di compressione: LZO o GZIP. LZO è molto veloce ed è usato per lo screen capturing. GZIP è molto utile quando si converte/ricomprime un file AVI già compresso con CamStudio. Nei test le due modalità verranno indicate come cam_gzip e cam_lzo. Il piccolo file size prodotto con l'algoritmo GZIP lo rende ideale per scopi di archivio. CorePNG v0.8.2 Essenzialmente, ogni frame è compresso come un'immagine PNG quindi ciò che fa il PNG lo fa anche questo codec. Ha inoltre l'abilità di scrivere P-frames e di auto-decidere quando farlo. Il Pframe prende la differenza tra il frame precedente e il frame corrente e la codifica come un PNG. CorePNG è stato inizialmente sviluppato per l'uso con i sottotitoli, comprime i cartoni animati e le animazioni in CG molto bene e in molti casi meglio di HuffYUV e Loco. 80 COMPARAZIONE giugno 2006 FFV1, fddshow (29/11/2005) fddshow è un codec DirectShow e VFW per codificare/decodificare molti formati audio e video, inclusi filmati DivX e XviD, usando libavcodec, xvid e altre librerie opensource, con un ricco set di filtri postprocessing. FFV1 è un codec lossless semplice ma efficacie incluso nel software. HuffYUV 2.1.1 (18/05/2004) Scritto da Ben Rudiak-Gould (università di Berkeley, California), HuffYUV è un codec lossless per WIN32 molto veloce. L'output del decompressor è identico bit a bit con l'input originale. E' ritenuto da tutti come uno dei migliori e per questo si propone di rimpiazzare il formato video di cattura uncompressed YUV. E' abbastanza veloce da comprimere in real-time a piena risoluzione un video CCIR 601 (720 x 480 x 30fps) su un misero Celeron a 416Mhz. Supporta anche la compressione lossless di dati RGB, quindi è molto versatile ed in più è free software. Lagarith v1.3.8 (12/03/2006) Si tratta di un codec opensource scritto da Ben Greenwood. E' stato disegnato con pochi ma chiari obiettivi in testa: – Velocità: lo stesso creatore riconosce che non è veloce come il codec Huffyuv, ma la velocità di encoding è comparabile a quella di molti altri codec lossless, anche se la velocità di decoding potrebbe essere inferiore. Supporta il parallelizing nei sistemi multi-processore. – Supporto color-space: le conversioni color-space possono causare errori di arrotondamento, introducendo perdita di dati, contrariamente all'ideale di una compressione lossless. Lagarith cerca di evitare questo problema supportando direttamente i colorspace YV12, YUY2, RGB e RGBA – keyframes: non permettere l'inter-prediction significa che ogni frame è codificato separatamente. Ciò rende il cutting, il joining e il seeking più veloci. Queste tre cose, unite al fatto che è più potente di Huffyuv, rendono Lagarith un codec utile per lo stadio di editing video. giugno 2006 COMPARAZIONE 81 LZOcodec v0.3 (01/05/2006) Può essere usato come capture codec ma l'uso principale potrebbe essere quello di comprimere video generati dal computer o film di animazione. Può convertire per esempio un file SWF (Flash) o un Power Point in un file AVI. MindVid 1.0 Beta 1 (06/06/2006) Semplicità e facile utilizzazione è ciò che è alla base di questo codec. Le recensioni indicano che raggiunge alti livelli di compressione usando lo stesso tempo di coding e decoding. MSU lossless video codec v0.6 (25/09/2005) Sicuramente uno dei migliori, sviluppato direttamente dal team di Compression Project, gruppo di ricerca autorevole nel campo della compressione video. Vanta di essere assolutamente lossless, evvero uguale bit a bit al file sorgente. Eaccetta in input RGB, YUY2 e YV12 e restituisce l'output nello stesso formato, seppur permettendo la conversione tra un formato e l'altro. Ha inoltre una funzionalità chiamata "denoising" che dovrebbe aumentare addirittura la qualità dell'immagine sorgente e contemporaneamente il livello di compressione. PICVideo Lossless JPEG codec v3 (25/02/2003) Ottimizzato da Pegasus Imaging Corporation, è sia un codec Video for Windows che un filtro di trasformazione DirectShow. Disegnato per l'editing professionale e per applicazioni di video mediche, comprime RGB a 24-bit usando Predictor 1 lossless JPEG. NOTA Tutti i codec analizzati sono gratuiti e liberamente scaricabili dalla rete. 82 COMPARAZIONE giugno 2006 TEST (Giugno 2006) tester: SIMONE CHIESA LOSSLESS Video 1: sorgente originale: src6_ref__625.yuv Video: ferrari.avi Colore: RGB 24-bit frames: 220 (8,8 secondi) risoluzione 720 x 576 sistema PAL dimensione: 261 MB 25 fps Si tratta di una breve sequenza video prelevata dagli archivi del Centro Ricerche RAI di Torino. Il video mostra l'uscita di pista di una Ferrari durante un sessione di Formula1. La prima parte del video è caratterizzata dal movimento della macchina su uno sfondo quasi immobile. Dopo il taglio al frame 75 la macchina finisce fuori pista restando al centro dello schermo mentre tutto intono scorre l'erba e la terra, caratterizzata da una grana molto grossa. COLORE: RGB-24bit Settaggi standard (velocità\compressione) CODEC giugno 2006 SECONDI KBytes RATIO Alpary 26 126,619 2,07 Avizlib 16 267,314 0,97 Cam_gzip 31 200,251 1,30 Cam_lzo 17 243,748 1,07 CorePng 63 142,640 1,83 COMPARAZIONE 83 CODEC SECONDI KBytes RATIO Ffv1 [1] 16 104,859 2,50 Huffyuv 11 150,741 1,74 Lagarith 12 112,137 2,33 Lzo [1] 60 76,756 3,43 Mindvid 24 156,686 1,67 MSU 59 108,276 2,41 Picvideo 12 199,916 1,31 [1] Da una verifica effettuata è risultato che anche se si imposta il codec a produrre un video RGB, il video prodotto è invece un YV12, con evidente risparmio di spazio. Pertanto il codec viene squalificato per i test RGB e YUY2. Lagarith è sicuramente la scelta migliore in quanto riesce ad ottenere il miglior rapporto 84 COMPARAZIONE giugno 2006 velocità/compressione. Huffyuv arriva secondo di poco. MSU comprime meglio di tutti ma è deludente nel fattore velocità. Massima compressione CODEC SECONDI KBytes RATIO Alpary 36 122,385 2,14 Avizlib 29 202,104 1,29 Cam_gzip 43 200,095 1,305 CorePng 108 142,065 1,84 Huffyuv 11 141,403 1,85 Lagarith * 12 112,137 2,33 Mindvid * 24 156,686 1,67 MSU 344 103,244 2,53 Picvideo * 12 199,916 1,305 * non permette di scegliere impostazioni riguardo il livello di compressione/velocità Come anticipato MSU riesce a raggiungere il maggior coefficiente di compressione ma sacrificando giugno 2006 COMPARAZIONE 85 moltissimo la velocità (344 secondi sono davvero tanti). Lagarith e Alpary sono due scelte più ragionevoli. Massima velocità CODEC SECONDI KBytes Fps Alpary rgb 11 142,442 18 Avizlib 20 201,245 10 Cam_gzip 22 199,860 10 Cam_lzo 16 243,748 14 CorePng 22 152,777 10 Huffyuv 12 180,078 17 Lagarith * 12 112,137 17 Mindvid * 24 156,686 8 MSU 58 108,276 3 Picvideo * 12 199,916 17 * non permette di scegliere impostazioni riguardo il livello di compressione/velocità Nelle impostazioni a massima velocità quasi tutti i codec si comportano bene. Vince Alpary, ma di solo 1 secondo. Al secondo posto a parimerito Huffyuv, Lagarith e Picvideo. Paurosamente lento il 86 COMPARAZIONE giugno 2006 codec MSU. COLORE: YUY2 (4:2:2) Dimensioni originali: 174 MB Standard CODEC SECONDI KBytes RATIO Alpary 17 75.977 2,32 Avizlib - - - Camstudio - - - CorePng 45 74.077 2,35 Huffyuv 10 95.592 1,83 Lagarith 9 68.361 2,56 Mindvid - - - 37 62.773 2,76 - - - MSU Picvideo I codec evidenziati in rosso non permettono un utilizzo dello spazio colore YUY2 Nel rapporto velocità/compressione Vince nettamente Lagarith, seguito da Alpary a parimerito con Huffyuv. giugno 2006 COMPARAZIONE 87 Massima compressione CODEC SECONDI KBytes RATIO Alpary 23,22 73,955 2,38 CorePng 184,23 72,943 2,41 Huffyuv 10,02 95,592 1,83 Lagarith * 9,49 68,361 2,55 320,06 60,866 2,9 MSU MSU vince ancora, seguito dal sempre ottimo Lagarith. Massima velocità CODEC 88 SECONDI KBytes Fps alpary 21 86,625 20 CorePng 15 85,170 14 huffyuv 9 91,675 22 Lagarith * 9 68,361 24 msu 37 62,773 5 COMPARAZIONE giugno 2006 Stessi risultati che per RGB, con un pari al primo posto per Huffyuv e Lagarith. COLORE: YV12 (4:2:0) Dimensioni originali: 130 MB Impostazioni standard CODEC giugno 2006 SECONDI KBytes RATIO Alpary 15 61.056 2,13 Avizlib - - - Camstudio - - - CorePng 32 58.263 2,24 Ffv1 9 50.329 2,60 Huffyuv - - - Lagarith 7 54.717 2,36 Lzo_gzip 56 69.709 1,88 COMPARAZIONE 89 CODEC SECONDI KBytes RATIO Lzo_lzo 11 105.874 1,23 Mindvid - - - 31 50.050 2,6 - - - MSU Picvideo I codec evidenziati in rosso non permettono un utilizzo dello spazio colore YV12 Nello spazio colore YV12 Ffv1 conquista il posto d'onore, seguito a breve distanza da Lagarith. Bene anche Alpary. MSU è ancora lento, peccato. 90 COMPARAZIONE giugno 2006 Massima compressione CODEC SECONDI KBytes RATIO Alpary 19 59.225 2,20 CorePng 133 57.474 2,28 Ffv1 9 50.329 2,60 Lagarith 7 54.717 2,24 Lzo_gzip 277 69.770 1,86 Lzo_lzo 11 105.874 1,23 MSU 313 48.157 2,70 Vince sempre MSU, confermando il suo predominio per quanto riguarda la capacità di compressione Massima velocità CODEC giugno 2006 SECONDI KBytes Alpary 6 68.978 CorePng 13 66.789 Ffv1 9 50.329 COMPARAZIONE 91 CODEC SECONDI KBytes Lagarith 7 54.717 Lzo_gzip 56 69.709 Lzo_lzo 11 105.874 MSU 30 50.140 Sorprende Alpary con i suoi 6 secondi, seguito come sempre da Lagarith con solo 7 secondi. Gzip è praticamente fuori gara. 92 COMPARAZIONE giugno 2006 Video 2: sorgente originale: src14_ref__525.yuv Video: new_york.avi Colore: RGB 24-bit frames: 260 (8,67 secondi) risoluzione 320 x 216 sistema NTSC dimensione: 51,4 MB 29,97 fps Questo video è un'unica panoramica presa da un aereo che si sposta parallelamente all'immagine verso sinistra. Il video originale è un NTSC ad alta risoluzione con un'ottima qualità dei dettagli. La sua risoluzione è stata diminuita fino al valore di 320 x 216 così da testare il comportamento dei codec a basse risuluzioni. Per questo test riportiamo solo i grafici tralasciando i dettagli dei valori nelle tabelle. COLORE: RGB-24bit Settaggi standard (velocità\compressione) Ottimo Lagarith, bene anche Huffyuv giugno 2006 COMPARAZIONE 93 Massima velocità Massima compressione Pareggio tra Alpary e Huffyuv Vince ancora MSU COLORE: YUV 4:2:2 (YUY2) Settaggi standard (velocità\compressione) Primo Lagarith, secondo Huffyuv 94 COMPARAZIONE giugno 2006 Massima velocità Massima compressione Pareggio tra Alpary, Uffyuv e Lagarith Vince ancora MSU COLORE: YUV 4:2:0 (YV12) Settaggi standard (velocità\compressione) Questa volta c'è un pareggio tra ben 3 codec: Lagarith, Ffv1 e MSU giugno 2006 COMPARAZIONE 95 Massima velocità Massima compressione Pareggio tra Alpary e Lagarith Al primo posto sempre MSU CONCLUSIONI I risultati dei test fatti su 2 video così diversi tra loro (per frame/s, risoluzione, tipo di filmato, ...) sono risultati quasi del tutto identici. Utilizzando il principio di induzione si potrebbe quindi pensare che i risultati siano simili per qualsiasi video venga compresso. Diamo una valutazione per ogni codec: • Alpary: E' risultato il codec più veloce e comprime piuttosto efficacemente in tutti gli spazi colore. Una buona scelta per la compressione real-time. Voto: 8 • Avizlib: E' il fanalino di coda per quanto riguarda la compressione. Restituisce un file dalle dimensioni quasi identiche a quello del video non compresso e funziona solo con RGB. Praticamente inutile. Voto: 2 • Camvideo: Come Avizlib, funziona solo in RGB e produce un file poco compresso. Però ha il vantaggio di poter scegliere tra due tipi di compressione diversi e se si utilizza l'algoritmo lzo si può fare sufficientemente bene acquisizioni in real-time. Voto: 4 • CorePNG: E' un codec dalle prestazioni mediocri, ma si ha la sicurezza che funzioni dappertutto. Voto: 6 96 COMPARAZIONE giugno 2006 • Ffv1: La scelta migliore per la compressione nello spazio YV12 in quanto è veloce ed efficace senza necessità di nessun settaggio. Si installa col pacchetto fddshow quindi è facile da utilizzare. Il fatto che funzioni solo in YV12 riflette una certa tendenza dell'opensource di creare solo cose “intelligenti” e utili (come abbiamo visto i vantaggi di comprimere in YV12 sono molti). Peccato però che in molti ambiti professionali si utilizzi solo RGB o YUY2, quindi escludendoli si “autolimita” l'utilizzo e la diffusione. Voto: 8 • Huffyuv: Lo standard de facto nel mondo dei codec lossless ma dai test non è risultato il migliore in assoluto e inoltre ha il grosso difetto di non comprimere in YV12, che lo penalizza parecchio. Comunque è un buon codec. Voto: 8 • Lagarith: Se si pensa che questo codec è stato creato da un matematico per usi personali, la cosa sembra incredibile. Nei test è risultato senz'altro il miglior codec lossless disponibile: veloce, efficace e molto versatile (funziona in tutti gli spazi colore con ottime prestazioni). Voto: 10 • Lzo: Funziona solo in YV12. Anche questo codec, come Camvideo, ha la facoltà di utilizzare 2 algoritmi diversi per la compressione: gzip o lzo. Gzip è meglio non considerarlo nemmeno, voto: 0. Lzo invece è molto veloce ma non è efficace come Ffv1. Voto: 5 • Mindvid: E' ancora in versione beta ma già, se non si registra il prodotto, inserisce una frase di disturbo nel video. E' un codec dalle prestazioni mediocri che funziona solo in RGB. Inutile e pure arrogante. Voto: 3 • MSU lossless: Veniva annunciato come il miglior codec lossless nei risultati dei test di confronto fatti dallo stesso team scientifico russo che l'ha sviluppato. In effetti MSU è il codec che riesce a comprimere con un'efficienza migliore di tutti gli altri in tutti gli spazi colore e questo conferma quanto pubblicato sul sito. Però le loro analisi non prendevano in considerazione il fattore velocità, che infatti risulta un grosso tallone d'Achille di questo codec (è lentissimo). Se il tempo non è un problema e si ha una macchina potente, è la scelta obbligata. Altrimenti, mentre codifica un film di 2 ore si può tranquillamente andare fuori al ristorante nel frattempo. Voto: 8 • Picvideo: E' molto veloce ma comprime poco e funziona solo in RGB. Nel complesso: giugno 2006 COMPARAZIONE 97 scarso. Voto: 5 E' difficile determinare quale sia in assoluto il codec più veloce o quello con migliore compressione, perché come abbiamo visto non tutti i codec supportano tutti gli spazi colore. Dividendo in categorie si ha: Spazio colore Miglior velocità Miglior compressione Miglior bilanciamento RGB Alpary MSU Lagarith YUY2 Huffyuv / Lagarith MSU Lagarith YV12 Alpary MSU Ffv1 La mia conclusione finale è che il codec lossless migliore risulta essere: Lagarith 98 COMPARAZIONE giugno 2006 5.3 Codec LOSSY Codec analizzati: MPEG-4 AVC: MPEG-4 ASP: non-MPEG-4: Mainconcept/Elecard 3ivx FLV1 Mpegable DivX Indeo 5.11 Nero AVC Fdd_H.264 MPEG-2 (come Quicktime 7 HDX4 Sorenson XviD referenza) Real Video 10 Theora VSS H.264 VP7 x.264 Windows Media Video 9 (Wmv9) MPEG-4 AVC: codec conforme alle specifiche MPEG-4 part 10 MPEG-4 ASP: codec conforme alle specifiche MPEG-4 part 2 non-MPEG-4: codec non conforme alle specifiche MPEG-4 MPEG-4 AVC Mainconcept H.264/AVC v2 / Elecard E' un programma standalone molto completo. Il codec è sviluppato da una collaborazione tra Elecard e Mainconcept e deve essere usato all'interno dell'applicazione apposita. Mainconcept è giugno 2006 COMPARAZIONE 99 stata leader nei codec MPEG-2 e rappresenta sicuramente un punto di riferimento nel mercato professionale. Supporta 1pass (CBR/VBR/fixed Quants), P-Frame Reorder, CABAC, Loop, Multiple B-Vops, Multiple Ref, 4x4 P-Frame Sizes, PAR, RDO Mpegable Sviluppato dalla DIGAS, è stato utilizzato attraverso il software X4Live. supporta 1pass (fixed quants) uses P-Frames only, 8x8 P-Frame Blocksizes, CAVLC only, Loop. Non consente la modalità 2-pass Nero AVC Co-sviluppato da Nero AG e Ateme, include un encoder e un decoder. L'encoding va fatto tramite il software apposito. Supporta 2pass, CABAC, (adaptive) Loop, multiple B-Frames, mulitple Reference Frames, weighted prediction, 8x8 P-Frame Blocksizes, 16x16 B-Frame Blocksizes, Adaptive Quant. Quicktime 7.1 Il celebre pacchetto Apple per l'audio/video. Leader nella creazione di multimedia nel mondo Macintosh, è disponibile anche per piattaforma Windows. Supporta 2pass, max 1 B-frame, Loop (0,0), P8x8,B8x8,I4x4, Adapt. Quant, 5 Slices, no CABAC, no Weighted Pred., no multi Ref. Sorenson AVC Pro Utilizzato attraverso il software Sqeeze 4.3. Non ho dettagli tecnici. Vss H.264 v2.3 Sviluppato dalla Vsofts, è utilizzabile in VirtualDub. x264 v352 (12/06/2006) Si tratta del nuovo video codec opensource, che dopo mesi di gavetta arriva finalmente a produrre 100 COMPARAZIONE giugno 2006 delle versioni sempre più stabili, sebbene ancora nuove versioni vengano rilasciate con cadenza quasi settimanale. Il nuovo codec rappresenta una validissima alternativa ad i codec attuali sia per prestazioni che per qualità, ed è sicuramente una delle più importanti promesse che appare oggi sullo scenario del digitale. E' l'unica implementazione opensource e free-software dello standard H.264/AVC. Supporta 2-pass, CABAC, Loop, multiple B-Frames, B-References, multiple Reference Frames, 4x4 P-Frame, 8x8 B-Frame Blocksizes, segnale anamorfico e High Profile: 8x8 dct e intra prediction, matrici di quantizzazione lossless e custom. MPEG-4 ASP 3ivx 4.5.1 Nella sua semplicità (manca compressione con B-frames, rate distortion, ecc..) rappresenta un po' i codec del passato, per intendersi Divx 3, 4, le prime versioni di XviD o al massimo le prime versioni del codec DivX 5. Impostazioni: default + MPEG Quantizer (ASP) + Adaptive Quantization. DivX v6.2.5 (15/06/2006) E' sicuramente il codec più popolare ma forse non è il più performante. E' stato sottoposto a molti test dalle comunità di sviluppo del video digitale e le sue prestazioni sono risultate abbastanza deludenti rispetto agli avversari. Però è facile da usare e per ragioni storiche e commerciali è sicuramente il più conpatibile, e questo è un punto molto grosso a suo favore. Non è un codec H.264. Impostazioni: default + Quantization: H.263 optimized. Fdd_H.264 (ovvero l'H.264 di libavcodec) Compare nella lista dei codec disponibili quando si installano le librerie libavcodec. Libavcodec fa parte del pacchetto ffdshow, che contiene tutti i codificatori e decodificatori audio/video di Ffmpeg (DirectShow e VFW). FFmpeg è una collezione di free-software che raccoglie al suo interno molti dei progetti opensource legati alla codifica audio/video. Il progetto è partito da Gerard Lantau, un alter-ego di Fabrice Bellard ma è attualmente gestito da Michael Niedermayer. Molti sviluppatori di Ffmpeg fanno parte di altri progetti quali Mplayer, xine e VideoLan. Output: RGB24. Non permette la modalità 2-pass. giugno 2006 COMPARAZIONE 101 HDX4 1.5.4.419 (19/04/2006) E' stato ufficialmente rilasciato nel 2005 da Jomigo Visual Technology GmbH, Germany. Sul sito ufficiale si presenta come il codec H.264 più veloce sul mercato e i primi test effettuati effettivamente confermano questa ipotesi. XviD v1.1.0 (30/12/2005) Il codec più popolare nel mondo opensource. L'installazione fornisce numerosi tools per l'analisi, la gestione e il debugging del codec. Ho usato la build compilata per windows 32-bit da Koepi, che è una delle migliori. Si attende con ansia il rilascio della versione AVC, che è ancora in versione beta ma non è disponibile al pubblico. non-MPEG-4 FLV1 (libavcodec) Un altro dei codec video di libavcodec. Non si sa molto sulla sua provenienza ma è abbastanza performante. Indeo 5.11 Originariamente sviluppato da Intel e poi passato nelle mani della società Ligos, è stato usato per molti anni per la codifica lossy . E' stato scelto perchè rappresenta uno dei codec più usati della vecchia generazione. Non permette la modalità 2-pass Mianconcept MPEG-2 v1.5 (2005) L'implementazione MPEG-2 di Mainconcept è universalmente riconosciuta come la migliore sul mercato, pertanto è stata utilizzata come referenza per il confronto con il "vecchio" codec MPEG-2. RealVideo 10 E' il celebre codec maggiormente usato negli ultimi anni per lo streaming su Internet e infatti viene 102 COMPARAZIONE giugno 2006 utilizzato con un software prettamente orientato al broadcasting e allo streaming. Theora 1.0 alpha6 (30/05/2006) Si tratta di un altro interessante codec non-MPEG-4 freeware facente parte di ffdshow. Sviluppato dalla fondazione Xiph.org come parte del loro progetto Ogg (un progetto che mira ad integrare il codec video VP3, il codec audio Vorbis e il container Ogg per competere con MPEG-4). Theora è derivato direttamente dal codec VP3 di On2 (società che poi ha continuato il suo sviluppo fino ad ottenere l'attuale VP7), attualmente i due sono praticamente identici ma lo sviluppo è ancora in corso. VP7 True Motion VP7 (VP70) è sviluppato da On2 Technologies come successore dei codec VP3, VP5 e TrueMotion VP6. Ha il supporto sia VFW che DirectShow e sembra abbia la migliore compressione nella famiglia di codec MPEG-4 e H.264. Windows Media Video 9 (Wmv9) Windows Media Video è il nome generico per una serie di tecnologie proprietarie sviluppate da Microsoft per lo streaming di file video. Fa parte della piattaforma Windows Media. A partire dalla versione 7 (WMV1), Microsoft ha usato una sua versione modificata dello standard MPEG-4. Lo stream video è spesso abbinato a quello audio di Windows Media Audio. Microsoft ha sottoposto alla Society of Motion Picture and Television Engineers (SMPTE) lo standard VC-1 per l'approvazione come standard internazionale e poco tempo fa è stato approvato, diventando quindi ufficialmente il maggior rivale di MPEG-4. Windows Media Video 9 è una implementazione di questo standard, ma probabilmente presto ne nasceranno altre. Questo codec è usato anche per la diffusione della televisione ad alta definizione su DVD in un formato che Microsoft commercializza col marchio WMV HD. Questo formato può essere riprodotto anche su computer o lettori DVD compatibili. giugno 2006 COMPARAZIONE 103 Prezzi e containers dei codec 104 CODEC PREZZO CONTAINER 3vix Free AVI DivX 19.99 $ AVI flv1 free AVI Fdd_H.264 free AVI HDX4 39.90 $ AVI, MP4, 3GP Indeo 5.11 free AVI Mainconcept 499 $ MPG, 264 Mpegable ?$ MP4 Mpeg-2 149 $ MPG Nero 29,99 $ MP4 Quicktime 29,99 $ MP4, 3GP, MOV Real Basic: free, Pro: 199,95 $ RM, RMVB Sorenson 399 $ MP4 theora Free AVI VP7 Free AVI VSS 99 $ AVI wmv9 free WMV x264 Free & Opensource AVI, MP4, RAW XviD Free & Opensource AVI COMPARAZIONE giugno 2006 TEST (Giugno 2006) tester: SIMONE CHIESA LOSSY NOTA per il decoding: Per il decoding non sono stati usati filtri di postprocessing particolari. Ove possibile è stato usato ffdshow, per gli altri è stato usato il decoder fornito dal produttore. Per garantire lo stesso tipo di input nei software di analisi ho utilizzato il seguente script AVISynth per il frameserving: a=DirectShowSource(clip clip).ConvertToRGB24.Trim(8,240) DirectShowSource(): permette di passare come input files in formato AVI, MPG, MP4, ecc. ConvertToRGB24: garantisce che entrambi i filmati siano in RGB a 24 bit. Trim(): seleziona i frames da analizzare: è stato necessario eliminare qualche frame all'inizio e alla fine dei filmati in quanto a volte si creavano valori sballati a causa dell'eliminazione o duplicazione di frames. VIDEO 1 sorgente originale: src13_ref__525.yuv Video: luna_park.avi Colore: RGB 24-bit frames: 260 (8,67 secondi) risoluzione 720 x 576 sistema NTSC dimensione: 308 MB giugno 2006 29,97 fps COMPARAZIONE 105 Questa sequenza video è una breve ripresa ambientata in un luna park. E' caratterizzata da molti dettagli e molti colori diversi e da un buon dinamismo dei soggetti. C'è un unico taglio al frame 135 in cui si passa da un piano largo a una mezza figura in cui un papà tiene in braccio un bambino mentre tutto intorno sventolano bandierine e scoppiano palloncini. La codifica in NTSC sembra abbia creato qualche problema nella sincronia durante il confronto. VIDEO 2 sorgente originale: src5_ref__625.yuv Video: canoa.avi Colore: RGB 24-bit frames: 220 (8,80 secondi) risoluzione 400 x 320 sistema PAL dimensione: 80,5 MB 25 fps Questo breve filmato mostra un canottiere che risale per qualche metro un fiume, si gira, torna indietro e saluta il pubblico mentre sullo sfondo si vedono altre canoe. E' un soggetto che rimane fisso al centro dello schermo mentre l'acqua e lo sfondo “scorrono” con molti dettagli in movimento. Non ci sono stacchi. Ho ridotto la risoluzione a 400 x 320 pixel così da testare il comportamento dei codec a risoluzioni inferiori. Facciamo una prima analisi sulla velocità dei codec e sulla correttezza e la qualità del file di output. Impostiamo ogni codec alla massima velocità possibile per una codifica 1-pass: video1: a bitrate costante di 5000 Kbps il file di output corretto dovrebbe essere di: 5000 Kbit/sec x 8,67 sec = 43.350 Kbit = 5.418,75 KB CODEC SEC Kbps SCARTO (%) KB SCARTO (%) PSNR 3vix 8 4796 4,25 5.278 2,67 37,6219 DivX 7 5044 [2] 0,87 5.244 3,33 37,6569 106 COMPARAZIONE giugno 2006 CODEC SEC Kbps SCARTO (%) KB SCARTO (%) PSNR flv1 8 5031 0,62 5.536 2,12 38,2180 Fdd_H.264 29 4887 2,31 5.378 0,76 38,2180 HDX4 8 5048 0,95 5.554 2,44 37,8299 Indeo 5.11 53 4884 2,38 5.374 0,83 35,4350 Mainconcept 32 4990 0,20 5.363 1,04 errore Mpegable 20 4713 6,09 5.115 5,94 errore Mpeg-2 8 4970 0,60 5.351 1,27 33,9742 Nero 45 5012 0,24 5.278 2,67 errore Quicktime 73 5075 1,48 5.390 0,53 errore Real 48 5137 2,67 5.474 1,01 38,8809 Sorenson 80 5223 4,27 5.589 3,05 errore theora 19 5062 [3] 1,22 5.570 2,72 38,0651 VP7 9 5012 [4] 0,24 5.515 1,75 38,8835 [1] VSS 29 5028 0,56 5.532 2,05 38,5731 wmv9 86 5120 2,34 5.513 1,71 35,0351 x264 32 4955 0,91 5.452 0,61 39,3433 XviD 15 4962 [5] 0,77 5.460 0,76 38,8270 [1] misurazione diretta (errore in AVISynth) [2] Nella configurazione del codec ho settato 3500 Kbps. Impostando il bitrate a 5000 Kbps si ottiene in realtà un file di 9.243 KB con bitrate di 8405 Kbps [3] Nella configurazione del codec ho settato 6700 KBPS. Impostando il bitrate a 5000 Kbps si ottiene in realtà un file di 4.549 KB con bitrate di 4132 Kbps [4] Nella configurazione del codec ho settato 5500 KBPS. Impostando il bitrate a 5000 Kbps si ottiene in realtà un file di 5.004 KB con bitrate di 4580 Kbps [5] Nella configurazione del codec ho settato 5300 KBPS. Impostando il bitrate a 5000 Kbps si ottiene in realtà un file di 5.138 KB con bitrate di 4669 Kbps video2: a bitrate costante di 4000 Kbps il file di output corretto dovrebbe essere di: 4000 Kbit/sec x 8,80 sec = 35.200 Kbit = 4.400 KB CODEC SEC Kbps SCARTO (%) KB SCARTO (%) PSNR 3vix 4 4006[1] 0,15 4410 0,23 35,4688 DivX 2 4077 [2] 1,89 4489 1,98 35,9435 flv1 2 4041 1,01 4449 1,10 38,3994 giugno 2006 COMPARAZIONE 107 CODEC SEC Kbps SCARTO (%) KB SCARTO (%) PSNR Fdd_H.264 9 4000 0,00 4404 0,09 36,5352 HDX4 2 3953 1,19 4352 1,10 35,9460 Indeo 5.11 20 4020 0,50 4426 0,59 35,8113 Mainconcept 16 3978 0,55 4365 0,80 - Mpegable 2 3810 4,99 4096 7,42 - Nero 7 3690 8,40 3997 10,08 - Quicktime 20 4062 1,53 4410 0,23 - Real 12 3979 0,53 4289 2,59 40,4095 Sorenson 15 4165 3,96 4475 1,68 - theora 22 4008 [3] 0,20 4413 0,29 38,5570 VP7 6 4036 [4] 0,89 4443 0,97 39,2690 VSS 9 3916 2,15 4311 2,06 39,6566 wmv9 24 4131 3,17 4529 2,85 39,8369 x264 9 3952 1,21 4351 1,13 40,4707 XviD 2 4097 2,37 4510 2,44 39,6461 [1] Nei settaggi ho dovuto mettere 1800 Kbps [2] Nei settaggi ho dovuto mettere 3200 Kbps [3] Nei settaggi ho dovuto mettere 7500 Kbps [4] Nei settaggi ho dovuto mettere 4500 Kbps I valori evidenziati in rosso erano così sballati che per un corretto confronto di PSNR ho dovuto cambiare le impostazioni nei settaggi degli encoder. DivX e 3ivx producevano file sovradimensionati a tal punto che ho dovuto abbassare il settaggio a 3500 Kbps e 1800 Kbps per ottenere file con bitrate e filesize corretti. Al contrario Theora, VP7 e XviD producevano file molto sottodimensionati e ho dovuto alzare i bitrate. Tutti questi verranno quindi squalificati nei grafici seguenti, che mostrano i margini di errore di bitrate e dimensioni dei file di output: 108 COMPARAZIONE giugno 2006 VIDEO 1 VIDEO 2 giugno 2006 COMPARAZIONE 109 Escludendo i codec squalificati, per quanto riguarda l'accuratezza del bitrate a 1-pass, il codec più affidabile è Mainconcept, ma anche altri riescono a stare sotto il margine d'errore dell'1%. Il codec che invece restituisce un file dalle dimensioni più corrette è Quicktime. Nel confronto, il codec che ha meno margini di errore e che quindi si può considerare più corretto e affidabile, è Mainconcept. Vediamo ora le velocità: VIDEO 1 (720 x 576) VIDEO 2 (400 x 320) 110 COMPARAZIONE giugno 2006 Per la velocità vincono a pari merito DivX, HDX4 e Flv1, ma ottimi anche 3ivx, HDX4, MPEG-2 e x.264. Nero, Real e theora sono piuttosto lenti. Quicktime ancora peggio, molto deludente. Wmv9 e Sorenson sono i più lenti. Passiamo alla qualità: VIDEO 1 VIDEO 2 giugno 2006 COMPARAZIONE 111 In una prima analisi della qualità oggettiva sembra prevalere x.264 seguito da Real 10. Bene VP7, VSS e XviD. Su Wmv9 ho dei dubbi che il PSNR in video 1 abbia funzionato bene, ho ripetuto numerose volte il test, ma sempre con lo stesso risultato. Si nota invece il grande distacco con Indeo5 e MPEG-2, come era lecito aspettarsi. Nei prossimi test terrò solo mpeg2 come codec di riferimento col passato (e solo per il video 1, perché a 400 x 320 non ha senso) poiché Indeo5 è ormai obsoleto e non si utilizza più, mentre MPEG-2 invece è ancora lo standard più usato per il buone e alte risoluzioni. Mainconcept, Mpegable, Nero, Quicktime e Sorenson hanno prodotto errori nella misurazione del PSNR che evidentemente ha problemi nel misurare gli mp4. Per questi codec userò una misurazione soggettiva, confrontandoli con il vincitore del PSNR: Tutti gli altri si aggirano intorno al valore 38, un valore molto buono. E' molto difficile valutare soggettivamente in questo caso perché la qualità è alta per tutti e ad occhio nudo non si scorgono differenze significative. Andiamo a vedere un ingrandimento del 90%: 112 Originale Wmv9 x.264 Mainconcept Mpegable Nero Quicktime Sorenson COMPARAZIONE giugno 2006 Da una valutazione soggettiva la conferma di x.264 è netta. Mainconcept se la cava comunque bene. Vediamo ora di analizzare i codec impostandoli per la massima qualità possibile VIDEO 1 CBR 1-PASS 400 Kbits CODEC KB CODEC KB CODEC KB 3vix 2.106 Mpegable 440 theora 1.430 DivX 1.492 Mpeg-2 527 VP7 1.306 flv1 1.274 Nero 531 VSS 1.118 Ffd_H.264 680 Quicktime 1.074 wmv9 641 HDX4 2.090 Real 1.559 x264 524 Mainconcept 1.015 Sorenson 1.688 XviD 1.076 Dalla tabella è chiaro come a bitrate così bassi e a risoluzione così elevata (720 x 576) i codec si comportano in modo strano. La grande differenza in KB tra un video e l'altro la dice lunga. Molti codec non riescono ad ottenere il bitrate ricercato: si va dai 2708 kbps di Ffd_H.264 ai 469 kbps di x.264. Le analisi effettuate non sono quindi valide e vengono riportate solo a fini informativi. giugno 2006 COMPARAZIONE 113 1000 Kbits Come nel test precedente, utilizzando la funzione 1-pass molti codec non riescono a raggiungere il bitrate richiesto. I risultati non sono validi. Vengono riportati comunque i grafici della qualità. Gli unici codec che hanno rispettato il bitrate richiesto sono: Mainconcept, MPEG-2, Mpegable, Nero, Quicktime e x.264. Tra questi, la mia analisi soggettiva li premia nel seguente ordine: x.264: 5 Mainconcept: 4 Quicktime: 3 Nero: 3 Mpegable: 2 MPEG-2: 0 2000 Kbits Vince di un soffio Real 10, seguito con un lievissimo distacco da x.264. Fdd_H.264 e 3ivx vengono squalificati in quanto ancora una volta restituiscono un file con un bitrate a 2700 kbps invece che 2000. Nei 2 grafici seguenti si vedono le curve del PSNR in dettaglio: ho diviso in 2 grafici per una maggiore chiarezza, prendendo DivX come codec di riferimento. Si nota come tutti i codec abbiano 114 COMPARAZIONE giugno 2006 più problemi nella seconda parte del video, quando si taglia sulla mezza figura. blu: DivX viola: MPEG-2 rosso: flv1 verde: HDX4 arancione: Wmv9 salmone: VSS blu: DivX rosso: Real verde: theora viola: VP7 arancione: x.264 salmone: XviD Il SSIM e il VQM confermano i risultati del PSNR: VBR - 2PASS Nota: Non tutti i codec permettono la modalità 2-pass. Ove non possibile verrà utilizzata la modalità 1-pass. 600 Kbps Anche con 2 passate molti codec a 600kbps e risoluzione 720 x 576 non riescono a lavorare giugno 2006 COMPARAZIONE 115 correttamente. Tralasciamo quindi i risultati. 1000 Kbps Dal grafico sembrerebbe vincere VP7 seguito da theora. Questi due codec però hanno restituito un file con bitrate troppo alto (1330 e 1770 rispettivamente) pertanto la mia scelta come vincitore è invece x.264 che supera i 32,5 con un bitrate di soli 1080kbps. Confrontiamolo attraverso una valutazione soggettiva con gli altri codec mp4 che non sono potuti entrare nel grafico: x264: 4 quicktime: 3 nero: 3 mainconcept: 3 mpegable e sorenson: errori rispettivamente nella decodifica e nel file-size 2000 Kbps Questa volta VP7 centra perfettamente il bitrate e vince, ma x264 gli è molto vicino. Contando che x264 ha prodotto un file con 100 kbps meno del rivale, potremmo dire che in questo caso ci sia un 116 COMPARAZIONE giugno 2006 pareggio. Ecco le curve del PSNR: blu: DivX rosso: 3ivx verde: flv1 viola: HDX4 arancione: real salmone: theora blu: DivX rosso: VP7 viola: Wmv9 arancione: x.264 verde: VSS salmone: XviD I grafici di SSIM e VQM: giugno 2006 COMPARAZIONE 117 Confrontiamo i vincitori con gli altri codec con una valutazione soggettiva: x264: 5+ VP7: 5 Mainconcept: 5 nero: 4 Quicktime: 4 sorenson: 4 mpegable: 3 4000 Kbps E' netta la vittoria di VP7, come sempre seguita da x.264 e da Real. Vediamo ricomparire fdd_h.264 che finalmente riesce a dare in output un file con un bitrate corretto, ma le prestazioni sono piuttosto scarse. Notiamo come ci sia ancora un grande distacco con MPEG-2 nonostante il bitrate a 4000 kbps sia più consono alle sue frequenze di lavoro standard (che si aggirano attorno ai 7000 kbps nei DVD), a testimoniare che i nuovi codec H.264 sono sicuramente la scelta migliore 118 COMPARAZIONE giugno 2006 anche per i nuovi standard internazionali e per i nuovi supporti ottici. VIDEO 2 Per il video 2 riassumo in un grafico i risultati dei PSNR ai diversi bitrate: Dal grafico e dal confronto soggettivo con gli altri codec non misurabili oggettivamente, VP7 si conferma come il codec con la migliore qualità visiva. Stavolta x.264 va molto male, mentre guadagna il secondo posto Real Video seguito da Wmv9. Ma bene anche Xvid, Quicktime, Mainconcept e Nero. VIDEO 3 Rugby.avi Questo video ha le stesse caratteristiche del video 2, tranne che per la risoluzione di 600 x 480. Vince di nuovo x.264 e ancora bene Wmv9 giugno 2006 COMPARAZIONE 119 Valutazione Soggettiva Riporto di seguito 2 tabelle con 2 livelli di dettaglio delle immagini prese dal video 1. La prima riporta un confronto su uno zoom del 60% del frame 146, la seconda su uno zoom all'80% del frame 152. La prova visiva conferma quanto ipotizzato attraverso le misurazioni oggettive e soggettive. X264 e VP7 sono sicuramente i codec che riproducono un'immagine più simile all'originale, mantenendo i dettagli (si osservino i coriandoli sul viso del bambino) e la nitidezza delle linee. Originale Originale Pag. 121: 2-pass VBR 2000 Kbps – dettaglio zoom 60% Pag. 122: 2-pass VBR 2000 Kbps – dettaglio zoom 80% 120 COMPARAZIONE giugno 2006 Mainconcept 3ivx DivX flv1 Quicktime Real HDX4 Nero theora VP7 VSS Wmv9 x264 XviD Sorenson giugno 2006 COMPARAZIONE 121 122 Mainconcept 3ivx DivX flv1 Quicktime Real hdx4 nero theora VP7 vssh Wmv9 x264 XviD sorenson COMPARAZIONE giugno 2006 CONCLUSIONI FINALI E' difficile trarre delle conclusioni assolute in quanto come abbiamo visto i codec hanno caratteristiche diverse tra di loro e le loro prestazioni variano a seconda del video e della risoluzione. Una cosa abbastanza certa è che se un codec ha delle buone prestazioni per un certo bitrate, ce le avrà anche per tutti i bitrate; se invece va male andrà male in tutti i bitrate. Questo mi porta a dire che per testare i codec sarebbe più opportuno fare molti test su molti video diversi tra loro ma a pochi bitrate precisi. Nel trarre le mie conclusioni mi baserò anche sui risultati, sicuramente più autorevoli dei miei, di alcune comunità scientifiche riconosciute a livello mondiale. Una di queste è il CS MSU Graphics&Media Lab Video Group, che ha effettuato recentemente dei test su alcuni dei codec che ho preso in analisi (con più di 3000 grafici e numerosissimi test su tutti i bitrate). Prima di tutto vorrei dare un giudizio sull'usabilità dei codec. Ho avuto davvero parecchi problemi per capire come alcuni di questi andassero usati correttamente. Sebbene i codec VFW (Video For Windows) siano ancorati ad AVI e non sfruttino le potenzialità dei nuovi container, sono ancora quelli che garantiscono maggior compatibilità. A parte i software di misurazione oggettiva, che in teoria, senza frameserving, accetterebbero solo AVI in input, c'è tutta una serie di applicazioni per l'editing e la visione degli AVI che è sicuramente più vasta e inter-compatibile rispetto ad mp4. Ho avuto problemi nel demux e nel visualizzare correttamente molti dei codec AVC che ho testato. Mpegable risulta leggibile correttamente quasi solo all'interno del suo player e questo lo penalizza molto, dà parecchi problemi per la decodifica. Stessa cosa vale per mainconcept H.264 e per Sorenson, anch'essi con alcune difficoltà nella lettura con i player più diffusi. Nero è risultato invece abbastanza versatile, e anche Quicktime e Real Video non hanno avuto particolari problemi. Wmv9 è stato problematico in quanto l'applicazione Windows Media Encoder non accettava i video di test in ingresso, quindi ho dovuto usare il programma di Sorenson, X4Live, per utilizzarlo. Wmv9 Advanced Profile (VC-1) era già disponibile per i primi test al momento della pubblicazione di questo documento, ma dopo alcune prove di utilizzo con un software apposito (in versione alpha) ho deciso che non era ancora maturo per partecipare al confronto. In definitiva, tra i codec AVC più versatili c'è sicuramente x.264: permette il settaggio manuale di molti parametri, può scegliere vari formati di output ed essendo ancora in via di sviluppo potrà solo migliorare le sue funzionalità. Il più maneggevole e facile da usare è sicuramente Nero Digital, che fornisce un'ottima piattaforma click'n go (io ho utilizzato Nero Recode) stand-alone e senza bisogno giugno 2006 COMPARAZIONE 123 di nessuna configurazione o conoscenza particolare. I codec più veloci sono DivX e HDX4 ma tra i due è preferibile il primo perché alla stessa velocità si ottiene maggior qualità dell'immagine. I codec con migliore qualità visiva mi sono sembrati x.264 e VP7 ma qui l'incertezza è molta considerato che la qualità varia a seconda del filmato. Altri miei colleghi autorevoli sono comunque d'accordo e ritengono questi due codec tra i migliori. x.264 è un codec H.264/AVC di ultimissima generazione, tuttora in sviluppo con release quasi settimanali, è gratuito e opensource e questo è un grosso punto a suo favore. VP7 non è AVC ma si è rivelato un'alternativa molto valida all'MPEG-4 ed è gratuito. Quicktime 7 è il codec di Mac OSX, dell'I-pod, di tutto ciò che circonda il mondo Apple. Molti utenti Macintosh conoscono solo questo codec e si trovano comunque bene. Sicuramente non è male, ma c'è di meglio in giro. Soprattutto la pecca di Quicktime è la lentezza: è davvero esasperante aspettare un minuto quando altri codec impiegano pochi secondi per fare la stessa cosa. Ma Microsoft riesce a fare ancora peggio, ottenendo con Wmv9 prestazioni velocistche scandalose. Visivamente il codec di casa Redmond è molto valido alle basse risoluzioni, ma ciò non ne giustifica l'utilizzo se paragonato ad alternative gratuite e più performanti. Real Video 10 è una di queste, con un ottimo livello qualitativo dell'immagine ma il fatto che utilizzi container e standard proprietari secondo me ne limita la diffusione tra la massa. Sorenson AVC Pro è un codec AVC senza grandi pretese ma con un software di utilizzo intuitivo e funzionale. Certo secondo me non vale i 399 $ della licenza, veramente un po' fuori luogo per le prestazioni mediocri che ha avuto nei test. E' lento e tende a “spalmare” l'immagine eliminando molti dettagli. VSS sta un po' nel mezzo, è sicuramente un buon codec AVC ma considerando che nemmeno lui è gratuito forse non vale la pena. 3ivx è un po' vecchio ma dice ancora la sua se comparato con i nuovi codec. Ormai comunque sarebbe il caso di metterlo da parte. I codec di ffdshow Flv1 e ffd_H.264 mi hanno lasciato un po' perplesso, sono indubbiamente validi ma hanno poca, come dire, “personalità”. Theora è interessante ma non da molta sicurezza per il futuro, come compare nel messaggio bene in vista sull'interfaccia “Usare solo per scopi sperimentali, il codec potrebbe diventare incompatibile in futuro”. La battaglia tra DivX e Xvid secondo me si chiude in un sostanziale pareggio. I due codec si comportano in modo simile e insistere sul confronto tra questi due, come avviene ormai da molti mesi su Internet, mi sembra inutile. Certo, conoscendo la storia di entrambi (XviD è nato da una "costola" di DivX) è normale che nasca rivalità, ma il confronto confluisce spesso nella consueta guerra di religione tra Closed-source e Open-source. DivX 6.5 sembra apportare dei miglioramenti significativi rispetto alle versioni passate, e lo riporta a gradini un po' più dignitosi rispetto ai test dei mesi scorsi. E' comunque ancora un buon punto di riferimento per i codec nonAVC. XviD, prima dell'avvento del recentissimo x264, era il miglior codec video opensource disponibile. E' molto simile a DivX nelle prestazioni, quindi in generale buono, ma visivamente non 124 COMPARAZIONE giugno 2006 all'altezza dei codec H.264. Aspettiamo la prossima release di XviD AVC e vedremo come andrà il confronto con il suo nuovo rivale x264. Nel frattempo possiamo concludere che tra DivX e XviD è sicuramente preferibile il secondo, considerato che è gratuito e opensource, mentre la licenza di DivX è a pagamento. Personalmente, e tenendo conto di tutto, posso conferire il titolo di miglior codec lossy a: x.264 giugno 2006 COMPARAZIONE 125 APPENDICE LA STORIA DI DIVX Nel 1997, la Microsoft inizia a sviluppare un innovativo sistema di compressione video. Il suo obiettivo è creare un file video di ottima qualità e di ridotte dimensioni, da destinare allo streaming e alla diffusione nella rete. Tuttavia, la ristretta banda delle connessioni Internet e l'impossibilità di sfruttare il già creato formato Mpeg, si schierano come un ostacolo insormontabile. Dopo circa un anno, gli sviluppatori dell'azienda di Seattle realizzano il sistema di compressione Div (Digital Internet Video) che fu chiamato MPEG-4 (codename Windows Media Video V3) e scherzosamente definito l'Mp3 del video. Fu deciso di associare a questo tipo di file l'estensione ASF (Advanced Streaming Format) e, di conseguenza, nel codec fu integrata la funzione AVI Lock, in modo da impedire la creazione di file video AVI. Nonostante gli sforzi dei programmatori, i risultati furono, però, pessimi: l'immagine, in particolare nelle scene molto movimentate, tendeva a rovinarsi in modo ben visibile. Dunque, il progetto fu abbandonato (verrà ripreso per creare il formato WMV). Nasce il DivX Nel 1998, un hacker francese di nome Jerome Rota (allora conosciuto in rete come Gej), deluso dal formato ASF e interessato all'idea di creare un formato video adatto alla diffusione in rete, decide di estrarre il codice sorgente dal codec. Nell'estate del 1999, grazie all'aiuto dell'hacker tedesco Max Morice, ci riesce e viene a conoscenza dell'algoritmo di compressione che è il cuore dell'Mpeg-4. Come prima modifica, annullano il sistema AVI Lock, permettendo, così, la realizzazione di file AVI in formato Mpeg-4. Successivamente, integrano un sistema per riprodurre l'audio nel formato Mp3: una modifica che, nella sua semplicità, permette di ridurre ulteriormente le dimensioni finali del file video. Jerome decide di chiamare il codec DivX ;-) (includendo nel nome una emoticon sorridente, con riferimento sarcastico al fallimento del Div di Microsoft). DivX ;-) 3.11 alpha Nell'ottobre del 1999, dal sito http://divx.ctw.cc il codec prodotto da Jerome inizia a circolare nella rete come DivX ;-) release 3.11 alpha. Fornito di un'interfaccia che viene richiamata nell'ambito della creazione di un file DivX, il codec presenta due impostazioni principali: una definita Low 126 COMPARAZIONE giugno 2006 Motion e una definita Fast Motion, la prima destinata all'elaborazione di filmati con molte scene statiche, la seconda, invece, di filmati con molte scene d'azione e dinamiche. Permette di impostare key frame e il bitrate per definire la compressione del video. L'unico difetto di questa versione è l'impossibilità di gestire il flusso audio nel formato WMA. Jerome, infatti, nomina la sua versione alpha perché, ancora, non è riuscito a crackare il codice del codec Mpeg-4 predisposto alla gestione del WMA e del decoder Direct Show. Il progetto Mayo Il codec DivX ;-) 3.11 alpha si dimostra essere una vera rivoluzione nel campo della creazione di file video con immagini di alta definizione e di ridotte dimensioni in Megabyte. Con il successivo avvento dei programmi di decriptazione dei DVD (il DeCSS) e di software freeware per generare file video, il DivX diventa il punto di riferimento per tutti coloro che vogliono copiare film DVD sui più diffusi ed economici CD-Rom. Dato l'enorme successo, Jerome decide di sviluppare il DivX a un livello più professionale e, soprattutto, legale, in quanto prodotto da una copia rubata del Mpeg-4 di proprietà Microsoft. Quindi, assieme a Joe Bezdek e Eldon Hylton, fonda la Project Mayo, con lo scopo di realizzare una versione ufficiale ed evoluta del DivX. Nel 2000, Jerome e i suoi colleghi iniziano lo sviluppo del DivX 4. Sfruttando le esperienze acquisite dal precedente codec e rielaborando l'algoritmo di compressione video in modo da essere del tutto estraneo da quello dell'Mpeg-4, vengono realizzate alcune versioni alpha che, purtroppo, risultano deludenti. Nonostante la buona qualità, le prestazioni e la velocità di elaborazione sono nettamente inferiori al DivX 3. DivX 4.0 Il 18 Luglio 2001, la Project Mayo rilascia la prima beta ufficiale del DivX 4.0 (successivamente, usciranno la beta 2 e la beta 3). Finalmente, tutti i problemi delle release precedenti sono stati risolti. Il nuovo codec è velocissimo nell'elaborazione, restituisce una sorprendente qualità dell'immagine ed è totalmente compatibile con tutte le versioni precedenti. L'ultima versione di questa release sarà la 4.11 Final. Molte sono le funzionalità introdotte rispetto alla versione 3, in particolare: • Codifica a 1 o a 2 passaggi: nella versione 3 era possibile la creazione di un file video ad un unico passaggio. Adesso, è possibile creare un file video anche attraverso 2 passaggi, dove il giugno 2006 COMPARAZIONE 127 primo ha il compito di analizzare il filmato per individuare le impostazioni migliori per generare il DivX. Datarate aumentato: adesso è possibile utilizzare un datarate fino a 6000 kbps. • DivX 5.0 Nel 2002 ormai il DivX si è imposto come scelta privilegiata per chi crea copie di DVD e diffonde filmati nella rete. Jerome fonda la DivX Network Inc. Il suo intento è commercializzare il codec DivX e tentare di introdurlo nell'ambito della produzione professionale. Il 3 Settembre rilascia il nuovo codec DivX 5.0, disponibile in tre versioni per i sistemi operativi Windows, Linux e Macintosh: Bundle Edition: una versione gratuita contenente il codec per la sola riproduzione dei film in • DivX e un Player specifico. • Standard Edition: una versione a pagamento del codec per riprodurre e creare DivX. • Professional Edition: una versione a pagamento simile alla versione Standard che include il software Dr. DivX, specifico per la creazione di film in formato DivX. Le novità introdotte rispetto alla versione 4 sono tantissime, ma queste le più rilevanti: • One-pass VBR (Bitrate Variabile) • Encoding in più passi (multi-pass encoding) • Possibilità di selezionare il numero di key-frame • Inserimento key-frame Automatico • Rilevamento automatico della scena • 5 livelli di qualità di compressione predefiniti • Possibilità di impostare il ridimensionamento del video (resizing) • Possibilità di tagliare parte del video (cropping) 128 COMPARAZIONE giugno 2006 • Risoluzione: qualsiasi intero multiplo di 4 fino a 1920x1088 • Bitrate fino a 8000 Kbps • Compatibilità con il formato Mpeg-4 Rivoluzione: il DivX 6.0 Nel Novembre del 2004, la DivX Labs (una sezione della DivX Networks Inc. dedicata allo sviluppo del codec) annuncia il rilascio di DivX Plasma Alpha. Si tratta del primo prototipo dell'atteso DivX 6. Ma si dovrà aspettare l'estate del 2005 per l'uscita ufficiale della sesta release. DivX 6 non è una semplice, nuova versione del codec. Si tratta di una vera e propria rivoluzione. DivX 6, oltre ad una serie lunghissima di migliorie tecniche, supporta una serie di novità che lo rendono il diretto concorrente del DVD. Adesso, infatti, può incorporare menu interattivi, capitoli, sottotitoli, tracce audio e video indipendenti (per nuove lingue e nuovi contenuti video) e l'audio fino a 6 canali (quindi dal Surround 5.1 al DTS). DivX "alternativi" La storia del DivX è un percorso molto travagliato: è nato come prodotto illegale da una versione crackata dell'Mpeg-4 di Microsoft, quindi diventato un prodotto freeware e legale, infine sviluppato come prodotto commerciale. Se ad un lato, l'essere diventato una soluzione a pagamento, gli ha permesso di raggiungere elevati standard qualitativi e di integrare funzioni molto avanzate, dall'altro lato ha, certamente, deluso tutta quella utenza che abbraccia la politica open source e del "software libero". Per questo motivo, mentre la DivX Networks Inc. sviluppava il DivX come soluzione avanzata commerciale, altri hanno utilizzato il codice nativo del "vecchio" DivX per creare delle soluzioni alternative. Kristal Studio e DivX 3.2 Verso la fine del 1999, un gruppo di appassionati di DivX fonda la Kristal Studio. Utilizzando il codice del DivX ;-) 3.11 alpha, sviluppano un codec alternativo: eliminano l'elaborazione Fast Motion (a favore di un miglioramento del Low Motion) e vi integrano la tecnologia VKI (acronimo di Variable Keyframe Interval, inizialmente disponibile come patch da installare separatamente) che inserisce automaticamente un keyframe ad ogni cambio di scena. Inizialmente, il nuovo codec viene giugno 2006 COMPARAZIONE 129 distribuito come DivX ;-) 3.11 VKI. Successivamente, la Kristal Studio decide di cambiarne la release in 3.2 (la cui versione definitiva sarà la 3.22). OpenDivX Nel Gennaio del 2001, la Project Mayo inizia a sviluppare il codec DivX Deux, allo scopo di creare un codec DivX indipendente, legale ed evoluto. Quindi, propongono a tutti gli utenti un progetto open source per avviare lo sviluppo dell'OpenDivX, il codice che sarà alla base del DivX Deux. Come base di partenza, rielaborano il coder del MoMuSys (una versione open source del codec Mpeg-4), mentre decidono di sviluppare da zero il decoder. Durante lo sviluppo, la Project Mayo decide di disporre un'autorizzazione restrittiva al codice: solo i membri del DARC (DivX Advanced Research Center) possono partecipare. Nel Giugno del 2001, improvvisamente, la Project Mayo decide di chiudere il progetto OpenDivX scatenando il dissenso di tutti coloro che avevano partecipato. La Project Mayo viene, quindi, accusata di aver sfruttato le idee dei partecipanti per sviluppare il DivX 4. XviD Poco prima della chiusura del progetto OpenDivX, uno dei membri del DARC, un giovane programmatore che si faceva chiamare Sparky, sviluppa la tecnologia encore2, destinata alla codifica del flusso video. Chiuso il progetto OpenDivX, l'encore2 viene utilizzato nel codec DivX4. Deluso e indignato, Sparky decide non solo di continuare lo sviluppo di encore2, ma di creare un proprio progetto, chiamandolo XviD, il cui nome non è altro che DivX letto al contrario (una evidente azione sarcastica). Nel Luglio del 2001, Sparky apre il sito www.xvid.org e ufficializza il suo progetto open source. Le prime versioni hanno un buon successo ed integrano funzioni molto avanzate come: • utilizzo di b-frame; • global and quarter pixel motion compensation; • lumi masking; • Trellis quantization; 130 COMPARAZIONE giugno 2006 • tecnologia H.263 e mpeg. Tuttavia, alcune funzioni integrate risultano essere protette da licenza in alcuni paesi. Dunque, Sparky compila subito la versione 1.0 e la pone sotto licenza GNU GPL v2. Oggi, il codec Xvid è considerato il diretto e degno concorrente del DivX. 3ivX Sviluppato dalla 3ivX Technologies, il codec 3ivX non deriva direttamente dal DivX, ma sfrutta la parte di codice dell'Mpeg-4 preposta all'encoding che è stata alla base del DivX fino alla versione 5. Per questo motivo, il codec 3ivX è in grado di riprodurre filmati creati con le versioni 3, 4 e 5 del DivX e anche quelli creati con l'Xvid. Il codec 3ivX è particolarmente apprezzato nell'ambiente Macintosh poiché è stato il primo codec basato sull'Mpeg-4 ad offrire, sin da subito, un totale supporto al sistema operativo Mac OS. giugno 2006 COMPARAZIONE 131 BIBLIOGRAFIA • • • • • • • • • • • • • • • • • • • Wikipedia "The free Encyclopedia", www.wikipedia.org MPEG, Movie Pictures Experts Group, www.chiariglione.org/mpeg/ International Telecommunication Union, www.itu.org MPEG Industry Forum, www.m4if.org "AVC+AAC: The Next Generation of Compression", Harmonic white paper, www.harmonicinc.com "The emerging H.264/AVC standard", EBU Tech. Rev, www.ebu.ch "H.264/MPEG-4 AVC Video Compression Tutorial", LSI Logic, www.lsilogic.com Compression Project, www.compression.ru/video/ CRIT, "Centro Ricerche e Innovazione Tecnologica", www.crit.rai.it Institute for Telecommunication Sciences (ITS) Video Quality Research Project, www.its.bldrdoc.gov/n3/video/index.html Video & Image Compression Resources and Research, www.vcodex.com/h264.html "Image and Video Compression Standards: Algorithms and Architectures", Vasudev Bhaskaran e Konstantinos Konstantinides, edizioni Springer, II edizione, 1997 "H.264 and MPEG-4 Video Compression: Video Coding for Next Generation Multimedia", Iain E.G. Richardson, edizioni Jhon Wiley & Sons, 2003 DSP Research, www.dspr.com/www/technology/technology.htm www.divxmania.it Doom9, il più autorevole forum dedicato ai codec, www.doom9.net "La compressione video Mpeg4", Andrea Panisson, http://andypanix.altervista.org "Trattamento e Compressione di Dati Multimediali", Ignazio Infantino, ICAR-CNR, www.pa.icar.cnr.it/infantino/slides_tcdm/ "I formati MPEG-1 e MPEG-2", http://www.benis.it/dvd/mpeg/mpeg.htm Simone Chiesa [email protected] 132 COMPARAZIONE giugno 2006
Documenti analoghi
Formati video - Pagina principale
Quindi il container da l’estensione al file: i container AVI hanno estensione .AVI, i container
Matroska hanno .MKV e così via.
Detto questo è facile capire che quando si scarica un file dal nome s...