Codec shoot-out 2003 - 1st installment

Indice dei contenuti:

1: Introduzione
2: Test setup
3: Test 1: The Matrix
4: Test 2: Saving Private Ryan
5: Test 3: Futurama
6: Conclusioni
7: Uno sguardo al futuro

Phew. Nelle ultime 3 settimane ho speso ogni mio momento libero nel preparare questa nuova prova su strada dei vari codec. Questo nuovo confronto sarà il più grande che sia mai stato fatto, e comprenderà un numero maggiore di sorgenti usate e di codec mai visti rispetto ad altri livelli. Avrei voluto inserire in questa prova su strada anche un codec H.264 (AKA MPEG-4 AVC) ma dopo averne parlato con i suoi sviluppatori del candidato scelto per questa prova (Vanguard Software H.264 beta2) ho deciso di non includere questo codec perché al momento attuale non dispone del postprocessing e non è conforme all'ultima versione dello standard (gli standard per MPEG-4 sono stati redatti solo poche settimane fà). La versione Beta3, che avrebbe dovuto eliminare questi "problemi" doveva essere rilasciata in tempo per questo confronto, ma non è ancora uscita mentre sto scrivendo queste righe. Questo mi ha portato ad usare solo 7 codec per questo test su due sorgenti ben conosciute e su una nuova: Futurama (una serie animata del creatore dei Simpsons).

E adesso un piccolo riassunto di quello che è successo dall'ultimo confronto:

 

Gli assenti: i codec seguenti avrebbero dovuto fare parte di questo test, ma non sono stati inclusi per varie ragioni: Dicas mpegable X4, l'applicazione commerciale per l'encoding di Dicas, viene rilasciata come una versione di prova di 30 giorni. Nonostante questo, il periodo di prova è scaduto dopo aver aperto il programma soltanto due volte e non ho potuto in messun modo eliminare questo limite (d'accordo, avrei potuto riavviare e reinstallare l'applicazione ma questo è un pò troppo). Dicas mi ha gentilmente fornito una versione sprotetta, che però piazza un logo in ogni frame e che non considero accettabile per un ambiente di produzione. Ho richiesto un codice per poter sbloccare la mia copia di 30 giorni ma non ho ricevuto nessuna risposta. Ho scritto ben tre volte a On2 di poter provare VP5 e per tre volte non ho ricevuto risposta. On2 ha annunciato pubblicamente VP6, che sarà disponibile a partire dalla metà di Maggio; vedremo se ci saranno cambiamenti inportanti in questa nuova (e futura) versione del codec. Non ho considerato il codec della Sigma Design; primo, perché non è stata ancora chiarita la violazione della licenza, e secondo perché non è altro che il codec XviD sotto un'altro nome (ma senza una dichiarazione della Sigma di aver attinto a piene mani dai sorgenti di XviD).

Ultima considerazione: per fare in modo che ogni codec potesse rendere nella maniera migliore ho contattato tutti i gruppi di sviluppo almeno due settimane prima di iniziare ad effettuare tutti i test di encoding per farmi consigliare quei parametri ottimali per la codifica dei video usati in questo test. Quindi, se credete che i miei metodi di prova siano incorretti, siete pregati di prendervela con gli sviluppatori perché io mi sono strettamente attenuto alle loro raccomandazioni; se mi hanno passato parametri non ottimali sono solo loro a perderci, non certo io. Vorrei inoltre ringraziare tutti quelli che mi hanno aiutato in questo lunghissimo lavoro. Gli unici codec che non hanno avuto nessuna impostazione dagli sviluppatori sono 3ivX e WMV9, nonostante abbia più volte contattato le rispettive compagnie..

E adesso presentiamo i partecipanti:

3ivX D4 4.0.3
Dicas mpegable AVI 2.0.3
DivX3 con il metodo SBC (Smart Bitrate Control) così come viene fatto in Nandub (da adesso in poi SBC)
DivX5.05
RealNetworks RealVideo9 basato su HelixProducer 9.1 M6 Gold (da adesso in poi RV9)
Windows Media Video V9 (VCM beta1, da adesso in poi WMV9)
XviD (build di sviluppo di Isibaar, datata 24/4 e compilata direttamente dalla CVS)

