Codec shoot-out 2003 - 2nd installment

Tavola dei contenuti:

1: Introduzione
2: Impostazioni del Test
3: Test 1: The Matrix (banda normale) -- banda ultra alta
4: Test 2: Salvate il soldato Ryan (banda normale) -- banda ultra alta
5: Test 3: Futurama (banda normale) -- banda ultra alta
6: Conclusione
7: A parte i codec...
8: Sviluppi Futuri?
9: FAQ

Benvenuti ad un ulteriore confronto tra codec. È passato un po' di tempo dall'ultimo e molto è accaduto, non tutto positivo (prendere screenshot è stata una solenne seccatura.. dovrei farmi pagare €200 all'ora per farli in futuro). Ancora una volta, questo confronto tra codec include ancora più concorrenti dell'ultima volta, anche se non ho potuto includere tutti i codec che avrei voluto. Non ho ancora alcun codec H.264 da testare poiché le implementazioni open source esistenti sono praticamente inutilizzabili, e alla Vanguard Software hanno deciso che era troppo prematuro perché la loro implementazione di H.264 a profilo semplice venisse testata. Ma ci stiamo avvicinando ad un codec testabile, e con sempre più compagnie che investono nello sviluppo di H.264, ci sono sempre più chance che vedremo un codec H.264 nel prossimo confronto.

Questo test è esattamente lo stesso dell'ultima volta, cosicché i risultati possono essere direttamente confrontati. Ho incluso solamente quei codec che sono migliorati dall'ultimo test (quindi non c'è WMV9 questa volta), e il codec di riferimento SBC.

Ora una breve panoramica di cosa è sucesso dall'ultimo confronto:

I codec che non sono stati inclusi sono i seguenti: Windows Media 9. Dal momento che il codec non è cambiato dall'ultimo test, sarebbe stato uno spreco di tempo ritestarlo. L'encoder H.264 Simple Profile di Vanguard Software non mi è stato fornito per il test. Alla Vanguard ritengono che, nel suo stato corrente, il codec ha ancora bisogno di miglioramenti (come l'encoding a 2 passi, per esempio).

In ultimo, in modo da presentare ogni codec nel miglior modo possibile, ho contattato ogni fornitore di codec 2 settimane prima dell'inizio del test per dare loro la possibilità di suggerire le impostazioni migliori per i film usati nel test. Quindi, se pensate che i miei metodi e le mie impostazioni siano suboptimali, siete i benvenuti a rivolgervi agli sviluppatori, perché io ho seguito attentamente le loro raccomandazioni, e se loro mi hanno comunicato impostazioni che non sono le migliori, peggio per loro. A questo punto vorrei ringraziare tutte le persone che hanno lavorato con me in quest'area. Questa volta, ogni compagnia che ho contattato è stata disponibile a lavorare con me. Grazie.

Ora vediamo i concorrenti:

3ivX D4 4.5.1a3 (non ancora rilasciato pubblicamente)
DivX3 nella forma di SBC (Smart Bitrate Control - controllo del bitrate intelligente) così come utilizzato da Nandub (a cui mi riferirò come SBC)
DivX5.1.1 Pro
ffvfw compilazione del 28/10
NeroDigital 4.1.4.11 (compilazione speciale per VFW - Video for Windows - che non è ancora disponibile pubblicamente, ma è possibile effettuare un encoding in AVI usando il filtro di NeroDigital DS che viene distribuito come parte di Recode 2). Questo codec verrà chiamato ND da qui in poi.
RealNetworks RealVideo9 basato su HelixProducer 9.2 e una DLL ottimizzata. Questo codec verrà chiamato RV9 da qui in poi.
VP6 versione 6.0.8.387 (non disponibile pubblicamente, ma potete scaricare la versione 6.0.9.2)
XviD 1.0 beta 3 (la versione usata era pre-beta, ma tutti i cambiamenti effettuati successivamente sono correzioni di bug in aree che non concernono la comparazione)

Tutti i codec sono stati testati in configurazione a 2 passi usando le impostazioni suggerite dagli sviluppatori (nel caso di ffvfw le impostazioni sono state fornite dal capo degli sviluppatori di libavcodec e ffmpeg; lo sviluppatore di ffvfw ha solo suggerito di usare il metodo di encoding a 2 passi per duplicare il comportamento di ffmpeg).

Impostazioni del test:

Tutte le prove sono state effettuate sul seguente hardware:

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

Per l'encoding ho usato i seguenti programmi:

DVD2AVIdg 1.0
mpeg2dec3.dll
AviSynth 2.53 per il frameserving
VirtualDub 1.5.10 per l'encoding (eccetto che per RV9)
Nandub 1.0 RC2 lumafix ecffix per SBC
Helix Producer 9.2 (versione 9.2.0.384)

Per semplificare le cose, ho usato GordianKnot per l'encoding in DivX3 e AutoRV9 per l'encoding in RealVideo.

Film utilizzati:

Matrix - Regione1, NTSC, lunghezza: 2h16
Salvate il soldato Ryan - Regione1, NTSC, lunghezza: 2h49. Chiamerò questo film SSR da ora in poi.
Futurama Stagione 2 Episode 1 - Regione2, PAL, lunghezza: 0h21

Parametri per l'encoding:

Ho usato una traccia audio ABR a 128kbit/s creata con lame 3.93 (usando il settaggio --alt-preset 128) per tutti i film, poi ho provato a mettere Matrix su 1 CD da 700MB, SSR su 2 CD da 700MB e 4 episodi di Futurama su un CD da 700MB (risultante in 175MB per episodio). La grandezza della traccia audio era, rispettivamente, di 124221Kb, 157455Kb e 20582Kb. Questo è risultato in un bitrate video effettivo di 581kbit/s per Matrix, 1016kbit/s per SSR e 987kbit/s per Futurama (qui kbit=1000bit; DivX3 usa kbit=1024bits quindi si deve dividere quel bitrate per 1,024 per ottenere il bitrate effettivo di DivX3; tutti gli altri codec usano k=1000). Notate che combinare un MP3 VBR con un AVI da' origine ad un fenomeno di "overhead" (aumento delle dimensioni complessive finali) maggiore che non con un regolare file MP3 CBR. Ho usato GKnot per calcolare il bitrate dal momento che è noto che esso è accurato in queste situazioni.

Come potreste sapere, non tutti i meccanismi di controllo del bitrate sono perfetti, quindi ecco le lunghezze dei film che ho ottenuto

Codec Matrix SSR Futurama
3ivX 733'698 KB 1'464'170 KB 180'010 KB
DivX 3 (SBC) 716'658 KB 1'434'004 KB 179'304 KB
DivX5 717'894 KB 1'434'930 KB 179'200 KB
ffvfw 717'304 KB n/a 179'112 KB
Nero Digital 716'796 KB 1'433'302 KB 179'036 KB
RV9 715'505 KB 1'421'103 KB 178'331 KB
VP6 732'526 KB 1'465'190 KB 182'170 KB
XviD 717'036 KB 1'433'996 KB 179'132 KB

Notate che 700MB = 716'800KB, 1400MB = 1'433'600KB e 175 MB = 179'200 KB.

Come potete vedere, SBC, DivX5, ND e XviD si avvicinano moltissimo alla lunghezza desiderata. I codec che usano KB/sec per il controllo del bitrate invece che kbit/sec (3ivX e VP6) presentano un problema, poiché ottengono un bitrate troppo alto per Matrix (73kbit/s) e uno troppo basso per Futurama (123KB/s), ma solo questo non è sufficiente per spiegare la discrepanza delle dimensioni dal momento che anche quando il bitrate è troppo basso (Futurama), i files erano comunque sovradimensionati. Ffvfw è pure molto accurato, ma ho avuto un serio problema durante l'encoding: Il codec è andato in crash una volta durante l'encoding di Matrix e 2 volte durante l'encoding di SSR, quindi ci ho rinunciato per SSR. Ora, potreste obbiettare che a voi non è mai successo, ma voi comunque starete usando il meccanismo di encoding a 2 passi di XviD, non quello di ffmpeg (e noi sappiamo che il meccanismo a 2 passi di XviD è buono, quindi non c'è ragione di testarlo 2 volte).

Anche RV9 non è ancora accurato, ma almeno questa volta non abbiamo ottenuto files sovradimensionati.

Impostazioni dei codec (applicati rispetto ai settaggi predefiniti)

Velocità di encoding:

Qui prendo Matrix come esempio. La risoluzione di SSR era maggiore, quindi la velocità è scesa. Notate che dovreste prendere questi valori come indicativi di massima. Solo i primi 10'000 frames sono stati usati per la misura delle velocità quindi i Frame per secondo medi su tutti i film potrebbero essere un po' diversi. Inoltre, non ho resettato il PC prima di ogni misurazione e non ho effettuato misure multiple per ogni codec. Per valori assoluti di qualità, si dovrebbero effettuare più prove, ma questi valori dovrebbero comunque darvi una buona impressione delle differenze di velocità relative tra i codec. Notate che i valori sono la media tra i 2 passi dove possibile.

Codec Velocità  
3ivX 16.86 fps  
SBC 46.62 fps  
DivX5 6.17 fps  
ffvfw 11.22 fps  
ND 58.99 fps  
RV9 14.54 fps  
VP6 13.37 fps  
XviD 37.31 fps  

Se avete visto l'ultima comparazione, questi numeri potrebbero stupirvi. In media, la velocità di encoding è diminuita considerevolmente. Il codec più lento dell'ultima volta (WMV9, 17.43 fps), sarebbe ora nella metà più veloce. RV9 ovviamente è diventato più lento a causa del modo EHQ, ma l'abbassamento di velocità di DivX5 mi risulta incomprensibile. Lo ho anche testato 2 volte poiché non credevo ai risultati ottenuti. Sto aspettando nuove da DXN sul tema della velocità (l'encoding è stato più veloce sul mio portatile P4 a 2.8 GHz, ma comunque più lento di qualunque altro codec). Sono stato piacevolmente sorpreso da XviD, che ancora una volta è molto presentabile nel campo della velocità. ND ha schiacciato tutti gli altri. Considerando che è stato progettato per dispositivi integrati (unità autonome che registrano nel formato Nero Digital) non è sorprendente, ma vedremo quanta qualità è stata sacrificata per la velocità.

Altre informazioni importanti:

Segue lo script AviSynth che ho usato per l'encoding dei film, cosicché possiate riprodurre perfettamente i miei risultati. Ho usato Force Film (forza modalità Film) in DVD2AVI per Matrix e SSR. Futurama era interlacciato; ho usato FieldDeinterlace di Decomb senza "blending" per ottenere una immagine progressiva in entrambi i film. Notate che ho usato il ridimensionamento bicubico per ogni filmato. Non mi piace la sfocatura introdotta dal filtro di ridimensionamento bilineare e l'impostazione neutrale è un buon compromesso tra il dettaglio e una maggior compressibilità, sia pur senza scadere in un'immagine sfocata.

Script per Matrix:

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)

