Guida ai formati video e alla compressione DivX (con Xmpeg)
Fixer in A.D. 2003
_file/image001.jpg)
Introduzione
Primo
Capitolo: Gli Standard del Video
1.1 Gli Standard Televisivi
1.2 Le Pellicole
Cinematografiche
1.3 I Formati del DVD Video
Secondo
Capitolo: La Compressione Video MPEG-4
2.1 Processo
di Riduzione e Compressione dei dati
2.2 Tipologie di Frame
2.3 I Codec MPEG-4: DivX, il
Principe
Terzo
Capitolo: Da DVD a DivX
3.1 Il Decoding
3.2 La iDCT
3.3 Il Resize
Quarto
Capitolo: Xmpeg 4.5
4.1
Opzioni
Globali Progetto
4.2 Opzioni Formato
in Uscita
4.2.1 Settaggi del Codec
Audio
4.2.2 Settaggi del
Codificatore DivX
4.2.2.1 Postprocessing
Settings
4.3 Calcolo della Risoluzione
Ottimale: Regola Empirica di Fixer
INTRODUZIONE
Senza
scendere in dettagli superflui ed evitando informazioni inutili all’argomento,
parleremo degli standard, dei formati e della compressione video ed, in
particolare, del Codec (Codificatore-Decodificatore) MPEG-4 DivX
(ed il suo utilizzo tramite Xmpeg 4.5).
I GLI STANDARD DEL VIDEO
1.1 Gli Standard
Televisivi
Un qualsiasi filmato è costituito da molte
fotografie (fotogrammi o frame) messe in rapida sequenza. I classici televisori (ed
anche i monitor per PC) hanno un rapporto larghezza/altezza dell’immagine (aspect
ratio) 4:3. Ogni immagine trasmessa in TV è
costituita da 30 (o 29.97 per i dispositivi a colori) frame al
secondo (fps) se lo standard usato è NTSC (America del
Nord e Giappone) o 25 fps se lo standard è PAL (Europa, Africa
Orientale, India, Australia, Cina). Ogni singolo frame è interlacciato,
ovvero costituito da due ‘mezze immagini’ (half
frame o campi) che appaiono e si combinano molto velocemente
formando l’intero fotogramma; ogni half frame è costituito da righe
alternate, uno contenente le righe dispari, l’altro quelle pari.
+
_file/image005.jpg)
Campo ‘Dispari’ ß Campo ‘Pari’
_file/image007.jpg)
I recenti schermi panoramici hanno un rapporto
larghezza/altezza 16:9 ed una più ampia superfice
visiva orizzontale (1920 punti-immagine o pixel). Nelle TV 4:3 l’altezza dell’immagine è costituita da 480 linee
visibili (NTSC) o 576 (PAL).
Schermo panoramico TV tradizionale
_file/image011.jpg)
Ratio 1,33:1
_file/image012.jpg)
Ratio 1,85:1
_file/image013.jpg)
Ratio 2,35:1
_file/image014.jpg)
L’aspect ratio 1,33:1 è
ottimizzato ovviamente per TV 4:3 (4/3=1,33). I pixel sono disposti nel frame allo stesso
modo in cui sono visti.
Viene spontaneo domandarsi perché l’aspect ratio 1,33:1 viene pedissequamente e regolarmente visualizzato su TV 4:3 che ha risoluzione 720x576 (che corrisponde ad aspect ratio 5:4). La TV 4:3 ha pixel rettangolari con un rapporto larghezza/altezza pari a 0,9375:1; teoricamente la risoluzione (con pixel quadrati) dovrebbe essere 768x576 ma in concreto i pixel orizzontali sono 786*0,9375 = 720 pixel. Ciò accade solo per le televisioni tradizionali poiché gli schermi 16:9 ed i monitor PC hanno pixel quadrati.
_file/image015.gif)
I formati 1,85:1 (Flat) e 2,35:1 (CinemaScope o anche Panavision) sono quelli più usati per i DVD Video (e in ambito cinematografico) e sono ottimizzati per gli schermi 16:9. Questi, con poche eccezioni, hanno una disposizione particolare dei pixel nel fotogramma, fatta con una tecnica detta anamorfosi. D’ora in poi, verosimilmente, consideriamo anamorfici tutti i film ottimizzati per 16:9.
L’immagine orizzontale viene schiacciata per poter occupare tutti (o quasi) i pixel del fotogramma; ciò si traduce in una eccellente qualità in fase di lettura, quando l’immagine verrà nuovamente distesa e portata alle sue normali proporzioni.
Originario aspetto di un film anamorfico
_file/image016.jpg)
Lo stesso video ‘disteso’ su uno schermo panoramico
_file/image017.jpg)
_file/image018.jpg)
Oltre ai formati citati ne esistono altri due poco utilizzati: 1,66:1 (European) e 2,40:1 (variante del CinemaScope). Inoltre gli aspect ratio sono indicativi, quasi mai rispettati con assoluta precisione (moltissimi film 1,85:1 sono in realtà 1,78:1).
2.1 Processo di
Riduzione e Compressione dei dati
-
I dati ripetuti nello stesso frame: in un fotogramma pixel vicini hanno
caratteristiche di luminosità e colore simili. Il compressore sintetizzerà,
quindi, queste informazioni eliminando la ridondanza spaziale.
-
I dati ripetuti in fotogrammi adiacenti: in frame successivi
c’è buona possibilità, tranne se non si tratta di scene differenti o
particolarmente veloci, di trovare zone d’immagine con colori e luminosità
simili (o uguali), per cui il compressore video
accorperà questi dati, eliminando la ridondanza temporale.
-
I dati di componenti del filmato non
percepibili dall’occhio umano:
i valori di colore e
luminosità dell’immagine (che viene elaborata scomponendola in piccoli blocchi quadrati di
pixel, solitamente 16x16 o 8x8) vengono convertiti nei corrispondenti valori
di frequenza video attraverso una funzione matematica, la DTC
(quella inversa è detta iDTC). Poiché non sono percepibili
generalmente le alte frequenze nelle scene animate (ad es. spostamento
rapido di fumo, fronde, piccoli oggetti,..), queste
possono essere eliminate attraverso la quantizzazione; una
maggiore quantizzazione causerà più perdita di informazioni à peggiore qualità.
Dopo queste elisioni, i dati rimasti vengono compressi con procedimenti loseless (senza
perdita di dati).
2.2 Tipologie di Frame
Più key-frame in un video ne aumenteranno la qualità (e la dimensione), più b-frame
ne ridurranno l’ingombro.
Due fotogrammi
successivi archiviati in un file video non compresso
_file/image021.gif)
Due frame successivi archiviati in un file video compresso:
nel secondo è memorizzata solo la differente posizione della nuvola, più spostata verso destra
_file/image022.gif)
Il primo codec MPEG-4 che si
ricordi è stato MS MPEG-4 Codec, adoperato da Microsoft per la
trasmissione di video attraverso la rete, non utilizzabile per l’encoding
dall’utente. Questo fu modificato illegalmente e nacque il DivX 3.xx. Negli
ultimi anni sono stati prodotti altri compressori MPEG-4, più o meno aderenti
agli standard internazionali. Adoperandoli tutti per periodi abbastanza lunghi,
ragionevolmente si può affermare che globalmente in termini di qualità i
codec MPEG-4 migliori sono DivX e XviD, che primeggiano anche per
quantità di impostazioni. Entrambi hanno un ottimo post-processing (miglioramento
dell’immagine in fase di decodifica) ma in termini di velocità DivX è
più performante di XviD (che, peraltro, altera i colori del filmato originale).
Ne discende che il codec MPEG-4 ideale è DivX.
La versione 4 (legalmente sviluppata) del codec DivX era gratuita; con l’avvento della versione 5 sono state create tre distribuzioni: la prima (Free) non permette l’uso di alcune funzioni (ad es. i b-frame), la seconda (GAIN Bundle) offre tutte le funzioni ma installa un innocuo programma-spia, la terza (Pro) è a pagamento. Le ‘sperimentali’ versioni 5.0.0 e 5.0.1 hanno condotto alla robusta e performante release 5.0.2. La versione 5.0.3 ha introdotto profili standard, qualche leggero miglioramento e tanti bug (errori); la versione 5.0.4 ha aggiunto altri bug ed un meccanismo che consente all’utente (esperto, paziente ed interessato) di manipolare accuratamente la qualità di singole parti del filmato; la release 5.0.5 corregge un importante errore della versione precedente. Per tali considerazioni è unanime l’opinione di adoperare DivX versione 5.0.2 (userò la distribuzione GAIN Bundle per usufruire di tutti i settaggi). La DivXNetworks corre verso la realizzazione del fantomatico DivX 6 che dovrebbe offrire, a parità d’ingombro, una qualità doppia rispetto alle release attuali.
III DA DVD A DivX
Il Codec DivX si utilizza in tutti i casi in cui si vuole
stipare filmati di buona qualità in poco spazio, per archiviarli sui
diffusissimi CD o scambiarli attraverso Internet. Il processo di trasformazione
di un DVD Video in DivX richiede la conoscenza delle nozioni tecniche fin qui
spiegate. Il flusso video MPEG-2 viene convertito in
DivX tramite delle operazioni contigue così sintetizzabili:
_file/image023.gif)
Come è evidente, la
qualità del DivX dipenderà esclusivamente dal video originale, dalla qualità
degli strumenti atti a trasformarlo (decodificatore MPEG-2, iDCT, filtro di
ridimensionamento) e dai settaggi del codificatore. L’unico vincolo
che ci poniamo riguarda il metodo di rappresentazione del colore: utilizzeremo
la modalità YV12, che accelera la codifica e
non compromette la qualità.
L’occhio umano
non percepisce le variazioni di colore così come avverte quelle di luminosità per cui, invece di adoperare 24 bit per ogni pixel (formato RGB),
si può ‘approssimare’ l’informazione del colore utilizzando solo 12 bit per
pixel (formato YV12) senza intaccare la qualità video.
Considereremo quindi, tra i programmi più raffinati e
funzionanti, quelli che adoperano tale modalità. Tra
questi purtroppo scartiamo a priori Vidomi 0.4 che, in modalità YV12, non consente di impostare il filtro di
ridimensionamento (il resize e l’impostazione dei settaggi del Codec
DivX sono i passaggi più importanti).
3.1 Il Decoding
I tool che decodificano il flusso
video MPEG-2 (previa separazione da quello audio, demux) sono, come le
restanti funzioni che analizzeremo (iDCT, resize), per lo più compresi in
programmi più complessi che si occupano di più (a volte tutte) le fasi del
processo di codifica.
I Decoder MPEG-2 con più alta qualità sono:
1) Quello usato da XMPEG 4.5 (ottimizzazione del
mitico FlaskMPEG 0.6)
2) Quello usato da MPEG2AVI 0.1.6
by Iker Rodriguez (incluso in tanti all-in-one)
3) MPEG2Dec3 (per Avisynth)
|
Decoder MPEG-2 |
Qualità |
Velocità |
Note |
|
XMPEG 4.5 |
Eccellente |
Eccellente |
|
|
MPEG2AVI 0.1.6 |
Ottima |
Eccellente |
|
|
MPEG2Dec3 |
Buona |
Buona |
plugin per AviSynth |
Ragionevolmente nel prosieguo
della nostra analisi consideriamo solo XMPEG (con performance considerate
senza la visualizzazione del filmato in codifica) e MPEG2AVI.
3.2 La iDCT
Le iDCT usate dai due programmi sono:
XMPEG 4.5
|
IDCT |
Qualità |
Velocità |
|
Optimized
MMX |
Eccellente |
Eccellente |
|
MMX |
Eccellente |
Ottima |
|
Miha’s Fast |
Eccellente |
Ottima |
|
Miha’s Reference |
Eccellente |
Discreta |
|
Reference
|
Eccellente |
Mediocre |
|
Fast Integer |
Ottima |
Buona |
|
DVD2AVI
SSE/MMX |
Buona |
Eccellente |
|
AMD |
non testato |
non testato |
E’ semplice capire che con XMPEG va usato Optimized MMX iDCT; come seconda scelta abbiamo due iDCT lievemente
più lenti: MMX e Miha’s Fast.
MPEG2AVI 0.1.6 by Iker Rodriguez
|
IDCT |
Qualità |
Velocità |
|
32-bit
MMX |
Eccellente |
Ottima |
|
Miha’s Fast |
Eccellente |
Ottima |
|
SSE AP-922float |
Eccellente |
Buona |
|
64-bit
FPU |
Eccellente |
Discreta |
|
64-bit
D-FPU |
Eccellente |
Mediocre |
|
16-bit
Chen |
Ottima |
Eccellente |
|
16-bit
AAN |
non funzionante |
non funzionante |
|
AMD AP-922float |
non testato |
non testato |
Con MPEG2AVI vanno usati 32-bit MMX o Miha’s Fast
come iDCT.
3.3 Il Resize
Il
resize è quella operazione che permette di
rimpicciolire (ridurre la risoluzione) una immagine o ingrandirla (aumentare la
risoluzione); per ricrearla si riempie un’immagine vuota di dimensioni
opportune con dei pixel ricavati per interpolazione (calcolo di un punto
conoscendo le caratteristiche di quelli adiacenti) dall’immagine iniziale. Tale
ricampionamento si avvale di funzioni matematiche; nel nostro caso (escludendo
a priori nearest neighbour per la pessima precisione offerta) di interpolazione bilineare e bicubica.
Con
un numero di punti noti noi possiamo costruire una curva interpolante passante
per questi (interpolazione per punti) o una curva che si scosti poco da
questi, in modo da non perdere le informazioni in essi
contenute (interpolazione tra punti, smoothing). L’interpolazione
per punti usa funzioni lineari e funziona bene quando conosciamo
o consideriamo un numero basso di punti (fino a 9); col crescere del numero dei
punti risulta molto più efficiente usare le elaborate funzioni
polinomiali a tratti, tra cui spiccano le importanti cubiche.
Quando i punti sono in numero elevato non è
ragionevole forzare la funzione a passare esattamente per questi, ma è molto
più conveniente effettuare uno smoothing, cioè una ‘levigatura’, al fine
di minimizzare l'errore contenuto nei dati. E’ intuitivo che gli algoritmi (insiemi di regole
o direttive atte a fornire una risposta specifica ad uno o più dati in input) cubici compiono più calcoli
dei lineari, quindi sono più lenti. Quando l’immagine
deve essere ingradita, poiché devono essere inseriti punti completamente nuovi,
l’interpolazione bicubica (che usa 16 punti) è insostituibile. Viceversa, se
l’immagine deve essere ridotta moderatamente è
sufficiente la perequazione dei 4 pixel usati dal resize bilineare, mentre la
mediazione del resize bicubico risulta impropria, eccessiva ed altera le
caratteristiche del punto interpolato. Il resize bicubico torna ad
essere più qualitativo quando i rimpicciolimenti hanno fattore di scala
inferiore al 50% poiché s’adatta meglio quando il fine è stipare più dettagli possibili in poco spazio visuale.
Cito
– dalla guida di Paint Shop Pro (Jasc)
– “Ricampionamento bicubico… Utilizzare questo metodo quando si aumentano le
dimensioni di un’immagine.”. Inoltre: “Ricampionamento bilineare… Utilizzare
questo metodo quando si riducono immagini …”. La teoria è suffragata
dall’esperienza. Come si può notare qui in basso, l’immagine rimpicciolita
moderatamente con il ricampionamento bilineare ha qualità superiore rispetto
alla stessa riduzione fatta con il ricampionamento bicubico; lo stesso si verifica usando Adobe PhotoShop, con differenze
però inferiori. Viceversa, la riduzione forte di un frame esalta la qualità del
resize bicubico.
Riduzione moderata con resize
bilineare
Riduzione moderata con resize bicubico
Frame ridotto al 40%
con resize bilineare
Frame ridotto al 40% con resize bicubico
_file/image027.jpg)
Vediamo come funziona il metodo bilineare:
dato un triangolo con vertici P0, P1, P2, calcoliamo il valore Pa per interpolazione lineare
tra i valori P0 e P1, ed il valore Pb per interpolazione lineare tra i valori P1 e P2. Calcoliamo quindi il
valore Ps per interpolazione lineare
tra i valori Pa e
Pb.
Per
la riduzione moderata dell’immagine è più efficiente un particolare metodo
incrementale semplificato (che usa solo aritmetica intera): l’algoritmo
di Bresenham (o Bressenham). Partendo dal punto iniziale di una linea (uno
dei due estremi) si incrementa ad ogni passo lo
spostamento lungo la stessa fino al raggiungimento del punto
finale. Dopo
avere disegnato un pixel, l’algoritmo sceglie tra i suoi 8 vicini quale
‘accendere’ in base all’equazione della retta. La semplicità computazionale e l’uso della
sola aritmetica intera garantiscono ottime prestazioni in termini di velocità
ed è stata ampiamente dimostrata la sua precisione, soprattutto per la
definizione di segmenti ed anche circonferenze.
E’ qui schematizzato il funzionamento di un generico algoritmo incrementale
_file/image029.gif)
Per
un calcolo (grossolano) del fattore di scala:
_file/image031.gif)
Xmpeg
adopera veloci resize bilineari e lenti resize bicubici smoothed
(levigati). Sono abbozzate le didascalie riguardanti la
qualità di ogni singolo resize poiché, come visto, la ‘very good quality’ degli
algoritmi bicubici esiste solo per fattori di scala inferiori al 50%, la ‘very
good quality’ del filtro Bressenham è reale solo per riduzioni fino al 50%.