DivX 4.12


Il DivX;-), come tutte le realtà legate all'informatica che prima o poi sono destinate ad essere superate, sembra aver perso la sua indiscussa leadership nel settore dei codec video ad alta compressione: nell'elettronica e nell'informatica in realtà nulla muore, ma tutto si evolve, e la degna evoluzione del DivX;-) è il nuovo codec DivX ( si scrive senza il simpatico smile che strizza l'occhio !!) giunto alla versione 4.12.  Prima di tutto vi rimando all'articolo sul "vecchio" DivX;-) per la descrizione di tale codec e per le guide all'uso.

Introduzione
Codec di decompressione e postprocessing
Codec di compressione
1 pass
1 pass quality- based
2 pass : first pass, second pass
Divx 5

La prima cosa da chiarire è che, il DivX;-) è un codec illegale creato da una operazione di retroingegneria, con cui è stato craccato un codec di proprietà Microsoft: per la precisione il DivX;-) Low Motion codec è stato ricavato dalla versione  4.1.00.4920 del Microsoft MPEG4v3, mentre l' High Motion codec dalla versione 4.1.4917. Al contrario il codec DivX ( ora alla versione 4.12) è un codec freeware perfettamente legale del quale è anche possibile scaricare i sorgenti : il sito di riferimento è www.divx.com . Voglio solo osservare come la Microsoft in realtà non ha spinto più di tanto nel perseguire legalmente i responsabili della creazione dell'illegale DivX;-) e ne a bloccare i siti che continuano tranquillamente a distribuire il codec. La cosa più incredibile è che anche riviste del calibro di PC Word hanno distribuito su un CD-Rom tale codec, che tra l'altro contiene anche una versione illegale dell'encoder audio mp3 di proprietà Fraunhofer.  

La versione 4.12 del DivX, quella che mi appresto ad analizzare, è ottimizzata per il Pentium 3-4; tali ottimizzazioni legate all'utilizzo delle istruzioni SSE, rendono il codec ugualmente ottimizzato per i recenti Athlon XP, anche loro SSE compatibili.

Altra cosa importante da chiarire è che sul proprio sistema è possibile installare sia DivX 4.12 che DivX;-) ; convivono pacificamente.

E' ormai imminente la versione DivX 5 che dovrebbe contenere nuove funzionalità , ottimizzazioni e naturalmente mantenere la compatibilità con le precedenti versioni.

 



Come  per tutti i codec di compressione video, occorre distinguere 3 aspetti: il formato utilizzato, il codec di compressione e il codec di decompressione.

Consideriamo ad esempio il caso del codec mpeg 2.
Il
formato è quello formalizzato e brevettato come  ISO/IEC 13818-2, la cui documentazione la si può acquistare da chi ne detiene i diritti.
Il codec di
decompressione è quello disponibile da numerosissimi sw ( Windvd, Powerdvd, Cinemaster, Flaskmpeg, DVD2avi,DVDx...) e hw (i diversi chips C-Cube, ESS, ...presenti nei DVD player). Ciascun codec di decompressione è caratterizzato da una implementazione diversa, una maggiore o minore approssimazione nei calcoli e ottimizzazione : per questo motivo, stesso filmato mpeg2 può apparire notevolmente diverso se osservato con i vari codec di decompressione.
Il codec di
compressione è quello implementato dai diversi SW o HW di compressione ( encoding) video: grazie alla "intelligenza " di tali SW, tutti rispettosi delle specifiche ISO/IEC 13818-2, si ottengono qualità e velocità notevolmente diverse; mi riferisco ai vari LSX encoder, Tmpeg, Cinema Craft Encoder, BBmpeg,....tutti capaci di comprimere video mpeg2.

Riguardo il DivX;-) e il Divx per entrambi il formato di compressione video è l'mpeg4 video, formalizzato come  International Standard ISO/IEC 14496-2.
Il codec di
decompressione è invece diverso: con il codec di decompressione Divx è possibile visualizzare video compresso con il codec DivX;-) e non viceversa. Da osservare come nel momento in cui si installa il DivX, è richiesto se mantenere o meno il codec DivX;-) per la visualizzazione dei "vecchi" DivX;-) .Alla domanda se si risponde positivamente (YES) si visualizzeranno i vecchi divX;-) con il nuovo codec; se NO, i filmati DivX;-) verranno visualizzati utilizzando il vecchio decoder e naturalmente i DivX con il nuovo. Personalmente clicco su di NO per un semplice motivo: per i test "incrociati",  utilizzo l'ottimo player BSplayer che tramite una opzione permette di scegliere se decodificare i vecchi DivX;-) con il nuovo codec DivX 4  o con il vecchio DivX;-): basta andare in preferenze (cntr-p), video e cliccare su . Il nuovo Bsplayer lo potete scaricare dal mio sito nella sezione Download.

Il codec di decompressione del DivX 4 incaricato di visualizzare i filmati, analogamente al vecchio codec del DivX;-),  dispone delle caratteristiche di postprocessing. Facoltativamente è possibile aggiungere alla normale decompressione del video, una ulteriore elaborazione del filmato, il postprocessing,  finalizzata a migliorarne la qualità. 
E' importante osservare come il postprocessing è una elaborazione che effettua il player incaricato a visualizzare il filmato e pertanto non coinvolge minimamente l'operazione di compressione del video, ma solo quella di decompressione.

Il postprocessing video è, se vogliamo, la frontiera più evoluta del Digital Video, che è possibile effettuare grazie alla enorme potenza di calcolo delle CPU più recenti: con sistemi leggermente più datati e CPU più lente tale elaborazione può essere facoltativamente disattivata garantendo fluidità al video. Voglio osservare come il postprocessing dei filmati video, in tempo reale, non è una peculiarità unica del DivX ma può essere applicata nella visualizzazione di un qualsiasi formato di video digitale,  naturalmente disponendo di un sw incaricato alla cosa; nel caso del divX il postprocessing è delegato al codec video distribuito gratuitamente dagli autori; per fare postprocessing video di altri formati ( mpeg1, mpeg 2, Dv, Indeo,.....) occorre utilizzare un sw apposito che dopo aver delegato al codec relativo il compito della decompressione, si incarica   di filtrare il video ottenuto con particolari algoritmi. Un ottimo sw freeware capace di far ciò è il player SASAMI 2K che potete scaricare dal sito www.sasami2k.com , con il quale è possibile applicare filtraggi di postprocessing di tipo "defeat artifact" (eliminazione degli artefgatti video), soften (immagine più morbida per compensare le alte compressioni video), sharpen (enfatizza dettagli),.. e l'utilissimo incremento di luminosità, ottimo per visualizzare filmati mpeg 1 utilizzando il codec della Microsoft: tutte le opzioni sono accessibili cliccando con il tasto destro del mouse sulla finestra video.

Ritornando al codec di decompressione del DivX 4, il postprocessing cerca di eliminare due dei tipici artefatti dell'mpeg4 e quindi del DivX: il blocking e il ringing. Non a caso si parla di filtri di de-blocking e de-ringing.

L'artefatto detto blocking è quello che si nota in corrispondenza di sfumature di colori, che vengono approssimate con dei blocchi di colore di 8*8 e 16*16 pixel; l'effetto ringing (detto anche "moschito") è il tipico artefatto che si ha nei cambi netti di colore e in particolare nei bordi delle immagini reali, ai contorni di eventuale testo e che è molto evidente nei cartoni animati in corrispondenza dei bordi dei personaggi, normalmente neri. Si manifesta con una serie di punti colorati assolutamente non presenti nell'originale.

Ecco un esempio che per essere meglio apprezzato dovrebbe essere visualizzato nella modalità di profondità colore, a 24-32 bit. Le immagini provengono da un esempio reale e sono ingrandite al 200%.

video non compresso

tipo di artefatto
 introdotto dalla
compressione 

video compresso

filtraggio
(postprocessing)

video dopo il
 postprocessing

----> blocking ---->  ---->de-blocking ---->   

----> ringing ---->

---->de-ringing ---->

Quando si decodifica un video DivX è possibile scegliere il tipo di postprocessing da applicare in fase di visualizzazione: ci sono 7 livelli possibili, da 0 a 6. Con il postprocessing pari a 0 non si applica nessun filtraggio video: l'immagine contiene tutti gli artefatti prodotti dal divX e si alleggerisce al massimo la occupazione di CPU; è la modalità che si consiglia per processori meno potenti che tendono a produrre video a scatti; con il postprocessing pari a 6 si applica il filtraggio maggiore, con un conseguente incremento di calcolo che per CPU non recentissime e filmati ad alta risoluzione può introdurre facilmente video a scatti. Il postprocessing di livello 5 e 6, che effettua il de-ringing, a causa della notevole potenza di calcolo richiesta, funziona a partire dalle CPU di "terza generazione" ovvero almeno di classe "Pentium III".

