Comparativa Codecs


Scritta da Type R il 11-01-2006

Una comparativa tra 5 differenti codec.
In esame: 3ivx, Xvid, Divx, x264 e vp7



Con questo articolo sicuramente non andrò a risolvere l'annoso problema che crea il dubbio se usare il codec DivX o il codec XviD new_smileyb.gif

I codec presi in considerazione per questa comparativa sono 5, e precisamente

3ivx versione 4.5.1 http://www.3ivx.com
XviD 1.1.0 Finale http://www.xvid.org
DivX 6.1.0 http://www.divx.com
x264 build 394 http://x264.nl
vp7 versione 7.0.9.0 http://on2.com

La scelta dei codec XviD e DivX, non necessita di spiegazioni, sono i due codecs MPEG4 più famosi e da sempre si discute o si cerca di capire quale dei due sia il meglio.
Tali codec rappresentano attualmente quasi il massimo sviluppo possibile per un codec MPEG4 ASP, infatti da parecchio tempo ormai non hanno subito grandi cambiamenti ma solo degli affinamenti.

Il codec x264 è stato scelto perchè oltre ad essere opensource e decisamente promettente, rappresenta il futuro dei codec MPEG4 visto che implementa (parte) della norma AVC, che altro non è che un insieme di caratteristiche e funzionalità previste dallo standard MPEG4.
Leggete l'articolo scritto da Echelon per capire e farvi un' idea di cosa siano i codec MPEG4 AVC, lo trovate su questa pagina.

Il codec 3ivx è stato scelto per il motivo contrario, 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.

Il codec vp7 infine, è stato scelto perchè non è un codec MPEG4 ed molto performante.

In questo articolo l'analisi dei codec verrà presentata sia con l'ausilio dello strumento di paragone PSNR (leggete ]questo articolo di Aytin per capire cosa sia il PSNR), sia con degli esempi visivi che permetteranno di confrontare il comportamento sul "campo" dei 5 concorrenti

Ho deciso di usare questi due metodi poiché l'utilizzo di uno solo dei due non è sufficiente a fare un quadro abbastanza fedele di come stanno realmente le cose.