Script per SSR:

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)

Script per Futurama:

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:

Ho usato il filtro di riproduzione predefinito per 3ivX, Nerodigital e VP6, usando il di postprocessing automatico. Dove possibile, ho disabilitato l'effetto film.

Per SBC e DivX5 ho usato il filtro DivX5 a forza 4. Ho usato molto il filtro DivX5 in passato per riprodurre i film DivX3 e ogni qual volta pensavo che ci fosse qualcosa di strano, ho provato a tornare ad usare il filtro DivX3 solo per scoprire che il problema era nella sorgente, non nel filtro. Ho fatto lo stesso durante il test, ma sono regionevolmente sicuro che i risultati non sarebbero stati differenti se avessi usato il filtro DivX3 per la riproduzione SBC (eccetto che per essere più astruso per fare confronti e per prendere screenshots).

Per decodificare ffvfw ho usato la compilazione di ffdshow datata 28 Ottobre.

Per riprodurre filmati XviD ho usato il filtro DS Xvid con deblocking e deringing attivati (e la modalità film disabilitata).

Tutti i files sono stati riprodotti usando Media Player Classic dal momento che può riprodurre files AVI e RV9 (ed anche QT). Inoltre, esso può avanzare a qualunque fotogramma, che mi ha fatto risparmiare letteralmente giorni mentre prendevo screenshots. Grazie Gabest per aver realizzato un programma così potente! Dal momento che io ho un monitor piatto, ho usato la risoluzione nativa del monitor di 1280x1024 per visionare tutti i filmati. Gli schermi piatti non vanno bene per mostrare risoluzioni a schermo intero inferiori, e inolte zommare il filmato aiuta ad accentuare i problemi che un codec potrebbe avere (e che non avrei certamente notato ad una risoluzione di bassa qualità come 640x480). Notate che lo schermo utilizzato ha un tempo di risposta più basso di 25ms, il che permette una riproduzione perfetta (e le scene 3D sono pure buone).

Una nota a proposito degli screenshots: Ho fatto del mio meglio per presentare immagini catturate esattamente dallo stesso frame. Alcuni codec esibiscono ritardi (per esempio nel codec A ricavate il frame X, mentre nel codec B si deve ricavare il frame X+1), e RV9 si è comportato in modo abbastanza erratico. Alla fine, sono riuscito ad ottenere ogni immagine nel modo giusto, ma vi assicuro che prendere così tanti screenshots da così tanti codec non è qualcosa che vorreste fare.

Ora procedete al primo test (versione in jpeg a bassa banda. Questa versione carica 200KB di immagini inizialmente, e la grandezza totale delle immagini per il test di Matrix è 1.75Mb). Se avete un sacco di banda e/o non vi importa aspettare, c'è una versione in PNG a banda larga (carica 1.13Mb di immagini inizialmente e se volete vedere tutte le immagini, dovete scaricare 9.2MB). Notate anche che la versione a banda larga richiede che abbiate abbastanza spazio per i file temporanei del vostro broswer o le immagini verranno ricaricate ogni volta che effettuate uno zoom.

Questo documento è stato modificato l'ultima volta il January 14, 2004 ed è stato tradotto da Vran il 14/01/2003