Per scegliere se applicare il postprocessing e con quale entità ( da 0 a 6) si procede esattamente come per il DivX;-). Utilizzando ad esempio il Windows Media player 6.4 ( che per la cronaca è disponibile anche nell'ultimissimo Windows XP e in tutti i casi l'eseguibile ha il nome MPLAYER2.exe, facilmente rintracciabile con una operazione di ricerca) basta caricare un filmato divX e cliccare su  file/proprietà/avanzate/DivX Decoder filter/Proprietà. Selezionando su MIN si ottiene il postprocessing di livello 0 ( nessun filtraggio) e naturalmente su MAX il livello massimo, il postprocessing di livello  6 .

Ecco tabellati i filtraggi che sono applicati in corrispondenza del livello di postprocessing impostato: osservo come il filtraggio interviene progressivamente prima sulla luminanza (luminosità) ed in seguito sulla crominanza ( colore) ; aumenta l'occupazione di CPU e migliora la qualità del video.

 

Livello di postprocessing impostato
0 1 2 3 4 5 6

filtraggi operati

de-blocking luminosità asse x   X X X X X X
de-blocking luminosità asse y     X X X X X
de-blocking colore asse x       X X X X
de-blocking colore asse y         X X X
de-ringing luminosità (solo CPU almeno di classe PIII)           X X
de-ringing colore (solo CPU almeno di classe PIII)             X

Occupazione media %
CPU P4 1700 Mhz
filmato
720*576

  47% 67% 74% 81% 86% 99% 100%
(scatti)

Occupazione media %
CPU P4 1700 Mhz
filmato
512*384

  27% 36% 40% 43% 45% 54% 57%

 


 

Passiamo al codec di compressione; il DivX 4.12 rispetto al suo predecessore Divx;-) è un codec video certamente più evoluto e sopratutto molto più malleabile.
Il maggior numero di parametri da settare lo adattano più facilmente alle varie esigenze che si possono venire a creare ed è pertanto possibile utilizzarlo nelle situazioni più diverse e tra loro contrastanti:
- massima velocità di compressione ( ad esempio  l'utilizzo del DivX come codec di compressione per la digitalizzazione del video in tempo reale)
- massima qualità del video ( ad esempio per backup o scambio di video ad alta qualità su CDR)
- massima compressione possibile (vedi il video da inserire su internet)
- compromesso qualità- spazio occupato con l'impostazione precisa del bitrate medio ( film interi su uno o più CDR)

Per ciascuna delle esigenze elencate, inserendo i parametri più consoni è possibile ottenere ciò che maggiormente serve: naturalmente il DivX non è il codec video definitivo e non è privo di difetti, ma senza dubbio ha raggiunto una qualità e versatilità elevatissima. La natura dell'mpeg 4 a causa della quantizzazione H.263 pensata originariamente per la videoconferenza, porta il Divx ad essere ottimizzato per compressioni video medio-alte, eseguite ad una ottima velocità, esattamente come lo era il DivX 3.11;-): negli altri casi elencati ( backup ad alta qualità, codec per la digitalizzazione del video) esistono altri codec più ottimizzati: il Mjpeg, e l' huffyuv rispettivamente per la digitalizzazione e il backup ad alta qualità

Ricordo ancora una volta la natura freeware del DivX e che è un codec tutt'altro che definitivo: si parla , come detto, già di una imminente versione 4.5.

Vediamo i parametri di compressione:

La prima cosa da settare è il tipo di compressione video: i metodi disponibili, si settano tramite : variable bitrate mode  e sono:
- 1 pass
- 1 pass quality- based
- 2 pass first pass
- 2 pass second pass

Osservo come diversamente dall'mpeg1 e 2 non esiste la modalità con bitrate costante.


Vediamo al caso più frequente che è il metodo 1 pass in cui il codec si comporta più o meno come per il DivX;-) 3.11 low motion.

Per tutti coloro abituati al DivX 3.11, che desiderano ottenere velocemente risultati analoghi, i parametri da inserire sono i seguenti   :rispetto all'immagine a sinistra, l'unico parametro da settare è il bitrate video medio (output video bitstream at.....); se si desidera velocizzare del 15-20 % la conversione ed ottenere velocità di conversione analoghe al DivX;-) 3.11 è possibile utilizzare Performance/quality= Medium; la qualità peggiorerà leggermente anche se non in maniera evidente. lo sconsiglio a meno di configurazioni Hw parecchio datate.

Vediamo di scendere un pò nei dettagli e capire la funzionalità dei diversi parametri.


Performance/quality: Tempo impiegato dalla CPU per la compressione e quantità di approssimazioni fatti nella compressione. Con slowest, a parità di tutti gli altri parametri,  si ottiene la migliore qualità video , mentre il prezzo da pagare è una leggera diminuizione di velocità di compressione, dal 10 al 20% più lenta del DivX 3.11 a secondo della risoluzione e del metodo utilizzato ( conversione da AVI, da DVD,.....) Il mio consiglio è di utilizzare sempre la modalità slowest in tutti i casi in cui è importante ottenere la migliore qualità possibile: le altre  modalità (slow, medium, fast) sono utili solo in rari casi come nelle digitalizzazioni video quando in cui si hanno perdita di frame a causa dei limiti della CPU, o per rapide previsualizzazioni ad esempio in ambito editing non lineare. Sconsigliata sempre e in ogni caso la modalità Fastest che produce video rumoroso e qualitativamente insufficiente.

Ecco ad esempio le velocità in fotogrammi al secondo, nel caso della compressione mpeg1-->DivX fatta tramite virtual dub: il video ha la risoluzione 352*288 il bitrate imposto è 800 Kbits/s; la compressione è eseguita con il mio P4 1700 Mhz.

Performance/quality

fotogrammi al secondo

velocità rispetto
alla modalità "medium"
note
fastest 91.3 + 19.3 % qualità insufficiente
fast 78.3 + 3 %  
medium 76.5 + 0% stessa velocità del DivX;-)
slow 65.7 - 16.4 %  
slowest 64.5 - 18.6 % massima qualità

Il parametro più importante da settare è naturalmente il bitrate video ( valore medio vista la compressione con bitrate variabile) che esattamente come per il DivX;-) 3.11 è espresso in Kbits/s : in realtà il DivX esprime il bitrate in kbits/s ( 1000 bits al secondo) mentre il DivX;-) in Kbits/s (1024 bits/s), differenze normalmente trascurabili.
Il bitrate video lo si inserisce tramite lo slider orizzontale o numericamente in output video bitstream at....... Kilobit/second: il range di valori possibili va da 0 a 6000 Kbits/s.

Per avere un termine di paragone , ricordo i bitrate video normalmente  utilizzati negli altri standard: il divX grazie alla sua maggiore capacità di compressione può ottenere analoghi risultati qualitativi con bitrate dimezzati; con bitrate pari a 1/3  - 1/4 (cifre assolutamente indicative), è possibile mantenere ancora una qualità più che sufficiente

Formato Risoluzione Bitrate ( Kbits/s)
Vcd standard  352*288 1150 costante
SVCD - bitrate standard  352*576 - 480*576 2450 max
DVD   720*576 9800 max
bitrate medio normalmente  5000-7000