Per tutti i codec è stata utilizzata la modalità a doppia passata ove possibile (3ivX e mpegable AVI supportano solo l'encoding a singola passata).

Test setup:

Tutti i test sono stati eseguiti su questa macchina:

AMD Athlon XP 2800+
Shuttle SN41 mainboard (parte dello Shuttle SN41G2 barebone system)
2x256MB PC2700 Apacer CL2.5 DDR RAM
Creative 3d Blaster 4 Titanium4600 (NVidia Geforce4 TI4600)
Samsung SyncMaster 191T-P Display connected via DVI

Per l'encoding ho usato i seguenti software:

DVD2AVI 1.76
mpeg2dec3.dll
Avisynth 2.51 April 16. for frameserving
VirtualDubMod 1.4.13.2b2 per l'encoding di DivX5/XviD, VirtualDub 1.5.1 per 3ivX, mpegable AVI e WMV9
Nandub 1.0 RC2 lumafix ecffix per SBC
Helix Producer 9.1 M6 gold (build numbero 9.1.0.92)

Per semplificare il tutto ho usato GordianKnot per l'encoding di DivX3/5/XviD e AutoRV9 per l'encoding in RealVideo.

I film che ho usato per prova:

Matrix - Regione1, NTSC, durata: 2h16
Saving Private Ryan - Regione1, NTSC, durata: 2h49. Da adesso in poi lo chiamerò SPR
Futurama Stagione 2 Episode 1 - Regione2, PAL, durata: 0h21

Parametri di encoding:

Ho usato una traccia audio ABR a 128 kbit/s creata con LAME 3.93 (usando il preset --alt-preset 128) per tutti i filmati, quindi ho cercato di mettere Matrix in 1 CD da 700 MB, SPR su 2 CD da 700 MB e 4 episodi di Futurama su un CD da 700 MB (quindi 175 MB ad episodio). La grandezza della traccia audio era rispettivamente di 124221KB, 157455KB e 20582KB. Questo comporta quindi un bitrate effettivo di 581kbit/s per Matrix, 1016kbit/s per SPR e 987kbit/s per Futurama (per kbit = 1000bit, DivX3 usa kbit = 1024bits quindi dovete dividere il bitrate per 1024 per avere il bitrate effettivo del DivX3, tutti gli altri usano k = 1000). Notate inoltre che multiplexare un MP3 VBR dentro un AVI crea un maggiore overhead che un MP3 CBR. Ho usato GKnot per calcolare il bitrate perché si sa che è abbastanza accurato in queste situazioni.

Come forse sapete, qualsiasi meccanismo di controllo del bitrate non è perfetto, ed ecco a voi le dimensioni finali dei film che ho scelto.

Codec Matrix SPR Futurama
3ivX 723'574 KB 1'493'398 KB 178'754 KB
DivX5 717'642 KB 1'435'154 KB 179'250 KB
mpegable 920'234 KB 1'144'774 KB 171'168 KB
RV9 722'977 KB 1'447'144 KB 180'976 KB
SBC 716'658 KB 1'434'004 KB 179'304 KB
WMV9 727'886 KB 1'460'384 KB 183'288 KB
XviD 717'242 KB 1'434'320 KB 179'288 KB

Notate bene che 700MB sono uguali a 716'800KB, 1400MB sono uguali a 1'433'600KB e 175 MB sono uguali a 179'200 KB. SBC è sempre la scelta migliore se si desidera avere una dimensione finale perfetta, seguito a brevissima distanza da XviD e DivX5. RV9 soffre ancora di problemi di oversize (più lungo è il film, e più grosso verrà fuori il file), lo stesso vale per 3ivX e WMV9. Come potete notare, i risultati di mpegable AVI sono catastrofici. Ma questi valori hanno una spiegazione: l'interfaccia di configurazione VfW è buggata (per stessa ammissione degli sviluppatori Dicas) e succede spesso che il bitrate che avete impostato voi venga sovrascritto con il valore di default di 800 kbit/s. Questo è il motivo per cui Matrix soffre di Oversize e SPR di undersize. Vista la grande differenza nel bitrate, ho ritenuto opportuno non inserire mpegable AVI nel confronto, e quindi l'ho escluso. Ultima considerazione: se avete bisogno di sapere con esattezza la grandezza di un file (e chi non ne ha bisogno) la scelta del codec si restringe ulteriormente.

Impostazioni dei codec:

Velocità di encoding:

Per questo test useremo Matrix. La risoluzione di SPR era più grande, e questo incideva anche sulle prestazioni. E ricordatevi di leggere questi valori con un pò di sale in zucca. Sono stati processati soltanto i primi 10000 frames quindi la media dei FPS può non essere corretta. Aggiungete anche che NON ho riavviato la macchina dopo ogni encoding e non ho effettuato varie misurazioni per ogni codec (quindi un discorso di media è altamente impossibile da farsi). Per avere dei valori assoluti, sono necessari molti più test, ma queste misure dovrebbero essere indicative lo stesso per fare un confronto tra i vari codec. Il valore espresso risulta essere la media se era possibile effettuare la modalità in doppia passata.

Codec Speed  
3ivX 51.54 fps  
DivX5 40.65 fps  
RV9 33.27 fps  
SBC 46.62 fps  
XviD 21.66 fps  
WMV9 17.43 fps  

Come potete notare, la velocità di DivX 5 e di SBC è aumentata considerevolmente rispetto al vecchio confronto. Questo grazie ad una CPU sicuramente più potente, ma anche dal fatto che abbiamo lavorato nello spazio di colore YV12 (AviSynth 2.51). Un paio di considerazioni su XviD: l'encoding di Futurama è stato molto più veloce riuspetto agli altri, perché non erano presenti B-frames, QPel e Chroma Motion (tutte opzioni il cui costo è un decadimento delle prestazioni velocistiche). C'é da aspettarsi che quando tutte le caratteristiche di XviD saranno pienamente sviluppate, i programmatori inizieranno il lavoro di rifinitura e di ottimizzazzione del codec. Se ricordate il test precedente (dove queste opzioni non erano presenti), XviD era il codec più veloce del lotto.

Altre informazioni:

Questi sono gli script AviSynth che ho usato per questi test, così se volete fare dei test e confrontarli con i miei siete i benvenuti. Ho usato force film in DVD2AVI per Matrix e SPR. Futurama era interlacciato, ho usato il FiledDeinterlace di Decomb senza blending per avere un'immagine progressiva. Notate che ho usato il Resize Bicubico neutrale. Non mi piace la sfuocatura che il resize bliineare produce e l'impostazione di quello neutrale è un buon compromesso che offre una migliore comprimibilità, ma non sfuoca.

Matrix script:

LoadPlugin("C:\PROGRA~1\GORDIA~1\mpeg2dec3.dll")
mpeg2source("D:\DVD\Projects\THE_MATRIX_16X9LB_N_AMERICA_VTS_02_PGC1\THE_MATRIX_16X9LB_N_AMERICA_ForceFilm.d2v")
crop(0,60,718,356)
BicubicResize(640,272,0,0.5)

SPR script:

LoadPlugin("C:\PROGRA~1\GORDIA~1\mpeg2dec3.dll")
mpeg2source("D:\DVD\Projects\SAVING_PRIVATE_RYAN_VTS_01_PGC1\SAVING_PRIVATE_RYAN_ForceFilm.d2v")
crop(2,8,714,464)
BicubicResize(640,352,0,0.5)

Futurama script:

LoadPlugin("C:\PROGRA~1\GORDIA~1\mpeg2dec3.dll")
LoadPlugin("C:\PROGRA~1\GORDIA~1\decomb.dll")
mpeg2source("D:\DVD\Projects\FUTURAMA_SEASON_2_DISC_1_VTS_01_PGC1\FUTURAMA_SEASON_2_DISC_1.d2v")
FieldDeinterlace(blend=false)
crop(10,4,702,568)
BicubicResize(608,464,0,0.5)

Riproduzione:

Per SBC e DivX5 ho usato il decoder del DivX 5 con il valore di strength uguale a 4. Ho usato molte volte in passato il decoder del DivX 5 per leggere files DivX3 che ho sostituito con il suo decoder (DivX3) quelle poche volte che il decoder mi dava qualche problema in lettura, arrivando poi alla conclusione che il problema non era nel filtro, ma nella sorgente. Anche durante questo test ho usato questo mio metodo pratico, ma sono abbastanza sicuro che i risultati non sarebbero stati molto diversi se avessi usato il decoder DivX3 per l'encoding in SBC (a parte il fatto che mi avrebbe creato qualche problema in più effettuare gli screenshoot e compararli con gli altri). Per XviD ho usato il decoder di ffdshof forzato ad usare XviD, invece che le impostazioni di default di ffdshow stesso. La build che mi è stata fornita ha il postprocessing abilitato di default; nelle versioni future, potrete selezionare o meno le opzioni di deringing e deblocking del decoder. Questo postprocessing è nuovo, e lo sviluppatore mi ha caldamente suggerito di usarlo. Con SPR e Futurama, l'utilizzo della CPU si attesta al 90%, quindi se non avete un 2.8 GHz o una CPU di velocità maggiore vi consiglio di usare il decoder di Nic (ffdshow ha un bug che non permette la visione di files XviD quando è stata attivata l'opzione QPel). Gli altri codec non permettono la configurazione del postprocessing.

Tutti i files sono stati visti usando Media Player Classic dato che può leggere senza problemi files AVI e RV9 (anche QT in qualche altro modo). Inoltre, il player mi permette di andare da un punto all'altro del filmato in maniera semplice e precisa, e questo mi è stato di frande aiuto perché mi ha risparmiato giorni per trovare e salvare tutti gli screenshoot. Grazie Gabest per aver creato un lettore così eccezzionale! Dato che sono il possessore di un monitor flatscreen, ho usato la risoluzione di 1280*1024 per vedere tutti i filmati. I monitor flatscreen non sono l'ideale per visualizzare a basse risoluzioni, inoltre zoomare il video accentua i difetti che un codec presenta (e che avrei sicuramente perso se lo avessi guardato ad una risoluzione bassa come 640x480). Il monitor usato ha un tempo di reazione minore di 25ms e comporta una visione pressoché perfetta (e questo va benissimo anche per gli sparatutto in 3D).

Ultima nota sugli screenshoot: ho fatto del mio meglio per cercare di avere gli screenshoot degli stessi frames per ogni codec, ma alcuni di loro hanno dei "ritardi" (esempio: per il codec A prendi il frame X, ma nel codec B devi prendere il frame X+1 per avere lo stesso esatto frame) e RV9 si comporta in maniera assolutamente casuale. A volte non sono riuscito a trovare quale sia il codec corrispondete per tutti i codec.

E adesso procediamo con i risultati del primo test.

 

Questo documento è stato aggiornato il December 5, 2004
Questo documento è stato tradotto da _YuSaKu_ il 04/12/2004