Una sola analisi di tipo strumentale per confrontare il risultato ottenuto da due codec diversi ha poco senso, perché tale tipo di analisi può venir falsata da particolari magari impercettibili dall' occhio.
Se ad esempio un codec ha tendenza a dare in output un video rispetto all'originale leggermente più scuro o più chiaro, o con una tonalità di colore leggermente più diversa rispetto ad un codec concorrente si rischia di aver un PSNR decisamente inferiore anche se la qualità dell'immagine ed il dettaglio mantenuto sono di alto livello.
Ovviamente il mantenimento della luminosità e dei colori originali è importante per la valutazione del lavoro fatto da un codec, ma se tali variazioni sono minime (e in genere non sempre confrontabili con l'originale), personalmente preferisco un codec che mantiene più dettaglio e che crea meno artefatti. Al limite, basta agire sulle impostazioni del decoder (o del monitor) per sistemare come si preferisce la colorimetria e la luminosità del video.
Ovviamente tramite l'analisi dell' andamento del PSNR si puo' capire come si comporta un codec e in genere individuare dove un codec si comporta meglio di un' altro e di fare delle ipotesi sul perché a volte in certe sequenze un codec si comporta male.

Qualche riga fa ho parlato di decoder, se non avete ben chiaro di cosa di tratta, leggete questo articolo scritto da Aytin a riguardo.

Per questa comparativa ho deciso di prendere in considerazione i seguenti films

La Guerra dei Mondi
Perché ha la particolarità di presentare un rumore di fondo molto accentuato che ha la tendenza di mettere in crisi i codec video specie a basso bitrate.
Oltre a questo presenta scene ad alta azione, scene tranquille, scene statiche, scene luminose e scure, esplosioni…
Insomma, a mio giudizio, un buon film per mettere alla frusta i codecs.
La compressione video è stata eseguita con tutti i codec con un bitrate di 1000 kbps, in modo che postesse esser contenuto in 2 cd con la traccia audio italiana in formato AC3 a 448 kbps e con la traccia inglese compressa in ogg vorbis a 6 canali con bitrate di circa 290 kbps.


Sin City
Perché ha la particolarità di avere un buona qualità video (almeno quello in vendita, quello a noleggi non so…) e di essere quasi totalmente in bianco e nero.
La caratteristica di essere in bianco e nero ci permette di capire come si comportano i codecs quando manca un componente importante per decidere quali strategie adottare per eseguire la compressione, il componente di cui sto parlando ovviamente è il colore. new_smileyb.gif
La compressione è stata eseguita con un bitrate di 685 kbps, in modo che venisse contenuto in un CD con audio MP3 a 128 kbps

Stealth, Arma Suprema
Un film d'azione con ampi paesaggi un movimento, che a livello video non presenta particolarità degne di nota, quindi più o meno da l'idea di come si comportano i codec con un film d'azione.
La compressione è stata eseguita con un bitrate di 706 kbps, in modo che venisse contenuto in un CD con audio MP3 a 128 kbps.





I test non sono stati eseguiti sulla totalità del film ma solo su una parte di essi, comunque su spezzoni da 50.000 – 70.000 frames, più che sufficienti per far esprimere i codecs e capire come si comportano.
Sfortunatamente non vi posso proporre l'esempio di un anime perché non ne ho a disposizione, magari in futuro aggiornerò la comparativa.
Ad ogni modo i titoli di inizio di Syn City assomigliano molto ad un anime, quindi non vi resta che leggere la parte riguardate questo film per avere un' idea di come i codec si comportano con gli anime.



Le impostazioni dei codec non si discostano molto dalle impostazioni standard, per 6 motivi, Ecco in definitiva le impostazioni usate

Per 3ivx
Tutto per default tranne:
- modalità a 2 passate
- key-frame interval a 250

Per XviD
Tutto per default tranne:
- modalità a 2 passate
- key-frame interval a 250
- max consecutive b-frames 1
- VHQ1 anche per b-frames
- Home Theatre profile

Per DivX
Tutto per default tranne:
- modalità a 2 passate
- key-frame interval a 250
- max consecutive b-frames 1
- Modalità di compressione "better quality"
- Home Theatre profile

Per x264
Tutto per default tranne:
- modalità a 2 passate
- key-frame intervall a 250
- max consecutive b-frames 1 adaptative

Per vp7
Tutto per default tranne:
- modalità a 2 passate
- key-frame intervall a 250
- modalità "good quality" (l'altra possibilità è "better quality" ma la compressione è scandalosamente lenta).

Ovviamente il bitrate come ho detto prima varia a seconda del film.


Bene, ora non vi resta che leggere le pagine relative al confronto dei 3 films, le trovate nelle pagine seguenti a questa oppure cliccando sui links sottostanti:

Il bitrate impostato per questo film è di 1000 kbps, la dimensione finale teorica dovrebbe essere di 270020 kB e questi sono i risultati delle dimesioni finali ottenute dai vari codecs:

CODE

____________________________
|     |  size  |  bitrate  |
|-----|--------|-----------|
|3ivx | 270906 | 1000 kbps |
|XviD | 269160 |  993 kbps |
|DivX | 271366 | 1001 kbps |
|x264 | 271306 | 1001 kbps |
|vp7  | 271316 | 1001 kbps |
----------------------------


Tutti i codecs sono stati abbondanti eccetto XviD che ha creato un file leggermente sottodimensionato.

Nel grafico che segue potete vedere l'andamento del bitrate usato nella prima passata dal codec XviD, tale andamento da l'idea di come la prima parte del video in questione necessiti di un bitrate decisamente sopra la media, mentre nella seconda parte più tranquilla il bitrate necessario è inferiore alla media.

user posted image
user posted image

in blu xvid
in rosso divx
in magenta x264
in verde vp7
in giallo 3ivx

Come potete vedere, l'andamento del PSNR e direttamente legato all'andamento del bitrate, in genere in corrispondenza di un picco positivo del bitrate c'è un picco negativo del PSNR.
Uno dei parametri per giudicare la bontà di un codec, oltre a quello di avere un PSNR più alto possibile, è quello di analizzare quanto è regolare la curva di PSNR, quindi più è "pianeggiante la curva" (a parità di valore medio) migliore apparirà anche visivamente la qualità del filmato.

Le curve per tutti i codecs hanno un andamento simile, nella parte che richiede più bitrate tutti i codec hanno mediamente un valore di PSNR più basso rispetto alla zona dove il bitrate richiesto è meno importante.

Nella prima parte la curva di vp7 è quella che in genere sta sempre sopra le altre, la curva di x264 invece ha un andamento molto irregolare tanto che in alcuni casi passa sotto anche alle curve di XviD e DivX.
Per questi ultimi due notere come XviD abbia tendenza nella prima metà del video ad avere valori di PSNR nettamente superiori a DivX.
3ivx invece sta sempre sotto ai concorrenti, anche se in qualche occasione supera DivX.

Nella seconda metà del video (quella più tranquilla), si vede come x264 prenda un buon vantaggio sui concorrenti, mentre vp7 si posiziona a livello di XviD e DivX, quest' ultimo nella seconda parte sembra aver mediamente un PSNR superiore a XviD.
3ivx invece sembra non reggere il passo dei concorrenti.


Questi sono i valori di PSNR ottenuti con postprocessing disattivato, per ogni codec ho usato il suo decoder, per x264 è stato usato ffdshow

CODE

___________________________
|     | overal  | avrage  |
|-----|---------|---------|
|3ivx | 41.7389 | 42.2645 |
|XviD | 42.5052 | 43.0691 |
|DivX | 42.2423 | 42.7683 |
|x264 | 42.9430 | 43.5966 |
|vp7  | 42.9637 | 43.3461 |
---------------------------



Il PSNR medio (average) più alto appartiene a x264, merito sopratutto dell' exploit fatto nella seconda parte del filmato, seguito da vp7 che però ha il PSNR globale (overal) più alto, segno che che durante tutta la durata del filmato è quello che ha avuto un livello di qualità più costante. Seguono in ordine discendente gli altri codec XviD, DivX e 3ivx



per la compressione è stato usato virtualdubmod + avisynt, lo script è stato un semplice:

CODE

LoadPlugin("C:\PROGRA~1\GORDIA~1\DGMPGDec\DGDecode.dll")
mpeg2source("C:\WOTW_D1_ITALY\VIDEO_TS\gm.d2v")
crop(0,12,718,552)
LanczosResize(640,336)




>>>cliccando qui accederete alla pagina di confronto visivo <<<
  Il bitrate impostato per questo film è di 685 kbps, la dimensione finale teorica dovrebbe essere di 181482 kB e questi sono i risultati delle dimesioni finali ottenute dai vari codecs:

CODE

____________________________
|     |  size  |  bitrate  |
|-----|--------|-----------|
|3ivx | 183436 |  689 kbps |
|XviD | 182434 |  686 kbps |
|DivX | 182742 |  686 kbps |
|x264 | 182724 |  686 kbps |
|vp7  | 182010 |  685 kbps |
----------------------------


Tutti i codecs anche questa volta sono stati abbondanti, quello che si avvicina di più e vp7, mentre quello che sfora maggiormente è 3ivx.

Nel grafico che segue potete vedere l'andamento del bitrate usato nella prima passata dal codec XviD, contrariamente al caso del film "La Guerra dei mondi", non c'è una prima parte che mediamente necessita più bitrate dell'altra, per tutta la durata del filmato si possono notare dei picchi nettamente sopra e sotto la media.

user posted image
user posted image

in blu xvid
in rosso divx
in magenta x264
in verde vp7
in giallo 3ivx

Le curve per tutti i codecs combaciano per la maggior parte del tempo, questo molto probabilmente è dovuto al fatto che su un filmato in bianco e nero il confronto tramite PSNR non puo' avvalersi dei dati relativi al colore. L'unico codec che ogni tanto sembra perder terreno è DivX. Da un'analisi fatta ho scoperto che tale scostamento avviene nei frame prevalentemente neri, probabilmente DivX applica una strategia di compressione più imprtante. Tale fenomeno si verifica solo se si selezionano le modalità di compressione "Better", "Extreme" ed "Insane".


Questi sono i valori di PSNR ottenuti con postprocessing disattivato, per ogni codec ho usato il suo decoder, per x264 è stato usato ffdshow

CODE

___________________________
|     | overal  | avrage  |
|-----|---------|---------|
|3ivx | 25.0862 | 30.1600 |
|XviD | 25.1028 | 30.3587 |
|DivX | 25.0671 | 29.6430 |
|x264 | 25.0864 | 30.3643 |
|vp7  | 25.0808 | 30.3023 |
---------------------------



Come potete vedere il PSNR medio (average) più alto appartiene nuovamente a x264, seguito da XviD che però ha il PSNR globale (overal) più alto, segno che durante tutta la durata del filmato è quello che ha avuto un livello di qualità più costante. Seguono in ordine discendente gli altri codec vp7, 3ivx e DivX.

E' da notare come lo scostamento fra PSNR medio e PSNR globale sia molto più marcato per questo filmato. Indice che la qualità è molto variabile. Questo potrebbe esser dovuto al fatto che è stato usato un bitrate decisamente basso per le caratteristiche del film.

per la compressione è stato usato virtualdubmod + avisynt, lo script è stato un semplice:

CODE

LoadPlugin("C:\PROGRA~1\GORDIA~1\DGMPGDec\DGDecode.dll")
mpeg2source("D:\SIN_CITY\VIDEO_TS\sin.d2v")
crop(2,14,716,548)
BicubicResize(640,336,0,0.75)




>>>cliccando qui accederete alla pagina di confronto visivo <<<

Il bitrate impostato per questo film è di 706 kbps, la dimensione finale teorica dovrebbe essere di 259303 kB e questi sono i risultati delle dimesioni finali ottenute dai vari codecs:

CODE

____________________________
|     |  size  |  bitrate  |
|-----|--------|-----------|
|3ivx | 259344 |  706 kbps |
|XviD | 258432 |  703 kbps |
|DivX | 260406 |  708 kbps |
|x264 | 260380 |  708 kbps |
|vp7  | 260300 |  708 kbps |
----------------------------


Alcuni codecs anche questa volta sono stati abbondanti, tranne XviD che ha prodotto un file sottodimensionato, 3ivx invece ha praticamente centrato il bersaglio.

Nel grafico che segue potete vedere l'andamento del bitrate usato nella prima passata dal codec XviD.

user posted image
user posted image

in blu xvid
in rosso divx
in magenta x264
in verde vp7
in giallo 3ivx


Le curve per tutti i codecs hanno un andamento molto simile, vp7 e x264 sono nettamente sopra agli altri e le loro curve ogni tanto si incrociano.
XviD anche sta volta mediamente sembra comportarsi meglio di DivX, mentre come al solito 3ivx segue a distanza.

Questi sono i valori di PSNR ottenuti con postprocessing disattivato, per ogni codec ho usato il suo decoder, per x264 è stato usato ffdshow

CODE

___________________________
|     | overal  | avrage  |
|-----|---------|---------|
|3ivx | 42.6536 | 43.5059 |
|XviD | 43.6802 | 44.5489 |
|DivX | 43.5859 | 44.3453 |
|x264 | 44.3887 | 45.3447 |
|vp7  | 44.5110 | 45.2660 |
---------------------------



Come potete vedere il PSNR medio (average) più alto appartiene nuovamente a x264, seguito da vp7 che però ha il PSNR globale (overal) più alto, segno che che durante tutta la durata del filmato è quello che ha avuto un livello di qualità più costante. Seguono in ordine discendente gli altri codec XviD, DivX e 3ivx.

per la compressione è stato usato virtualdubmod + avisynt, lo script è stato un semplice:

CODE

LoadPlugin("C:\PROGRA~1\GORDIA~1\DGMPGDec\DGDecode.dll")
mpeg2source("D:\STEALTH\VIDEO_TS\ste.d2v")
crop(0,78,718,420)
LanczosResize(640,256)




>>>cliccando qui accederete alla pagina di confronto visivo <<<

Bene bene, quella di tirare le conclusioni è la parte che mi piace meno, quindi prendo tempo aggiungendo la velocità di compressione media osservata nei tre films in analisi:

CODE

____________________
| XviD | 44.34 fps |
| 3ivx | 34.27 fps |
| DivX | 27.13 fps |
| Vp7  | 22.09 fps |
| x264 | 17.81 fps |
--------------------





Ebbene il vincitore è nettamente XviD, seguito da 3ivx, da DivX marcato stretto da vp7 e ultimo x264.

DivX mi ha lasciato perplesso, divxnetworks ha presentato il codec 6.1 dicendo che rispetto alla versione 6 l'aumento di velocità era consistente, beh per essere più veloce è più veloce ma mi sarei aspettato di più.
DivX in modalità "balanced quality" non è comunque più veloce di XviD (VHQ1 anche con B-frames), ma la qualità video è decisamente più bassa.
Probabilmente con sistemi multiprocessore le cose migliorano, anzi la cosa è certa, perché dalla comparativa fatta su doom 9 DivX era veloce quasi quanto XviD

3ivx va discretamente veloce ma da un codec che sulla carta non ha nessuna funzionalità avanzata di compressione a mio giudizio dovrebbe essere decisamente più veloce.

Vp7, nella prima passata va abbastanza veloce (non molto meno di XviD), è nella seconda passata in modalità "good quality" che va decisamente piano ma visti i livelli di qualità che riesce a raggiungere è abbastanza giustificato.
In modalità "bettere quality" la seconda passata sul mio PC vien fatta a circa 1 frame al secondo, il miglioramento di qualità se si puntano gli occhi è percepibile, ma a mio giudizio aspettare 50 ore per eseguire la seconda passata di un film che ne dura 2 non è proprio il massimo.

x264 è il più lento del lotto, volendo lo si può velocizzare un po' agendo sulle impostazioni, ma lo si può anche far andare a meno di un 1 fps.
Questo codec è ancora agli inizi, quindi oltre a poter migliorare ancora a livello di qualità video, potrà anche esser ottimizzato ed essere più veloce.

Ok, ora viene la parte più difficile, la classifica finale, quindi tagliando direi:

1° VP7
2° x264
3° XviD
4° DivX
5° 3ivx

vp7 credo possa esser considerato il migliore del lotto grazie alla qualità dell' immagine che ha dimostrato di generare ad una velocità che non è molto inferiore a quella di DivX 6.1.
E' inoltre discretamente più veloce di x264, che in alcune occasioni non si è dimostrato all' altezza neanche di XviD e DivX.

x264 si merita un secondo posto ma a mio giudizio non molto sopra a DivX e XviD, ha dimostrato di avere le basi per far decisamente meglio, ma manca di messa a punto e di alcune caratteristiche della norma AVC. Manca inoltre il supporto di un proprio decoder e non son sicuro che ffdshow lo faccia esprimere al massimo.

XviD lo piazzo al terzo posto, perché se a livello di qualità dell' immagine si può essere indecisi se DivX sia meglio o peggio, a livello di velocità di compressione non c'è assolutamente la possibilità di aver dubbi, è decisamente sueperiore, non dimentichiamo inoltre che è gratuito!

DivX se non avete capito perché ho messo DivX dopo XviD, leggete il commento su XviD e pensatelo al contrario.

3ivx ultimo, beh un pensiero che mi ha accompagnato durante tutto il periodo in cui ho fatto i test, è stato:
"OK non è sicuramente il migliore, il codec è gratuito, ma che senso ha usarlo rispetto XviD che è gratuito pure lui e va più velocemente?"
A parte gli scherzi, il povero 3ivx ha partecipato al confronto come se fosse fuori concorso, ma alla fine se si pensa alla sua semplicità (almeno apparente), non si è comprtato poi tanto male, perché analizzando con attenzione frame per frame dimostra di non essere all' altezza dei concorrenti che sono molto più avanzati, nel complesso è in grado di fornire video di qualità più che accettabile.


Pagina stampata da Divxmania.it
Vietata la copia e la distribuzione (anche parziale) senza la previa autorizzazione.