L'encoder DivX cercherà di rispettare il bitrate video impostato: il valore sarà raggiunto, ma sempre con un certo margine di errore, solo se il video da comprimere ha una durata non trascurabile ( diciamo a partire da 3 minuti) e se il bitrate immesso è "coerente" con la risoluzione scelta. In altre parole se ad esempio si setta un bitrate video pari a 100 Kbits/s ( 12 Kbyte/s) con una risoluzione di 720*576 pretendendo tale bitrate, certamente se ne otterrà uno notevolmente superiore; al contrario se si imposta una risoluzione "tipo francobollo", (ad esempio 176*132) e si imposta un bitrate molto elevato (2000 Kbits/s) certamente si otterrà un bitrate medio inferiore. Un ottimo punto di partenza per i bitrate video da utilizzare lo trovate nell'articolo che ho scritto per il DivX;-) 3.11 : inserendo tali valori il bitrate tenderà a stabilizzarsi verso i valori indicati con una generica tendenza a porsi al di sotto dei valori immessi ( ricordo che nell'articolo mi riferisco sempre a video senza bande nere, preventivamente eliminate con il cropping).

Per chi vuole fare dei test e verificare fino a che punto il bitrate è rispettato, la formula da utilizzare è la seguente .

Dimensione  file in Byte= 125 * bitrate audio-video in Kbit/s * durata filmato in secondi.
Dimensione  file in KByte= (125 * bitrate audio-video in Kbit/s * durata filmato in secondi)/1024

Se ad esempio si convertono 180 sec di video con bitrate imposto pari a 600 Kbits/s per il video DivX e 128 Kbits/s per l'audio, se fosse rispettato il bitrate imposto, si dovrebbe ottenere   un file di dimensioni pari a
125*(600+128)*180 = 16.384.000 byte =15996 KByte=15.62 MByte ( gli ultimi due passaggi sono stati fatti dividendo per 1024; 1K=1024 Byte).

Naturalmente per i test si può tranquillamente non convertire l'audio e

Dimensione  file in Byte= 125 * bitrate video in Kbit/s* durata filmato in secondi.

Ecco a titolo di esempio i bitrate ottenuti nel caso di risoluzione 512*288, nella conversione di un breve spezzone del film Dinosauri della Disney

  Filmato durata 80 secondi Filmato durata 240 secondi
Bitrate imposto
in Kbits/s
Bitrate ottenuto Errore % Bitrate ottenuto Errore %
400 468  - 17% 440  - 10%
600 570 - 5% 635 + 5%
1000 770  - 23% 1001   0,1 %
1500 981 - 34% 1121 - 25%

Osservo prima di tutto come il bitrate ottenuto  è quasi sempre inferiore rispetto a quello immesso nei parametri. E' evidente come gli errori sul bitrate tendono a diminuire aumentando la durata della conversione: nel caso del bitrate pari a 1000 Kbits/s  il bitrate è addirittura rispettato. Comunque tale errore, anche dopo 20-30 minuti di filmato, pur diminuendo, tenderà a rimanere con entità anche elevate se i bitrate non sono adatti alla risoluzione scelta.  Non a caso per la 512*288 nell'articolo sul DivX consiglio l'utilizzo di 950-1100 Kbits/s e il bitrate di 1000 Kbits/s non produce errori.

Concludo con la formula con la quale fissata la dimensione del file che si vuole ottenere e i secondi di video da convertire  si calcola il bitrate medio che si desidera ottenere:

Bitrate audio-video (in Kbit/s) = (8388.6* dimensione file in Mbyte)/durata filmato in secondi

Sia il caso di un video di 70 minuti (70*60=4200 secondi) da convertire in un divX avente dimensione pari a 700 Mbyte (circa la dimensione di un CDR-80): Bitrate audio-video (in Kbit/s) = (8388.6* 700)/4200= 1398 Kbit/s. Se ad esempio si utilizza audio mp3 128 Kbits/s  si potrà inserire un bitrate video di 1270 Kbits/s  (128 audio + 1270 video = 1298 audio-video). Naturalmente il bitrate medio a causa del bitrate variabile, cercherà di approssimare il valore immesso: una approssimazione per difetto renderà il file più piccolo di quanto preventivato .

 

L'altro parametro presente anche nel DivX;-) 3.11  è il Maximum Keyframe interval:

Il DivX come tutti i codec Mpeg e in perfetta analogia con la maggior parte dei codec video più importanti (ad esclusione del DV, e del Mjpeg) comprime la maggior parte dei fotogrammi come differenze da frame precedenti (o seguenti): i fotogrammi codificati come differenze sono detti normalmente delta frame o intraframe. Al contrario,  i relativamente pochi frame che sono compressi indipendentemente dagli altri prendono il nome di Keyframe: la loro utilità è duplice poiché semplificano all'encoder la ricerca delle differenze tra frame simili e indirettamente favoriscono la qualità del video,  e permettono di agganciare e quindi decomprimere il video nel momento in cui si salta in punto desiderato, ad esempio con il cursore del windows media player: in corrispondenza dei keyframe si inseriscono anche le informazioni relative al sincronismo audio video.
Il DivX  inserire automaticamente keyframe nei cambi di scena in cui non c'è alcun vantaggio nel cercare le differenze con fotogrammi del passato essendo l'immagine del tutto diversa ; al contrario nel momento in cui non vengono rilevati cambi di scena il codec inserisce un keyframe ogni X secondi in coerenza con il  valore impostato dal parametro "Maximum Keyframe interval".

Da notare come l'inserimento dei Key frame in maniera automatica, viene effettuato sempre tranne nel caso in cui si setta performance/quality fastest (la peggiore qualità possibile).

Se si inserisce un valore troppo basso (tipo 25 frames ) il numero dei keyframe diventa elevato con la conseguenza di un incremento del bitrate; al contrario se si inserisce un valore elevato (tipo 1000 frames), quando ci si sposta con il cursore in una particolare posizione, ogni volta in cui il video non contiene cambi scena, il sincronismo audio video avviene con un certo ritardo e solo dopo un po' si assiste alla riproduzione normale.

Il mio consiglio è di utilizzare, nel caso di compressioni più o meno spinte, Maximum Keyframe interval pari a 150-250 : il valore di 300, eccessivo, è pensato per il video NTSC a 30 fps, 1 Keyframe ogni massimo 10 secondi,  e l'equivalente per il Pal è 250 frames).

E' importante osservare come è possibile utilizzare il DivX analogamente ad un codec Mjpeg, Mpeg2 I frame e DV: basta inserire Maximum Keyframe interval = 1 ; ciascun fotogramma sarà compresso indipendentemente dagli altri senza nessun calcolo delle differenze tra frame successivi esattamente come succede per gli altri codec citati. In tal caso si hanno 3 conseguenze:

- minimo utilizzo della CPU in fase di compressione che non deve preoccuparsi della onerosa operazione della compensazione del moto ( ricerca dei blocchi 8*8 pixel simili tra immagini successiva e calcolo delle differenze): tale opzione è consigliata nell' utilizzo del DivX come codec di compressione  nelle digitalizzazioni in tempo reale con schede TV tuner o schede video dotate di input analogico. In base ad alcuni test si ottiene una occupazione di CPU inferiore di circa 15% - 25%

- immediato accesso ai fotogrammi in fase di player: tale caratteristica rende il DivX con l'impostazione Keyframe interval = 1 un ottimo codec "d'appoggio" per sw quali Premiere che per le previsualizzazioni  possono utilizzare un codec a scelta; il divX tra l'altro è super ottimizzato in termini di potenza di calcolo richiesta in fase di compressione e visualizzazione, cosa fondamentale nel caso di Sw di editing non lineare.

- massima qualità possibile: vedremo tra breve come è possibile raggiungere la massima qualità teoricamente possibile dal codec solo con Keyframe interval = 1.

L'altro parametro modificabile è Max CPU usage in cui si setta la percentuale di occupazione di CPU per la compressione: ha senso selezionare tale opzione e inserire un valore di 70-80% solo se si desidera utilizzare il computer durante la compressione per altre  attività e si desidera avere una maggiore potenza di calcolo per tali operazioni. Naturalmente la compressione sarà proporzionalmente più lenta.

L'opzione Deinterlace con il mio P4 è inutilizzabile poichè manda in crash l'operazione di compressione: è certamente un bug che verrà risolto nelle prossime versioni: in tutti i casi è possibile fare il deinterallacciamento con altri sw, virtual Dub tra tutti: la cosa comunque interessante da constatare è che attualmente il DivX è inadatto per comprimere video interallacciato, esattamente come succede per l'mpeg1.
La cosa non deve essere considerata un vero difetto, nel momento in cui allo stato attuale il DivX è pensato per la visualizzazione su PC, e il monitor del PC essendo progressivo è inadatto alla visualizzazione di video interallacciato. Probabilmente nelle prossime versioni del DivX sarà implementata la codifica interallacciata ( prevista dall'mpeg4), operazione tutt'altro che banale per i programmatori nel momento in cui la gestione della compressione diventa molto più complessa ; infatti ogni frame ( ad esempio XXX*576 pixel) deve essere visto come composto da 2 frame (XXX*288 nell'esempio) e le compensazioni del moto, le IDCT,..etc, etc,... devono essere implementate sia per i semiquadri che per i frame interi, esattamente come succede per l'mpeg 2. Naturalmente occorrerà poi visualizzare il video interallacciato su pc tramiete la modalità BOB, come implementato dai vari DVD player SW per PC: dovrebbe essere compito dei programmatori del DivX  fornire almeno un player di riferimento, BOB compatibile.


Continuando con l'esame dei parametri, il è assolutamente ininfluente nella compressione, poiché fissa il valore di default di postprocessing per il player installato nel computer e diversamente da quello che potrebbe sembrare,
non fa quello che per logica sembrerebbe più opportuno: forzare qualsiasi player a visualizzare tale filmato con quel livello di postprocessing ( permettendo eventualmente di diminuire poi il postprocessing sul player). In pratica tale parametro ha la stessa funzione settabile, come visto, nel windows media player 6.4 (file/proprietà/avanzate/DivX Decoder filter/Proprietà ): settato il valore di postprocessing, questo da quel momento in poi verrà considerato di default, sino ovviamente a nuova modifica.

Rimangono da analizzare i seguenti parametri ( gli altri in modalità 1 pass non sono attivi)
Il mio consiglio è di lasciare gli ultimi 3 valori di defoult: 2000, 10 e 20 ed eventualmente provare a modificare i primi 2, Maximum e Minimum Quantizer.

Il fattore di quantizzazione è analogo a quello presente nell'mpeg 1 e 2, che normalmente è chiamato Q e che ho analizzato nella sezione delle news di Tmpeg.  In breve  a secondo del bitrate impostato, il codec DivX dopo aver operato la compensazione del moto ( ricerca tra fotogrammi successivi dei blocchi 8*8 pixel, simili tra loro), fotogramma per fotogramma sceglie il livello di compressione espresso tramite il fattore di quantizzazione Q.

Q e' un valore compreso tra 2 e 31: Q=2 corrisponde alla massima qualità, minore compressione e naturalmente maggiore spazio occupato dal video compresso: Q=31 corrisponde alla minima qualità , maggiore compressione e naturalmente minore spazio occupato dal video compresso.

Con valori di Q compresi tra 2 e 5 si ottengono artefatti spesso poco visibili; con Q superiore a 5  iniziano ad essere molto evidenti gli artefatti che con Q maggiore di 10-12 rendono il video solo adatto nei casi in cui il bitrate deve essere minimizzato il più possibile ( video-conferenza, web cam, streaming...)

Un Divx di buona qualità dovrebbe avere sempre valori di Q compresi tra 2 e 5: per una qualità ottima tra 2 e 4 (magari con una percentuale trascurabile di frame aventi Q=5)

Osservo che il fattore di Quantizzazione chiamato nell'mpeg 1 e 2 con la sigla Q, mantiene lo stesso nome nel DivX, mentre nel vecchio DivX;-) prende il nome di DRF : il software nundub, una versione modificata di Virtual Dub capace di creare DivX;-) tramite doppia passata, utilizza il termine DRF per fattore di quantizzazione.

Per comodità è più semplice pensare a Q come Quantità di deterioramento del video, ovvero quantità di compressione.

Ovviamente c'è una relazione strettissima tra Q, il bitrate imposto e il bitrate che di conseguenza si otterrà, che, come ricordo non coincide a causa della maniera con cui è implementato il bitrate variabile.
E' possibile settare il valore massimo e minimo di quantizzazione: per valori e quindi intervalli che tendono al minimo ( a 2 )  si otterrà  video meno compresso , migliore qualità e maggiore spazio occupato; per valori e quindi intervalli che tendono al massimo ( a 31)  si otterrà  maggiore compressione, minore qualità e minore spazio occupato.

Il codec in tutti i casi, applica una quantizzazione Q compresa tra il  minimo e massimo impostati in : all'interno dell'intervallo fissato, cerca di utilizzare i valori  più consoni in grado di ottenere un bitrate medio che si avvicini a quello impostato. Nelle scene più dinamiche per minimizzare il bitrate, il codec  utilizzerà una maggiore compressione e quindi un Q più alto, al limite pari al massimo impostato; nelle scene più statiche utilizzerà un Q più basso nel momento in cui tali scene tendono naturalmente a produrre un bitrate basso.

Osservo come non succede il contrario: cercare a tutti i costi di raggiungere il bitrate imposto e cercare se possibile di utilizzare Q variabile tra min e max imposto.

E' importante capire come tanto maggiore è l'intervallo tra minimo e max Q, tanto più il codec è libero di adattare la compressione al tipo di video per soddisfare il bitrate impostato; al contrario se l'intervallo è ristretto a pochi valori, il bitrate difficilmente seguirà il valore imposto ma dipenderà fortemente dall'intervallo scelto.

Il caso estremo è quello in cui MAX e MIN coincidono: in tal caso il bitrate impostato diventa assolutamente ininfluente e naturalmente si otterrà un bitrate medio che dipenderà solo dal valore di Q inserito oltre che naturalmente dal video: tale compressione è identica alla compressione 1 pass quality- based in cui il bitrate non è settabile.

Ovviamente se min. è troppo alto ( 5-6) significa inserire sempre una discreta compressione; al contrario se Max è troppo basso, si tende a favorire la qualità a discapito della compressione.

Ecco alcuni esempi: ricordo ancora una volta come conviene pensare a Q come quantità di deterioramento, compressione del video.

Esempio
N.
Maximum
quantizer
Minimum
quantizer
 
1 12 2 E' il settaggio di default, che consiglio in tutti i casi in cui si desidera un ottimo compromesso qualità- spazio occupato e in cui si  desidera il più possibile avvicinarsi al bitrate medio imposto, cosa ad esempio fondamentale per la divisione corretta di un film in 1, 2 o 3 CD. Ovviamente, il bitrate medio ottenuto, pur fortemente condizionato da quello imposto, dipenderà fortemente dalla risoluzione del video da comprimere. E' il settaggio che consiglio per la conversione dei film DVD in un solo CD
2 6 2 Caso analogo al precedente, in cui un Max più basso garantisce un video migliore anche nelle scene più dinamiche; il bitrate ovviamente tende a salire se sono numerose le scene dinamiche. E' il valore che consiglio per le conversioni dei film DVD in un 2 CD
3 12 4 Caso analogo al N.1, in cui un Min più alto, obbliga una maggiore compressione anche nelle scene più statiche per le quali si è disposti a perdere leggermente di qualità: il bitrate ovviamente tende a diminuire se sono numerose le scene statiche.
4 4 2 Qualità elevata e bitrate che tende ed essere elevato e a non seguire il valore imposto. Da utilizzare quando la qualità è prioritria.
5 16 7 Compressione elevata, qualità solo sufficiente,  e bitrate che tende ed essere basso e a non seguire il valore imposto.
6 2 2 Massima qualità possibile nel momento in cui la quantizzazione è fissa a 2: il valore  inserito per il bitrate diventa ininfluente e si ottiene una qualità identica bit a bit, con la compressione in modalità variable bitrate mode=1 pass quality- based in cui si è settato encoding quality pari a 100% e il medesimo valore di Maximum Keyframe interval:
7 31 31 Peggiore qualità possibile, da utilizzare solo per "curiosità": analogamente al caso precedente  il valore  inserito per il bitrate diventa ininfluente e si ottiene una qualità identica bit a bit, con la compressione in modalità variable bitrate mode=1 pass quality- based,  in cui si è settato encoding quality pari a 0% e il medesimo valore di Maximum Keyframe interval.

Come visto negli ultimi 2 casi, se il valore minimo e massimo del fattore di quantizzazione si settano uguali, si ha una compressione a qualità costante, in cui il bitrate video ottenuto è indipendente da quello inserito, valore che è del tutto trascurato: a mo' di test basta fare ad esempio 2 compressioni identiche con MAX=MIN e con 2 valori diversi di bitrate (ad esempio il max 6000 e il min 0); si otterranno 2 video bit a bit identici aventi pertanto stesse dimensioni e bitrate medio. La compressione a qualità costante la si può ottenere oltre che nel modo visto, utilizzando la modalità variable bitrate mode = 1 pass quality based : ci ritorno tra breve.

E' importante osservare come il Maximum Keyframe interval condiziona fortemente il bitrate ottenuto a causa dell'inserimento di frame di riferimento, compressi senza il calcolo di differenze con frame precedenti: normalmente un Key frame occupa da 2 sino a 3-4 volte lo spazio di un frame calcolato come differenza. A parità degli altri parametri, maggiore è il N. dei Key frame, maggiore sarà il bitrate video.

A titolo di esempio ecco 3 diversi casi di compressione in cui si è inserito min=max=2 ovvero la massima qualità possibile e si sono settati valori di Key frame rispettivamente pari a 1, 5 o 300 (come visto il parametro bitrate è ininfluente). Ciascuna riga verticale rappresenta un fotogramma, la cui altezza rappresenta lo spazio occupato: l'esempio è riferito ad un video 720*576 in cui i fotogrammi dal 2 al 14 sono identici. Identici risultati li si hanno nel caso di bitrate mode=1 pass quality- based in cui si è settato encoding quality pari a 100%

Video 720*576
Maximum quantizer = minimum quantizer = 2

Andamento del bitrate

Maximum Keyframe
 interval
Bitrate
medio ottenuto
Kbits/s
Bitrate
medio ottenuto
Kbyte/s
Compressione Note
1 13440 1680 1 : 9.3 E' una compressione comparabile con il formato Mjpeg in cui si è settato un rapporto di compressione 1:9. Come termine di paragone il formato DV, sempre a 720*576, utilizza un bitrate pari a 25000 Kbits/s, poco meno del doppio.
La compressione di tipo Inter frame, priva del calcolo delle differenze tra fotogrammi successivi, fa si che i frame da 2 a 14, tra loro identici, sono memorizzati singolarmente con una evidente ridondanza.
E' il settaggio che garantisce la massima qualità possibile con il DivX: da notare come si ottiene un bitrate (13440Kbits/s medio) ben superiore rispetto al 6000 Kbits, valore che appare come il massimo impostabile per i l codec.

Utilizzando la sintassi dell' mpeg 1-2 la compressione è del tipo IIII ( I frame only)

5 6776 847 1 : 18.3 La presenza di un key frame ogni 5, dimezza il bitrate; osservo come rispetto al caso precedente il degrado qualitativo è presente ma molto poco evidente anche con il fermo immagine e tramite forti ingrandimnti.

Utilizzando la sintassi dell' mpeg 1-2 la compressione è del tipo IPPPP con GOP pari a 5 (allo stato attuale il divX non prevede l'uso dei B frame); osservo come si ottiene un bitrate medio normalmente utilizzato nei DVD.

300 5144 643 1 : 24.2 Inserendo un Key frame ogni 300, si guadagna ancora in compressione: il bitrate scende leggermente e in piccola parte peggiora la qualità.

Osservo come il DivX nei cambi scena inserisce automaticamente un Key frame come per ogni buon encoder mpeg.

Molto interessante il fatto che i frame  frame da 2 a 14, tra loro identici, sono memorizzati solo una volta ( il bitrate  per tali frame è pari a 0 come si evince dal grafico). Tale caratteristica, già presente nel divX 3.11 è molto utile nel momento in cui si vogliono comprimere slide show di immagini fisse in successione insieme ad una colonna sonora: in tal caso il bitrate rimane nullo durante tutto il tempo in cui l'immagine rimane ferma; tale caratteristica è tipica dell'mpeg4 ma non dell'mpeg1/2 in cui i codec normalmente sprecano bitrate in situazioni del genere. Ecco il classico andamento del bitrate video negli slide show DivX

Rimangono da analizzare gli ultimi 3 parametri (rate control...), per i quali, come detto, è consigliabile lasciare i valori de default: 2000, 10, 20.

Esattamente come succede per il bitrate medio, tali valori sono trascurati dal codec solo se si settano  min e max allo stesso valore: in caso contrario modificano in maniera evidente la metodologia di compressione.

Nell'Help del DivX, si parla di modifiche di tali parametri consigliate agli utenti esperti ("more advanced users"), simpaticamente detti "spiriti avventurosi" ( adventurous souls): agli altri consiglio di saltare l'analisi di questi 3 parametri e di lasciare i valori 2000, 10, 20..

 I parametri rate control stabiliscono come il codec cerca scena per scena, di adattare i valori di quantizzazione (sempre compresi tra l'intervallo fissato da min e max quantizer) e di conseguenza il bitrate,  per far si che il bitrate medio sia il più vicino possibile a quello settato in bitrate video. Ecco i parametri modificabili

Rate control average period, frames, condiziona la maniera con cui il codec verifica il bitrate che si sta ottenendo, e modifica la quantità di compressione per cercare di raggiungere il bitrate medio imposto. Il codec deve fare periodicamente questa operazione, cercando di aumentare il bitrate quando il valore medio del bitrate, nel recente passato, è inferiore rispetto a quello impostato e al contrario cercare di diminuirlo se succede il contrario.
Il valore che si inserisce, in fotogrammi, indica  dopo quanti fotogrammi il codec dimentica ciò che è successo nel passato, dove per "dimentica" si intende che il bitrate medio ottenuto nel passato non condiziona più la gestione del bitrate della scena che si sta comprimendo ( bitrate che si cerca di aumentare se il bitrate medio del passato è inferiore a quello medio imposto, o si cerca di diminuire nel caso contrario) . In pratica se si inserisce un valore piccolo, il bitrate tenderà ad essere indipendente dal valore di bitrate impostato, dimenticando velocemente il bitrate nel recente passato : con valori grandi, il bitrate tenderà maggiormente a seguire il bitrate impostato, avendo maggiore memoria del passato.
Naturalmente si intuisce come "piccolo" e "grande" dovrebbero essere condizionati dalla durata del filmato che si sta convertendo: il valore di default, è pari a 2000 fotogrammi, ovvero nel caso di video PAL ( 25 fps) è pari a 80 secondi: il codec in base al comportamento del bitrate degli ultimi 80 secondi, adatterà il bitrate della scena che sta convertendo aumentando o diminuendo la compressione con i criteri appena visti. Se si converte un video breve, ad esempio di 60 secondi, qualsiasi valore immesso superiore a 2000 frame, non creerà naturalmente nessuna variazione e si realizzaranno video bit a bit identici ( viene ricordato il bitrate degli ultimi 80 secondi e quindi scena per scena il bitrate di tutto il "passato"). Per video brevi è pertanto opportuno lasciare il valore 2000. Al contrario se si sta facendo una lunga conversione, un intero film o un filmato di 20-30 minuti, potrebbe essere opportuno incrementare tale valore magari a 8000-10000.

Sinceramente non è facile valutare gli effetti di tale parametro, in quanto occorrerebbe convertire più volte un lungo filmato (di almeno 10-15 minuti) , mantenendo i medesimi parametri e variando il rate control period: al di là del tempo che occorre, non è neanche facile valutare esattamente eventuali benefici qualitativi , poiché l'unico parametro facilmente verificabile è il soddisfacimento o meno del bitrate medio: per il resto occorrerebbe valutare in parallelo la qualità video di scene critiche, operazione tutt'altro che semplice e obbiettiva. In conclusione penso che fermo restando il valore 2000, che dovrebbe andar bene sempre, è possibile provare a fare lunghe conversioni ( vedi film in DVD) con valori maggiori, diciamo 8000-10000.

Rate control reaction period, frames : condiziona la maniera con cui il codec adatta il bitrate quando si ha un passaggio da una scena statica ad una dinamica ( incremento del bitrate) o viceversa ( decremento del bitrate).
 Con valori alti ( diciamo 30-50,  pari cioè a un paio di secondi) si favoriscono le scene dinamiche e si tende a deteriorare le scene più statica; viceversa per valori più bassi. 10 è il valore di default.

Questo parametro va maneggiato con attenzione perché , come si vede dai grafici che seguono, tende a modificare profondamente la gestione del bitrate e quindi la qualità del video. Ho compresso un video in cui dopo una scena molto statica, segue una scena discretamente dinamica: ho analizzato il bitrate nel caso di defoult (10, al centro), e in due casi estremi, 1 e 60. Il rettangolino in rosso rappresenta lo spazio occupato dal fotogramma chiave in cui inizia  la scena dinamica; la curva in bianco descrive l'andamento del bitrate medio.

Rate control reaction
period, frames

Andamento del bitrate

 Note
60 Lenta velocità di reazione: appena inizia la scena dinamica (rettangolino in rosso) viene mantenuto un bitrate molto elevato, e solo dopo parecchi fotogrammi il bitrate viene abbassato in maniera tale da garantire sempre  una buona qualità , ma contemporaneamente un discreto risparmio di spazio.

Nel complesso si ha  una ottima qualità nella scena dinamica, cosa che si paga con un  leggero spreco di bitrate

10 (default) Velocità di reazione standard: è effettivamente il comportamento più sensato: appena c'è il cambio scena il codec prudentemente per una decina di fotogrammi mantiene il bitrate alto, decrementandolo ad un valore consono alla dinamicità della scena.

Non è un caso che il bitrate si "stabilizza" qui dopo circa 10 fotogrammi e nel caso di prima dopo 60, esattamente i valori impostati.

1 Massima velocità di reazione: il codec ha un comportamento effettivamente strano: appena dopo il cambio scena, viene usato un bitrate relativamente basso e segue uno strano andamento in cui si alternano 3 alla volta frame con compressione diversa.

A livello visivo le differenze non sono evidentissime, ma comunque il bitrate parla chiaro: il metodo di compressione cambia.
Osservo come se da un lato maggiore è il bitrate utilizzato per uno o più fotogrammi, tanto maggiore sarà la loro qualità, è importante considerare come spesso un alto bitrate per una scena  lo si può vedere anche come spreco di spazio occupato: magari con un bitrate notevolmente inferiore  si otterrebbe un video qualitativamente simile, ovvero con artefatti di fatto invisibili. Il video digitale compresso deve essere sempre un compromesso tra qualità e compressione !!!!

Quello visto è naturalmente un semplice test, ma è evidente come i valori standard effettivamente sembrano il miglior compromesso: in tutti i casi per gli "adventurous souls" , credo che la cosa importante sia comprendere la modalità dei test: prendere dei video ad hoc (nell'esempio visto il passaggio da una scena statica ad una dinamica), e comprimere lo stesso spezzone mantenendo costanti tutti i parametri tranne quello che si vuole analizzare che andrà settato anche con valori "estremi": segue poi l'analisi del bitrate (io ho utilizzato ad esempio Premiere, da cui ho prelevato gli schemi) e la visualizzazione del video sia in modalità normale sia procedendo un fotogramma alla volta. Può essere comodo usare a tale scopo  VirtualDUB  che permette tra l'altro ingrandimenti sino al 400%: attenti in Virtual Dub a settare option/preference/main/ output color depht /match display depht e settare il desktop con la modalità di colore a 24 o 32 bit per garantire una corretta resa cromatica.

Rate control down/up reaction, setta la sensibilità con cui il codec considera una scena come dinamica.
Per valori
alti, il codec tenderà a considerare le scene come dinamiche, sprecando a volte il bitrate; per valori bassi il codec tenderà a considerare le scene come statiche con una diminuizione del bitrate utilizzato ma con una qualità inferiore nelle scene più dinamiche. Incrementando il valore ( è possibile arrivare a 500-1000) si aumenta di conseguenza il bitrate medio. Osservo come tale parametro, diveramente dai 2 precedenti, non è espresso in frame (fotogrammi) ma è una specie di soglia numerica di sensibilità.

Diversamente dal parametro di prima,  le differenze, anche analizzando il bitrate, non appaiono evidenti: l'incremento del bitrate anche per valori molto elevati (500-100) a parità degli altri parametri è relativamente piccolo. Ciò che viene incrementato è sopratutto il bitrate delegato ai fotogrammi chiave che risultano meno compressi.

Concludo con una cosa ovvia: tutti i parametri visti si condizionano tra loro: bitrate medio imposto, intervallo di Key frame, intervalli di quantizzazione, velocità e soglia di reazione, "memoria del bitrate passato" si condizionano a vicenda ; rimane naturalmente fondamentale il parametro risoluzione video; maggiore saranno i pixel da comprimere, maggiore il bitrate a parità di qualità. Ovvio.


Il secondo metodo di compressione è quello settabile tramite  variable bitrate mode -1 pass quality- based.

E' il tipo di compressione a qualità costante, esattamente identico a quello visto in precedenza in cui la quantizzazione è fissa: Maximum = Minimum Quantizer.

Nel momento in cui si fissa la qualità e non il bitrate, quest'ultimo non può essere impostato ed è difficile ipotizzare il valore che assumerà al termine della compressione : sarà dipendente dalla risoluzione e dalle caratteristiche del video, oltre che naturalmente dai parametri che è possibile settare. Questi sono:

- Encoding quality: qualità video ( 0% qualità peggiore, 100% massima qualità) : questo parametro condiziona pesantemente la dimensione del file che si ottiene e pertanto il bitrate medio.

Seguono 3 parametri  le cui funzioni sono identiche alla modalità 1 pass:
-
Performance/quality: velocità con cui si effettua la compressione, da settare su slowest per garantire, a parità degli altri parametri, la  migliore qualità. rispetto al parametro appena visto, qui si setta il tempo che la CPU deve impiegare per la compressione e non si condiziona se non in minima parte il bitrate; con fastest, la CPU approssima al massimo i calcoli, aggiungendo maggiore rumore video e artefatti; la qualità migliora gradualmente sino al settaggio slowest. Come già detto a meno di particolari esigenze ( compressione su macchine molto lente, digitalizzazioni real time in caso di perdita di frame,,....) conviene settare su slowest.

- Maximum Keyframe interval : massimo intervallo possibile in fotogrammi, prima dell'inserimento del keyframe; il parametro lo ho già analizzato in precedenza. Da osservare che per un bug della versione 4.12 tale parametro in modalità variable bitrate mode -1 pass quality- based non è modificabile (la cella dove immettere il valore non è accessibile) e pertanto è possibile variarlo settando momentaneamente la modalità  variable bitrate mode -1 pass. Come già osservato ricordo come tale parametro modifica pesantemente il bitrate medio ottenuto .

La modalità variable bitrate mode -1 pass quality- based conviene utilizzarla tutte le volte in cui non è importante fissare un bitrate e pertanto la dimensione del video, ma al contrario è prioritaria la qualità.
L'applicazione più utile è quella della digitalizzazione real time, con una scheda TV o scheda video con ingresso video in, a in cui si utilizza il divX come codec video.

Le possibilità sono 2: la prima è quella di usare il DivX come codec di transizione analogamente come si farebbe se si utilizzase il Mjpeg o l'mpeg I frame: in pratica si utilizza il DivX alla sua massima qualità possibile e successivamente si converte il video digitalizzato in un altro formato, ad esempio  mpeg1 per realizzare un XVCD, mpeg 2 per fare SVCD : in questa maniera è possibile elaborare il video, montarlo con sw quali premiere, media studio,... e successivamente creare il montaggio finale.

In questo primo caso il mio consiglio è quello di utilizzare

Variable bitrate mode   1 pass quality- based
Performance/quality   slowest
Maximum Keyframe interval   1
Encoding quality   100%

o come visto l'equivalente

Variable bitrate mode   1 pass
Performance/quality   slowest
Maximum Keyframe interval   1
Maximum quantizer    2
Minimum quantizer    2
Output video bitstream    qualsiasi valore poichè ininfluente

Come visto un settaggio del genere si comporta analogamente ad un Mjpeg con compressione 1 : 8 - 1 :9, così da avere ad esempio per un full frame 720*576 un bitrate medio di circa 1600-1700 Kbyte/s e per un video a quarto di schermo 384*288 un bitrate medio di circa 500-550 Kbyte/s. La qualità è buona nonostante gli artefatti, anche se leggeri, sono presenti: non a caso utilizzando il Mjpeg conviene settare compressioni dimezzate, 1 :4- 1.5 con cui si hanno bitrate doppi. Inoltre il Mjpeg utilizza una quantizzazione diversa da quella utilizzata dal divX ( la H.263 dell'mpeg4) che è al contrario ottimizzata per le alte compressioni.

La seconda possibilità di utilizzare il DivX per le digitalizzazioni , è quella di una conversione real time in cui si settano i parmetri esattamente come per una normale conversione di file avi; in tal caso si può tranquillamente utilizzare la modalità 1 pass con Key frame pari a 200-250 e i parametri che ho abbondantemente descritto; l'occupazione di CPU si incrementa del 15-25 %, cosa che potrebbe creare perdita di frame su macchine più lente. Tale metodologia ha senso se il video va lasciato in DivX e non riconvertito in seguito in mpeg.

Ho più di una volta accennato all'equivalenza del metodo 1 pass quality- based con il metodo 1 pass in cui si setta Maximum quantizer = Minimum quantizer, ovvero quantizzazione costante. Ecco una tabella che mostra i valori da immettere per avere le equivalenze tra i due metodi, utile per maneggiare con maggiore cognizione i valori quantizzazione sopratutto nella scelta dell'intervallo max e min in modalità 1 pass.

Valore identico di Maximum quantizer
 e Minimum quantizer
nella modalità 1 pass
Corrispondente valore di
 Encoding quality nella modalità
1 pass quality- based
Qualità ottenuta

2

100%

 buona - ottima

3

circa 96 %

buona

4

circa 93 %

discreta- buona

5

circa 89 %

discreta

6

circa 85 %

sufficiente- discreta

7

circa 82 %

sufficiente

8

circa 79 %  

9

circa 76 %  

10

circa 72 %

mediocre

11

circa 69 %  

12

circa 65 %

insufficiente

......

......  

31

0% inutilizzabile

 


Rimane da vedere l'ultima modalità di compressione, novità ossoluta rispetto al DivX;-) 3.11; la compressione a doppia passata.

Concettualmente la cosa funziona così: con un qualsiasi software di compressione o elaborazione video  (Premiere, Media Studio, Virtual dub, Flaskmpeg,...) dopo aver selezionato il filmato che si vuole comprimere (o il montaggio nel caso ad esempio di Premiere)  si effettua in pratica una doppia conversione.
Nel primo passaggio, si settano i parametri in modalità
2 pass first pass, si sceglie normalmente il nome del file avi da creare e si avvia la conversione: in questa fase viene creato un avi che è illeggibile ( non standard) poiché in realtà non contiene una vera traccia video; contemporaneamente il codec DivX genera un file di testo che contiene le informazioni relative alle caratteristiche di ciascun fotogramma compresso.

Ecco un esempio del file di testo prodotto:

Frame 0: intra 1, quant 4, texture 18211, motion 0, total 18211, complexity 227637
Frame 1: intra 0, quant 4, texture 10457, motion 2115, total 18893, complexity 130712
                                          .....................
Frame 122: intra 1, quant 4, texture 121751, motion 0, total 121751, complexity 1521887
Frame 123: intra 0, quant 4, texture 57433, motion 4472, total 68540, complexity 717912
Frame 124: intra 0, quant 5, texture 47778, motion 4178, total 58707, complexity 955559
Frame 125: intra 0, quant 5, texture 47891, motion 4178, total 60888, complexity 957819
Frame 126: intra 0, quant 5, texture 44899, motion 4258, total 55753, complexity 897979
Frame 127: intra 0, quant 6, texture 31280, motion 3911, total 41641, complexity 977499
                                            ...................

Non è importante saper interpretare tale file, ma per i più curiosi  è facile vedere come per ciascun fotogramma (frame) è indicato se è o meno un Key frame (se intra= 1 il fotogramma è un Key frame), il livello di quantizzazione impiegato per quel frame (il valore quant molto utile per capire l'entità della  compressione che ci si dovrà aspettare), Texture e motion che sono due valori che quantificano il bitrate che si dovrà utilizzare per memorizzare il fotogramma e i vettori di movimento per la compensazione del moto, Total (analogo ma relativo alla somma delle due cose) e per ultimo complexity che è un valore che indica il grado di complessità dell'immagine ovviamente in termini di compressione video.

Dopo la prima fase , per la quale viene impiegato lo stesso tempo di una normale compressione 1 pass, si deve operare con la seconda fase, quella che produrrà l'avi definitivo: operativamente è fondamentale ne modificare il video da convertire e ne l'intervallo dei fotogrammi da comprimere (ciò sballerebbe del tutto la compressione). Si deve convertitre esattamente lo stesso video del primo passaggio: anche lo sfasamento di un solo fotogramma rende inaccettabili i risultato (il codec da per scontato che il frame ennesimo del primo passaggio è il medesimo del secondo, e non è in grado di verificarlo). Occorre poi settare i parametri in modalità 2 pass second pass, scegliere  il nome del file avi da creare (si può tranquillamente utilizzare lo stesso nome dell' avi "illegale" creato con il primo passaggio così da sovrascriverlo) e  avviare la compressione.

Quali sono i vantaggi e gli svantaggi della modalità 2 pass ?

Il vantaggio più evidente è un miglioramento globale della qualità della compressione, nel momento in cui nel secondo passaggio il codec  crea l'avi definitivo, sa già in anticipo le caratteristiche del video che dovrà comprimere; il miglioramento deriva da una distribuzione più intelligente del bitrate, con minori sprechi di bitrate nelle scene più statiche e un maggiore bitrate in quelle più dinamiche e difficili da comprimere.
Il secondo
vantaggio consiste in una migliore approssimazione del bitrate medio del file finale con il bitrate medio inserito, rispetto ad una analoga compressione fatta in modalità 1 pass: in questa maniera è più controllabile la dimensione dell'avi creato anche se rimane sempre un certo margine di incertezza. I due vantaggi, migliore qualità del video e controllo  del bitrate, rendono ideale la modalità 2 pass per le conversioni DVD--> DivX.

Normalmente, sempre nell'ipotesi di bitrate consoni con la risoluzione del video, il bitrate medio tende ad essere sempre leggermente inferiore rispetto al valore immesso e quasi mai superiore: in pratica il codec è "prudente", cosa ad esempio fondamentale nelle conversioni di un film esattamente in 1, 2 o 3 CD: in tal caso un bitrate medio superiore a quello imposto, renderebbe necessario l'utilizzo di un CD in più.

Il principale svantaggio della compressione a 2 passi, è il tempo di conversione che è praticamente raddoppiato; inoltre a meno di utilizzare software appositamente modificati per supportare la doppia passata , occorre operare due volte nella immissione dei parametri, cosa che rende impossibile una unica conversione in cui in automatico sono effettuati i due passaggi: ciò sarebbe utile quando si lascia ad esempio lavorare il computer da solo, magari di notte. In pratica l'utente deve immettere 2 volte i parametri prima di ottenere il video definitivo.

I due software più importanti che permettono l'utilizzo della doppia passata inserendo solo una volta i parametri, sono Xmpeg 4.2a e Vidomi : saranno poi loro a comunicare automaticamente al codec i parametri relativi alla seconda passata. Un esempio della compressione a doppia passata con Xmpeg42a ( e l'analisi dei problemi connessi) è analizzato nell'articolo relativo nella sezione: compressione DivX a doppia passata.

 

Vediamo a titolo di esempio come fare una conversione a doppia passata con Virtual Dub: ipotizziamo di convertire uno spezzone di un video avi in DivX: il modo di procedere è perfettamente identico se utilizziamo altri software.

Dopo aver caricato l'avi ed eventualmente selezionato l'intervallo dei fotogrammi da convertire , si setta il codec DivX 4.12 ( video/conversion/) e cliccando su configure si settano i parametri:

In questo primo passaggio occorre selezionare Variable bitrate mode  2 pass, first pass (primo passaggio della conversione a due passaggi)

I parametri da inserire sono gli stessi di della modalità 1 pass: come detto i parametri "standard" sono quelli in figura e occorre solo inserire il bitrate medio che si desidera ottenere. si è ovviamente liberi di modificare i valori in base a quanto visto: naturalmente non ha alcun senso utilizzare la modalità con Max=Min quantizzazione, cosa che renderebbe indipendente la compressione dal bitrate immesso e qiundi inutile la compressione a doppio passaggio, fatta al contrario proprio per ottimizzare la compressione dopo che si è fissato il bitrate medio.
Ricordo la formula vista in precedenza:

Bitrate audio-video (in Kbit/s) = (8388.6* dimensione file in Mbyte)/durata filmato in secondi

Calcolato il valore audio-video basta sottrarre il bitrate audio (ad esempio il classico 128 Kbits/s dell'mp3) e inserire il valore in output video bitstream at...

Rispetto al caso 1 pass, l'unico parametro in più da inserire è il nome del file di testo in cui il codec divX memorizzerà le informazioni sulla qualità del video , file che poi sarà utilizzato nel secondo passaggio. Il nome del file lo si inserisce in basso a destra in Log File:... cliccando su select. Va benissimo lasciare il nome standard c:\divx.log .

Per avviare il primo passaggio della compressione basta procedere normalmente esattamente come per qualsiasi altra compressione video: in virtual Dub basta cliccare su File/Save as avi e selezionato il nome dell'avi (es. test.avi) si avvia la compressione (salva).

ATTENZIONE: poichè in questo primo passaggio ciò che conta è la creazione del file di testo, nell'esempio divx.log, e l'avi creato è assolutamente inutile ( oltre che inutilizzabile), per velocizzare il primo passaggio è opportuno NON convertire la traccia audio :considerando la relativa lentezza con cui si crea ad esempio l'audio in mp3, si ottiene così una discreta velocizzazione. Con Virtual Dub basta settare Audio/No audio. Se si utilizza ad esempio flaskmpeg o Xmpeg, basta settare opzioni/opzioni globali progetto/audio/non processare l'audio.

Terminato il primo passaggio della compressione, saranno presenti sull'Hard Disk, un file avi piccolissimo (sempre se si è avuta l'accortezza di non convertire l'audio) che si potrà tranquillamente cancellare o sovrascrivere con l'avi definitivo, e il file di testo che contiene le informazioni sulle caratteristiche del video. Ovviamente se si lascia sempre lo stesso nome di default (c:\divx.log) il codec lo sovrascriverà ogni volta che si avvia una nuova compressione 2 pass, first pass.

Per il secondo passaggio occorre prima di tutto ricordarsi di settare i parametri relativi all'audio (in Virtual dub, cliccando su audio, eventualmente full processing mode,....) e come seconda cosa occorre ritornare a selezionare il codec di compressione, che questa volta va settato in 2 pass, second pass (secondo passaggio della conversione a due passaggi).

I parametri da settare sono quelli in evidenziati in giallo e rosso.

LOG FILE: bisogna accertarsi che è settato il file utilizzato nel primo passaggio, divx.log nell'esempio; il codec leggerà tale file e naturalmente non può sapere se è stato prodotto dalla conversione del medesimo avi o meno.

Frame dropping: è l'analogo del parametro smoothness- crispness del divX 3.11. In tutti i casi in cui si utilizzano bitrate relativamente bassi (tipico per i file da immettere su Internet in cui si è costretti a pesanti compromessi sulla qualità) si può indicare al codec come comportarsi nelle scene più dinamiche in cui si ha una evidente carenza di bitrate: settando su 0% nella condizione descritta,il codec comprimerà tutti i fotogrammi che risulteranno pieni di artefatti; si ottiene in tal caso sempre la massima fluidità. Il settaggio opposto 100% , fa si che nelle medesime condizioni il codec preferisce saltare dei fotogrammi pur di diminuire gli artefatti: il risultato è un video più fluido ma con meno artefatti. Naturalmente è possibile selezionare un qualsiasi valore intermedio.
Il mio consiglio è di lasciare 0% a meno di compressioni molto elevate, in cui è possibile utilizzare valori maggiori (40-60%). Con 100% si ottengono molto spesso salti di fotogrammi, anche in situazioni in cui sarebbe possibile una discreta qualità e totale fluidità.

Output video bitstream at... : qui occorre immettere lo stesso valore utilizzato nel primo passaggio.
Osservo come in realtà sarebbe possibile anche inserire un valore diverso : ad esempio ciò ha senso se si vogliono creare 2 avi identici nel contenuto, ma con bitrate diversi ed evitare di fare 4 passaggi:  in tal caso si fa un solo primo passaggio (2 pass-first pass) e utilizzando il medesimo log file, si fanno 2 conversioni di tipo 2pass second. In tutti i casi la migliore efficacia della compressione a doppio passaggio la si ha se primo e secondo passaggio sono effettuati settando il medesimo bitrate

Performance/quality: anche qui è consigliato slowest per ottenere la massima qualità.

Settati i parametri si avvia la conversione: il metodo è il solito (in Virtual File/Save as Avi). Osservo come è possibile sovrascrivere l'avi ottenuto dal primo passaggio, file che poi in tutti i casi va cancellato.

Al termine della conversione si ottiene l'avi definitivo e un ulteriore file di testo (analyse.log) che contiene delle informazioni sulla compressione effettuata: per i più curiosi può essere interessante osservare il valore di quantizzazione (new quant)  di ciascun frame e confrontarlo con l'analogo  valore scritto nel file log del primo passaggio: i cambiamenti del valore di quantizzazione sono il risultato dell' "intelligenza" della  compressione a doppia passata.

Concludo ricordando come esiste un sw che analizza graficamente i 2 file di log ottenuti nella compressione a doppia passata:  questo si chiama Morphix e lo potete trovare sul sito www.doom9.org nella sezione download: attualmente l'ultima versione disponibile è Morphix 0.71a. Ecco due immagini che mostrano in una conversione a doppio passaggio l'andamento dei bitrate e delle quantizzazioni. E' un ottimo ausilio per chi vuole fare dei test e approfondire l'utilizzo dei vari parametri di compressione.

Quantizzazioni:
in
bianco stima nel primo passaggio;
in
verde, nell'avi definitivo

Bitrate:
in
blu stima nel primo passaggio;
in
bianco, nell'avi definitivo

Un secondo Sw che consiglio di testare è DivX DRFAnalyzer che potete scaricare dal mio sito cliccando qui. Con tale software è possibile analizzare l'andamento del bitrate e del fattore di quantizzazione (il Q che in coerenza con  la terminologia del DivX;-) è detto DRF. Osservo che i grafici (diagrammi) sono visibili solo settando profondità colore 32 bit.  Il diagramma del bitrate inoltre non è visualizzabile in Windows 98SE. Il funzionamento del sw è garantito sotto ambiente Windows 2000/NT/XP; con Windows 98se dove lo ho testato funziona comunque senza problemi, anche se non è possibile visializzare l'andamento del bitrate.

Il sw fornisce varie statistiche sulla qualità del video: bitrate medio, Q medio (DRF Average) e fotogrammi saltati (Dropped Frames) , deviazione standard di Q rispetto alla media, percentuale di presenza di fotogrammi con quantizzazione pari a 2, 3, 4, 5...9, >9 e i grafici di bitrate e quantizzazione.

Ecco ad esempio i risultati dell'andamento di Q dello stesso video compresso tramite la singola o doppia passata: il bitrate medio e i parametri di compressione sono gli stessi.

Andamento di Q, compressione singola passata

Andamento di Q, compressione doppia passata

 

E' evidente nella compressione a singola passata la presenza di numerosi fotogrammi (gialli e rossi) aventi elevata compressione : si arriva ad avere numerosi fotogrammi con Q  pari a 7, 8 e 9; nella doppia passata la massima quantizzazione è 6 (sono presenti solo pochi fotogrammi con quantizzazione pari a 7): la qualità sarà chiaramente migliore. E' evidente come la migliore qualità media (eliminazione di Q elevati), deriva dall'aver eliminato i numerosi frame compressi con Q=2, gran parte dei quali sono stati compressi nella doppia passata con Q=3 , valore che garantisce ugualmente una ottima qualità.


DivX 5

Prima di concludere 2 parole sul futuro del DivX: si parla già di una versione 5 ( sarà disponibile forse i primi giorni di Marzo) che promette miglioramenti qualitativi e velocità superiori anche sino al 40%.
La cosa , se vera, non dovrebbe essere un miracolo, ma semplicemente il risultato di ottimizzazioni del Sw che originariamente è stato scritto in C++ per garantire la compatibilità su piattaforme diverse: da 2-3 mesi è iniziata l'operazione di ottimizzazione del codice che viene fatta riscrivendo in assembler le routine più importanti  utilizzando le istruzioni multimediali  MMX, SSE e SSE2 capaci di garantire la massima velocità a parità di operazioni svolte.

Altra grossa novità è la presenza dei B frame: il DivX 4.12 è un codec di tipo IPPPP e l'inserimento dei B frame ne migliorerebbe fortemente la qualità, a parità di bitrate, a causa della forte compressione che si ottiene con i B frame che permettono di offrire bit preziosi alla codifica dei P e I frame. Ricordo come i B frame , presenti nell'mpeg1 e 2 , sono dei fotogrammi calcolati come differenza tra immagini precedenti e antecedenti rispetto al fotogramma da comprimere; se da un lato ciò comporta una maggiore ottimizzazione nella compressione, dall'altra parte si ha  una complicazione nel codec , a causa del fatto che occorre in fase di compressione e decompressione fornire i fotogrammi in un ordine diverso da quello naturale ( a meno di ....macchina del tempo capace di prevedere il futuro !!!). In altri termini i B frame sono i fotogrammi con la maggiore compressione ma nello stesso tempo maggiore ottimizzazione.

Tale complicazione nel codec rende addirittura inutilizzabile le librerie standard Video for Windows (VFW): pare certo che la compressione B frame sarà possibile solo utilizzando una versione freeware modificata di Virtual Dub modificata dagli autori del Divx e distribuita con il codec divx5 ( appena sarà disponibile). Naturalmente in attesa di versioni  modificate di Xmpeg, videomi,... per utilizzare i B frame si dovrà ricorrere ad una catena quale Premiere-->video server-->Virtual dub o Xmpeg-->video server-->Virtual dub.

 

Altra novità, una implementazione di un player divX per la console Dreamcast: a causa della potenza di calcolo abbastanza ridotta di tale console, non è comunque possibile utilizzare risoluzioni elevate: le prime versioni Beta parlano di un massimo di 320*240 pixel, risoluzione addirittura inferiore rispetto al VCD.
A quando il promesso player per la PSX 2 che ha una potenza di calcolo nettamente superiore rispetto alla Dreamcast ?????  Si parla di una fantomatica versione beta; leggenda metropolitana?????

26 febbraio 2002

 

Ritorna alla pagina digital video