Questa pagina è stata
pubblicata da Andrea Panisson
su http://digilander.libero.it/andypanix. Ultimo
aggiornamento: 13/07/2003. (Rimuovi "_NOSPM" dall'indirizzo email per
contattarmi)
N.B. guida basata
sulla versione del codec Koepi's Xvid del 24/06/03 (nel caso abbiate problemi a reperire sul
sito dell'autore la versione indicata qui sopra, ne ho messo a
disposizione una copia in locale a
questo indirizzo) | Per stampare correttamente
questa guida vi consiglio l'utilizzo dell'ultima versione di MozillaP.S. dato che fino a
prova contraria sono anch'io un'essere umano, come tale non sono immune
agli errori, quindi se dovessi aver commesso qualche imprecisione o
scritto qualche "castroneria", vi sarei immensamente grato per tutte le
eventuali segnalazioni nonchè per tutti i suggerimenti, che in bene od in
male saranno comunque bene accetti ;-)
INDICE
PARTE I - un po' di
teoria
PARTE II -
Alcune cose di cui tener conto
PARTE III - La
configurazione del codec Xvid
Encoding Options
Decoder Options Load Defaults
Modalità "1 Pass..." e "2
Pass - 1st pass": impostazioni per la codifica ad 1 solo passaggio ed
impostazioni dei settaggi per il primo passaggio nella codifica a due
passaggi
- Scheda
"Global": Motion search precision, Quantization type, FourCC
used, VHQ Mode, Maximum e Minimum I-frame interval, Enable lumi masking,
Enable grayscale, Enable interlacing, Use croma motion, Quarterpel,
Global Motion Compensation (GMC), Maximum B-frames, B-frame quantizer
ratio (%), B-frame quantizer offset, B-frame threshold, Packed bittream,
DX50 B-VOP compatibility, Print debug info on each frame.
- Scheda
"Quantization": Min / Max I-frame quantizer, Min / Max
P-frame quantizer, Min / Max B-frame quantizer, Edit Quantizer
Matrix
- Scheda
"Two Pass": Discard first pass, Hinted ME, 1st pass
stats.
- Scheda
"Alt. (Alternative) Curve": Max bitrate (Kilobit/s), Max
overflow improvement % - Max overflow degradation %
- Scheda
"Credits": Credits at start of movie, Credits at end of
movie, Encode credits in greyscale, Credits rate reduction (Desired %
rate, I-frame quantizer / P-frame quantizer, Starting size / Ending size
(kBytes)).
- Scheda
"Debug": Performance optimizations, Chroma Optimizer, Use
trellis R-D quantisation, Frame drop ratio, Reaction Delay Factor,
Average period, Smoother
Modalità "2 Pass - 2nd
pass...": impostazioni del codec per il secondo passaggio
- Scheda
"Global": Quantization type.
- Scheda
"Quantization": Min / Max I-frame quantizer, Min / Max
P-frame quantizer
- Scheda
"Two Pass": Two pass tuning, I-frame boost %, Discard first
pass, Dummy 2nd pass, Below i-frame distance..., I-frame bitrate
reduction %, Curve compression, High / Low bitrate scenes %, Bitrate
payback delay (frames), Payback with bias, Payback
proportionally.
- Scheda
"Alt. (Alternative) Curve": Use Alternative curve system,
Curve agression, High distance from average %, Low distance from average
%, Enable automatic minimum relative quality, Strenght %, Minimum
relative quality %, Enable automatic bonus bias calculation, Manually
set bonus bias, Max bitrate (Kilobit/s), Max overflow improvement %, Max
overflow degradation %.
Appendice
A - I
difetti dovuti ad una cattiva compressione video Appendice
B - Undersize
(video sottodimensionato) ed altri problemi sulle dimensioni del
video Appendice
C - PNSR Appendice
D - Rate-Distortion Appendice
E - Schema
dei parametri di conversione consigliati
Introduzione
Questo articolo si prefigge un obbiettivo piuttosto impegnativo:
spiegare nel modo più semplice possibile la funzione e l'utilizzo dei
diversi parametri presenti nelle finestre di configurazione del codec Xvid
(www.xvid.org). Che cos'è il codec Xvid? L'Xvid è al pari del Divx un
codec di compressione Mpeg4, ovvero, un software che vi consente di
comprimere un video in formato mpeg4 e allo stesso tempo di visualizzare i
video così compressi. Per quel che riguarda la visualizzazione di un video
compresso con il codec Xvid, (ma anche con il più noto DivX), vi consiglio
di far riferimento alla guida al postprocessing.
E' necessario
premettere, per tutti coloro che sono alle prime armi, che per comprimere
un qualuque video in formato Mpeg4, non è sufficiente scaricare ed
installare il codec Xvid, ma è necessario anche un altro programma che
faccia da "tramite" (interfaccia) tra il video stesso da comprimere
ed il codec installato. Per un esempio partico, ad esempio per la
conversione da DVD, si veda la guida a Vidomi, oppure più in generale, la guida a Virtualdub. Sottolineo nuovamente quindi che
questa guida non spiega come effettivamente convertire un video in mpeg4
utilizzando il codec Xvid, ma ne illustra esclusivamente i vari parametri
di configurazione disponibili e tenta di spiegare come utilizzarli.
Ripeto, se si desidera un'esempio pratico per l'utilizzo dell'Xvid, è
necessario fare riferimento alle guide sopracitate.
Ma torniamo
all'Xvid. Prima ho citato il Divx e non a caso, dato che l'Xvid nasce in
pratica come alternativa OpenSource del Divx (opensource, ovvero con il
codice sorgente liberamente scaricabile e modificabile). In sintesi,
l'Xvid (che se non l'avevate già notato è divX scritto al contrario) è
un'ottima alternativa completamente gratuita al codec Divx nella versione
Pro, paragonabile a questo in termini di qualità ottenibile (ma qualcuno
sostiene che la qualità sia anche superiore) ed in termini di velocità
(ovviamente a parità di funzioni utilizzate). Perchè usare l'Xvid al posto
del più noto e diffuso DivX?
La risposta è che l'Xvid è
gratuito, il DivX Pro no, a meno
di utilizzare la versione con banner pubblicitario (cosa che può
infastidire non poco), mentre la versione basic del DivX non offre le stesse
funzionalità della versione Pro e le sue prestazioni sono inferiori a
quelle dell'Xvid. Il numero di funzioni supportate dall'Xvid sono
superiori rispetto a quelle del DivX Pro; trovate una tabella aggiornata
con il confronto delle caratteristiche supportate dai più diffusi codec
Mpeg4 al seguente indirizzo: http://www.mplayerhq.hu/~michael/codec-features.html;
una rapida occhiata in "Mpeg4 Encoder features" basta per rendersi conto
delle differenze tra i vari encoder, in particolare tra il DivX e l'Xvid.
Ora, un numero superiore di funzioni supportate non necessariamente
significa una qualità superiore nel risultato, tuttavia vi è comunque una
buona probabilità che alcune funzioni possano fare la differenza...
Infine, ma questa forse è più una scelta di ragione "filosofica", l'Xvid è
un progetto opensource rilasciato con licenza GPL (quindi con tutte le
conseguenze pratiche che questo comporta), il DivX no.
Dove scaricare il codec
Xvid
In rete potete reperire diverse versioni del codec,
tuttavia, per evitare brutte sorprese vi consiglio di andare quasi sul
sicuro e di utilizzare la versione del codec che consiglio in questa guida
(vedi
qui); quel "quasi" è necessario in quanto la versione consigliata è
una versione non ufficiale. Credo che sia necessaria qualche spiegazione.
Esiste una sola versione ufficiale e stabile, priva di difetti od errori
(bugs), basata sui codici sorgente rilasciati da xvid.org e che potete
trovare sul sito di Koepi al seguente indirizzo, http://roeder.goe.net/~koepi/xvid.shtml marchiata come
"stable release". Esistono poi
diverse altre versioni, cosidette "unstable" o "alpha" o "beta" (o quello che volete ma non
"stable"), che contengono delle opzioni avanzate di configurazione e delle
funzioni che non sono state inserite nella versione stabile, in quanto
ritenute "a rischio", ovvero non prive di difetti o possibili bug. Il
perchè usare una di queste versioni è presto detto: alcune opzioni
avanzate (esempio i B-Frames) consentono di ottenere un livello di
compressione con una qualità non raggiungibile con la versione ufficiale.
Il vantaggio è la possibilità di risparmiare qualche CD o qualche
centinaia di MB, il rischio è quello che il nostro video presenti alcuni
difetti in fase di visualizzazione, cosa che non dovrebbe (e qui il
condizionale è d'obbligo) verificarsi seguendo le indicazioni di questo
articolo, o peggio ancora che il video sia non utilizzabile con una
versione successiva del codec (cosa che semplicemente potete risolvere
inserendo la versione con cui il video è stato compresso all'interno del
CD in cui avrete salvato il video). Ecco dove scaricare le versioni "non
ufficiali": versione di Koepi, http://roeder.goe.net/~koepi/, versione di Nic http://nic.dnsalias.com/
ed infine la versione di Umaniac http://umaniac.leffe.dnsalias.com/ (sono tutte versioni
tra loro leggermente differenti, in quanto contengono delle piccole
modifiche al codice sorgente che i loro autori hanno preferito includere
od escludere al momento della compilazione). I codici sorgenti
ufficiali da compilare li trovate, invece, sulla homepage del progetto: http://www.xvid.org/;
Questa
guida.
Come è strutturata questa guida? Per una buona
comprensione del funzionamente dei singoli parametri, ho ritenuto
indispensabile fornire anche una breve introduzione alla compressione
video (in particolare alla compressione MPEG) in cui mi sono occupato
nella PARTE
I di questo articolo. Comunque, chi fosse semplicemente interessato
alla configurazione dei parametri del codec, può tranquillamente saltare
alla PARTE
II o fare riferimento direttamente alle tabelle
riassuntive.
Ringraziamenti
Vorrei
ringraziare tutti coloro che hanno reso possibile la stesura di questa
guida, mettendo a disposizione di tutti la loro conoscenza e la loro
esperienza. Un ringraziamento particolare a due guru del codec Xvid, Koepi
(http://roeder.goe.net/~koepi/) e Nic (http://nic.dnsalias.com/), senza i quali questo mio
lavoro non avrebbe ragione d'esistere. Un doveroso ringraziamento anche a
doom9 ed al suo eccezionale sforzo e contributo nel diffondere il piacere
per il video digitale. Vorrei poi ringraziare tutti coloro che con i loro
post sul forum di doom9 (http://forum.doom9.org/) hanno fornito informazioni ed
indicazioni utili (se non indispensabili) alla creazione di questo
articolo; un ringraziamento speciale a "Iago", ed alla sua guida, che mi
ha fornito la prima idea su come scrivere queste pagine, nonchè un
doveroso grazie alla pazienza mostrata da Nic e da Koepi. Un
ringraziamento particolare inoltre allo straordinario lavoro svolto da
Benny nel suo sito, senza
il quale non sarei mai stato in grado di capire molte delle funzioni del
codec mpeg4 Xvid. Per una lista completa dei siti in cui ho cercato le
informazioni per scrivere questo articolo, vi rimando comunque alle "Fonti".
Scrivere questa guida
ha richiesto uno sforzo non indifferente da parte mia; per alcuni
parametri ho effettivamente faticato non poco per reperire anche una
seppur minima documentazione, quindi potrebbero non essere spiegati
sufficientemente bene e/o le spiegazioni potrebbero contenere qualche
errore. Nel caso vi siano imperfezioni, omissioni, errori, sviste,
clamorose gaffes etc etc etc, segnalatemele senza indugi. A farla breve,
ogni suggerimento o consiglio è ben accetto.
Questa guida è basata
su di una particolare versione del codec Xvid (vedi
qui quale). Nel caso non riusciate più a reperirla in rete,
potete scaricarla a questo indirizzo. Potrebbero essere disponibili
anche versioni successive, tuttavia la versione che viene usata in
questo articolo dovrebbe essere sufficientemente stabile da
garantire un risultato di buona qualità. Prestate attenzione inoltre
che alcune versioni del codec potrebbero contenere degli errori
(bug) che possono portare ad un pessimo risultato finale oppure
avere problemi di funzionamento con il decoder video ("Broken B-Frame...", "...Bframe decoder Lag" etc...).
In proposito, mi preme sottolineare
nuovamente che le versioni che trovate nei siti di Nic e di Koepi
sono generalmente versioni BETA se non indicato diversamente (tipo
"Stable release" etc...) e quindi non è detto siano prive di errori.
Sono disponibili in linea solo per essere testate e non lamentatevi
troppo se non funzionano, al più provate a segnalare il problema nel
forum di Doom9
(magari avete scoperto un bug...) |
NOTA BENE:
PostProcessing - fate riferimento
alla "Guida introduttiva al
postprocessing" per maggiori
informazioni sul postprocessing ovvero sulla decodifica e
sull'applicazione di eventuali filtri per migliorare la qualità dei video
compressi con il codec Xvid e per la risoluzione di
eventuali problemi in fase di decodifica (ovvero durante la visione di un
film).
PARTE
I - un po' di teoria
Prima di addentrarmi nella configurazione del
codec, onde evitare di appesantire e rendere troppo dispersiva la parte
della guida che ne descrive in dettaglio le impostazione, tenterò di
fornire tutte le nozioni teoriche di base che dovrebbero consentirvi di
comprendere al meglio il suo funzionamento.
Un'introduzione alla
compressione video
Ora addentriamoci un pò di più nei meandri
della compressione video; in particolare tenterò di spiegare a grandi
linee (tanto per avere un'idea) e nel modo più semplice possibile, come
funziona l'encoder video, cosa che se non è proprio indispensabile per
fare dei buoni mpeg4, potrebbe comunque essere molto utile. Vediamo
anzitutto di dare una definizione: un un CoDec video (Co-Dec = parola composta di Coder e
Decoder) è un programma (software) composto di un due parti: un
enCoder il cui scopo è comprimere
una sequenza di immagini (video) per archiviarla in un file ed un Decoder necessario per decomprimere la
sequenza e poterla nuovamente visualizzare. A grandi linee ecco come
funziona il procedimento:
 Video
originale (non compresso) |
EnCOder
 Codifica,
compressione del video |
File
compresso sul disco fisso (il nostro file .avi, .mpeg ecc. ecc,
per intenderci) |
DECoder
 Decodifica,
decompressione del video, vengono effettuati alcuni procedimenti
inversi rispetto alla fase di codifice, onde "ricostruire" il
video. |

|
 |
 Video
decompresso che "scorre" sul monitor o sulla TV
| In questo articolo mi occuperò solo della
procedura di compressione del video, ovvero del lavoro effettuato
dall'encoder; la procedura di decodifica da parte del decoder viene
brevemente accennata nell'articolo sul postprocessing.
Le tecniche di compressione video
(ma questo vale per gli algoritmi di compressione in generale) possono
essere suddivise in due grandi categorie: le tecniche cosidette"loseless", nei quali la compressione è un
processo perfettamente reversibile che avviene senza perdita di
informazione e dove video originale e video decompresso sono identici in
tutti i dettagli, e le tecniche
"lossy" o
tecniche di compressione non reversibile, nelle quali video compresso e
decompresso non sono più identici in quanto al momento della compressione
sono state volutamente eliminate alcune informazioni ritenute
"sacrificabili". Le tecniche "lossy" sono le più diffuse per la
compressione del multimediale, ed infatti appartengono a questa categoria
le codifiche MPEG (1, 2 e 4), il Divx, l'Xvid, l'mp3, il Vorbis ecc...;
invece generalmente le tecniche di compressione loseless sono poco
efficaci nel caso del multimediale e vengono infatti ampiamente utilizzate
nella compressione dei documenti (zip, rar, etc...); un esempio di codec
video di loseless è l'ottimo Huffyuv (gratuito).
Prima di procedere
analizzando in dettaglio cosa avviene durante la compressione video,
ovvero cosa fa effettivamente un encoder video, definiamo anzitutto il
concetto di frequenze video. Come
nell'audio, anche nel video si può parlare di alte e basse frequenze
(video): “…nel video le basse
frequenze corrispondono ai colori uniformi (un cielo sereno senza nubi, il
colore di una automobile) mentre le alte frequenze corrispondono alle
immagini frastagliate tipo le foglie di un albero visto da lontano, i
quadrettini minuti di una giacca, o i caratteri minuti della pagina di un
giornale...” (5). Detto questo,
proseguiamo.
Un video è costituito da una serie di immagini che si
susseguono in rapida sequenza. Quindi quando si comprime un flusso video
si stanno sostanzialmente comprimendo delle immagini. E' possibile farsi
un'idea su come viene trattato un flusso video, osservando la figura
seguente (non preoccupatevi se compaiono termini di cui ignorate il
significato, in quanto verranno illustrati in seguito):
 Si
tratta sostanzialmente di individuare delle caratteristiche nelle immagini
e nel video che possano essere sfruttate ai fini della compressione.
Come è possibile
comprimere un video?
Tecniche relative al
modo di memorizzazione E' possibile comprimere un video
riducendo la precisione con cui vengono memorizzate le informazioni:
un esempio tipico di questo tipo di compressione, nel caso di un
flusso video digitale, è il passaggio dallo spazio di colore RGB a
tutta una serie di spazi di colore denominati YUV; si ha una
realeperdita di informazione, che risulta tuttavia difficilmente
notabile per l'inferiore sensibilità al colore dell'occhio
umano.
Tecniche che sfruttano
alcune caratteristiche intrinseche del video stesso, in combinazione
con le caratteristiche del sistema visivo umano. E'
possibile comprimere un segnale video:
- Rimuovendo
la rindondanza (ripetitività) statistica contenuta in un
video e mantenendo solo le nuove informazioni, ovvero
quelle effettivamente utili; si cerca una rappresentazione "meno
correlata" delle immagini, eliminando le "ripetizioni":
- si può dimostrare che pixels adiacenti, vicini, all'interno
di una stessa immagine, presentano caratteristiche molto simili
per quel che riguarda il colore e la luminosità (cosa del resto
piuttosto intuitiva: se considero una porzione azzurra di cielo,
con buona probabilità pixel vicini avranno lo stesso colore);
la codifica
intra-frames si occupa di rimuovere questa ripetitività o
rindondanza
spaziale all'interno dello stesso fotogramma;
- esiste inoltre una netta correlazione non solo tra i pixel
dello stesso fotogramma, ma anche tra i pixels di fotogrammi
adiacenti: un fotogramma ed i due vicini (il successivo ed il
precedente) spesso risultano pressochè identici (fanno eccezione
le situazioni in cui si hanno cambi di scena); questa
correlazione, rindondanza
temporale tra fotogrammi vicini che ne sfrutta le loro
minime differenze, viene trattata dalla codifica
inter-frames.
- Sfruttando
alcune peculiarità del sistema visivo umano: la scarsa
sensibilità dell'occhio alle alte frequenze video
soprattutto se si tratta di immagini in movimento. E'
possibile "tagliare", buttar via, alcune delle informazioni sulle
alte frequenze di un'immagine senza per questo portare ad un
visibile deterioramento dell'immagine stessa. Per come è
strutturato, il sistema visivo umano non è in grado di percepire
le variazioni nei dettagli di figure molto frastagliate; è molto
difficile rendersi conto di una perdita di dettaglio nelle fronde
di alcuni alberi in movimento; molto più semplice invece notare
anche la più piccola variazione di colore o luminosità
nell'azzurro di un cielo limpido e sereno sullo sfondo di un video
(DCT e
quantizzazione).
| Scendiamo un pò di più nel
dettaglio, ed analizziamo i singoli passaggi. La prima fase è una
conversione dello spazio di colore, e già qui si ha la prima perdita
totale di informazioni, in quanto si passa da 24 bit per pixel (bpp) del
formato RGB ai soli 12 bpp del formato YV12; si ha in pratica un
dimezzamento delle dimensioni del video, con perdita irreversibile di
informazioni ma degrado qualitativo praticamente nullo (non percettibile),
data la ridotta sensibilità alle variazioni di colore del sistema visivo
umano.
|
1) Conversione dello spazio
di colore: da RGB a YUV 4:1:1
|
Y=0,299 R +
0,587 G + 0,114 B Cb = (B – Y) / 2,03 Cr = (R – Y) / 1,60 |
|
 (R, G, B) (24 bit /
pixel) =
 (Rosso,
Red) (8 bit /
pixel) +
 (Verde,
Green) (8 bit /
pixel) +
 (Blu) (8 bit / pixel)
|
RGB: le informazioni di ogni pixel
sono date da una coordinata spaziale del tipo (numero, numero, numero) = (Red, Green, Blu) dove "numero" è un valore da 0 a 255
valore che è rappresentabile in binario (il linguaggio del computer
formato da 0 ed 1) con 8 bit (il più grande numero decimale
rappresentabile con n bit si ottinene con la formula:
2n-1, ovvero 28-1 = 256-1 = 255). Questo
significa che in formato colore RGB servono 24 bit per ogni pixel
ovvero 3 bytes (1 byte = 8 bit). Per la cronaca nero = (0,0,0),
bianco = (255,255,255); tutte le tonalità di grigio sono
rappresentate da valori del tipo (x,x,x), ovvero terne dello stesso
numero. |

|
 YUV 4:1:1 YV12 (12 bit /
pixel) =
 Luma (Y) (8 bit / pixel) +
 Chroma
Blu (Cb) (2 bit /
pixel) +
 Chroma
Red (Cr) (2 bit /
pixel)
|
YV12: per “risparmiare” bit, per il
video si utilizza il formato colore YUV 4:1:1 noto anche come YV12.
Si risparmia in quanto bastano soli 12 bit per ogni pixel. Come? Per
ogni singolo pixel si mantengono tutte le informazioni per la
luminosità (il bianco ed il nero in un certo senso), mentre si
approssima come uguale il colore di un cubetto di quattro pixel
(2x2). E’ come se si usasse una risoluzione dimezzata per il colore
(invece di memorizzare i dati di ciascun pixel, si memorizzano solo
quelli di 4 pixels adiacenti, supponendo siano tutti dello stesso
colore, usando il valore medio del colore). La qualità complessiva
non ne risulta compromessa (basti pensare ai video DVD), in quanto
l’occhio non è così sensibile alle variazioni di colore quanto lo è
alle variazioni di luminosità, soprattutto in immagini in movimento.
I formati YUV vengono detti "luminance / chrominance colour image
format", per distinguerli da quelli basati sulle componenti
di colore quali l'RGB.
|
|

|
2)Blocking: l’immagine viene
suddivisa in macroblocchi di 16x16 pixels |
|
  
|
|
L'immagine
originale viene suddivisa in macroblocchi di 16x16 pixels; di qui la
necessità che il video da comprimere sia un multiplo di 16 nelle
dimensioni verticali ed orizzontali (altezza e larghezza).
(Il codec Xvid consente di
comprimere flussi video con risoluzioni anche multiple di 8 , di 4 e
probabilmente di 2, tuttavia in queste situazioni la suddivisione in
macroblocchi non è ottimizzata, e potrebbero richiedere un bitrate
più elevato od addirittura presentare degli artefatti video durante
la decompressione, a causa di una motion estimation effettuata su
macroblocchi non standard)
Nello spazio di
colore YV12 all’interno di ciascun macroblocco 16x16, si possono
distinguere 4 blocchi di 8x8 pixels per quel che riguarda la
luminosità (luma) ed 1 solo blocco di 8x8 valori (ogni valore
rappresenta 4 pixel) per ogni componente del colore Chroma-Blu e
Chroma-Red (dato che la risoluzione per il colore viene dimezzata),
per un totale 6 blocchi di 8x8 pixels.
|

Ingrandimento di uno dei
macroblocchi 16x16 in cui è stata suddivisa l'immagine e simulazione
(nel senso che le componenti Cb e Cr non corrispondono alla realtà)
della decomposizione del macroblocco selezionato nelle componenti
dello spazio di colore YV12 |
|
|
Y,
Luminanza: risoluzione invariata, 16x16 pixels,
ovvero 4 blocchi di 8x8 |
 |
 |
Cr, Crominanza
Rosso: risoluzione dimezzata, il macroblocco 16x16
è approssimato con un blocco di 8x8 pixel |
 |
|
Cb, Crominanza
Blu: risoluzione dimezzata, il macroblocco 16x16 è
approssimato con un blocco di 8x8 pixel |
 |
| L'encoder a questo punto decide quali
fotogrammi devono essere trattati come I-Frames e quali invece saranno
trattati come P o B-frames. Sugli I-Frames viene direttamente applicata la
DCT (vengono compressi come vere e proprie immagini in formato JPEG),
mentre sugli altri fotogrammi vengono effettuate delle procedure di
"modellizzazione del moto".
|
Intra-Frames (I-Frames)
 |
|
Delta-Frames o Inter-Frames (P
e B-Frames)
 |
|
Sugli I-frames non viene effettuata nessuna
modellizzazione del moto

|
3)
Modellizzazione del moto:
Motion Estimation e Motion Compensation, Inter-Frames
Prediction
|
La
procedura è piuttosto complessa ed è difficile sintetizzare il tutto
in poche righe. Tenterò di illustrarvi solo i concetti di base in
modo tale che vi facciate per lo meno un'idea generale. Ripeto: le
cose in realtà non sono così semplici. In questa fase viene
sfruttata la rindondanza temporale dei fotogrammi del video, ovvero
il fatto che fotogrammi adiacenti (successivi) risultano tra loro
molto simili. Per citare l'esperto ;) "se un pixel in un certo frame ha un certo
colore, lo stesso pixel o quelli vicini, nei fotogrammi successivi o
precedenti con buona probabilità avranno un colore
simile"(5).
In pratica ora vengono costruiti i
P-frames ed i B-frames. Come? Con due
procedure:
1) Motion Estimation
(ME): per ciascun macroblocco 16x16 o blocco 8x8 (a seconda
della precisione sulla ricerca del moto, la ricerca viene effettuata
sui macroblocchi 16x16 o sui blocchi 8x8; di seguito utilizzerò
sempre il termine blocco, restando sottinteso che potrebbe anche
trattarsi di un macroblocco) viene effettuata una stima del
movimento; in pratica l'encoder tenta di individuare tra i
fotogrammi adiacenti (nel solo fotogramma precedente per i P-Frames,
nel precedente e nel successivo per i B-Frames) il blocco più simile
(se non uguale). Dopodichè viene associato al blocco su cui è stata
effettuata l'analisi, un vettore di moto, cioè una coppia di numeri
tipo (x,y) = (-1,4) che individuano sul piano ipotetico
rappresentato dal fotogramma, il vettore di spostamento,
sostanzialmente una freccia che mi indica direzione, verso e entità
dello spostamento del blocco passando dal fotogramma 1 al fotogramma
2. Tale vettore deve essere necessariamente associato ad ogni blocco
su cui viene effettuata la ME, e viene utilizzato in fase di
decodifica per ricostruire l'immagine originale. Si noti inoltre che
la ricerca per il blocco di riferimento viene generalmente
effettuata in un intorno limitato del blocco di partenza (area in
grigio nella figura in basso) in quanto se la ricerca fosse
effettuata su tutto il fotogramma, i tempi per la codifica
potrebbero allungarsi in modo non accettabile; l'efficenza del
metodo è assicurata dal principio della rindondanza spaziale: la
probabilità di trovare un blocco simile man mano che ci si allontana
dal blocco di partenza, diminuisce in modo esponenziale con
l'aumentare della distanza.
2)
Motion Compensation (MC): viene creato il blocco differenza,
in pratica viene sostituito il blocco originale su cui è stata
effettuata la ricerca, con il risultato che si ottiene sottraendo
dal blocco molto simile trovato del fotogramma 1 (reference frame) il blocco in
questione nel fotogramma 2. Se tutto ha funzionato a dovere, ovvero
l'encoder non ha commesso errori nella ricerca del blocco di
riferimento (nel fotogramma 1), si ottiene un netto vantaggio
consistente nel fatto che il nuovo blocco "differenza" sarà
costituito da un numero decisamente inferiore di dati (nella matrice
del blocco saranno presenti molti zeri (colore nero)). Le uniche
informazioni aggiuntive da considerare saranno quelle relative al
vettore di moto (una coppia di numeri).
|
|

|
4)DCT, Discrete Cosine
Transform |
|
| Torniamo ai macroblocchi di 16x16 pixels, che, per la
conversione nel formato colore YUV 4:1:1 (YV12), corrispondono a 6
blocchi di 8x8 pixel, numeri o coefficienti che dir si voglia (4 per
la luminosità e 2 per il colore). Ognuno di questi blocchi 8x8 può
essere descritto da una matrice di 8x8 valori numerici, ovvero un
quadrato di 8x8 = 64 numeri da 0 a 255, che, a seconda del blocco in
questione, descrivono luminosità (Y) di ciascun pixel o colore (Cb e
Cr) di ciascun gruppo di 4 (2x2) pixels. Generalmente queste singole
matrici risultano composte tutte da valori non nulli (a meno che non
si tratti di immagini totalmente nere). Una funzione matematica, la DCT (Discrete
Cosine Transform), viene applicata alle singole matrici 8x8;
questa funzione trasforma le matrici
dei valori Y, Cr e Cb, nelle matrici 8x8 contenenti i valori delle
frequenze video. Ovvero si ottengono nuovi quadrati 8x8
sempre di 64 numeri o coefficienti che dir si voglia, con la
differenza che ora i singoli coefficienti non rappresentano più, ad
esempio, la luminosità dei 64 pixels del nostro blocchetto, ma la
distribuzione delle frequenze video sempre dello stesso blocchetto.
Ogni coefficiente rappresenta una determinata frequenza video: le
basse frequenze (colori uniformi) sono rappresentate dai
coefficienti in alto a sx della matrice, le alte frequenze (colori
frastagliati) nell'angolo in basso a dx. Generalmente, ad una
risoluzione di 8x8 pixel, si ha una certa uniformità nella
distribuzione del colore, ovvero pixel adiacenti risultano piuttosto
simili se non uguali (la cosa è piuttosto intuitiva, in quanto si
pensi a quanto piccolo sia un blocchetto di 8x8 pixels rispetto ad
esempio alla risoluzione tipica dei DVD di 720x576 pixels). Per
questo motivo, nella stragrande maggioranza dei casi la matrice dei
coefficienti DCT avrà valori significativi (diversi da 0)
concentrati nell'angolo in alto a sinistra, ovvero nel campo delle
basse frequenza. In particolare il valore in posizione (1,1) (il
primo coefficiente in alto a sinistra) descrive il valore medio di
tutto il blocco 8x8 ed è il coefficiente più importante.
L'operazione è del tutto reversibile; nessuna informazioni fin qui
viene persa e dalla matrice 8x8 DCT è comunque possibile ritornare
alla matrice originale 8x8 tramite l'operazione inversa iDCT
(inverse DCT). |
 Uno
dei blocchi 8x8 dell'immagine originale |

 |
 Rappresentazione
grafica della matrice contenente i valori originali del blocchetto
8x8: i valori, nella maggior parte dei casi, sono piuttosto simili a
causa della uniformità spaziale delle distribuzioni di colore che
caratterizzano le immagini a scale relativamenti piccole (8x8
pixels) |

 |

Rappresentazione
grafica della matrice dei coefficienti DCT: solo pochi coefficienti
presentano valori significativi. L'energia è stata
concentrata soprattuto nel campo delle basse frequenze. |
|

|
5) Quantizzazione |
|
Fino a questo punto tutte le operazioni effettuate
dall'encoder sono perfettamente reversibili; nessuna informazione è
stata persa ed è possibile ritornare ai fotogrammi originali
effettuando le operazioni nella direzione inversa. Per ottenere un
ulteriore risparmio di bit, a questo punto non rimane che scartare
alcune informazioni “poco significative”, poco importanti. Per
quanto detto in precedenza, data la relativa insensibilità del
nostro occhio alle alte frequenze video, potremmo scartare alcune
delle informazioni relative alle alte frequenze senza per questo
percepire un qualche degrado qualitativo. A tal fine, ogni coefficiente della
matrice 8x8 DCT viene diviso per un numero intero (divisore) ed il
resto della divisione viene scartato. In tal modo tutti i
coefficienti più piccoli del divisore vengono approssimati a 0,
ovvero vengono scartati (perdita di informazioni). I 64 divisori con
cui dividere ognuno dei 64 coefficiente della matrice 8x8 DCT si
trovano nella matrice di quantizzazione (che è appunto una matrice
di 8x8 = 64 numeri interi), matrice che è possibile scegliere in
fase codifica. Vengono utilizzate due differenti matrici di
quantizzazione: una per gli Intra-Frames (I-Frames) ed una per gli
Inter o Delta-Frames (P e B-Frames). Quello che avviene durante la
fase di quantizzazione, può essere intuito osservando le seguenti
immagini (i pallini nelle singole celle rappresentano i coefficienti
e, maggiore il diametro del pallino, maggiore è il coefficiente in
valore assoluto; lo zero è rappresentato da una cella vuota. Si noti
che i coefficienti DCT possono assumere anche valori
negativi):
|
 Matrice
dei coefficienti DCT(x,y)
|
 Matrice di
quantizzazione Q, Intra o Inter-Frames (Coefficienti Q(x,y))
|
 Matrice
dei coefficienti DCT(x,y)Quantizzati
|
Il netto vantaggio è ora quello di avere
una matrice DCT con un elevato numero di coefficienti nulli;
in molti casi restano da 1 a 3 coefficienti diversi da zero,
raggruppati nell'angolo superiore sinistro della matrice. Si noti
come i coefficienti di quantizzazione per le alte frequenze (in
basso a destra) siano nettamente superiori rispetto a quelli per le
basse frequenze: il coefficiente DCT in alto a sinistra (quello più
importante, che descrive il valor medio dell'intero blocco) dovrà
essere approssimato (quantizzato) di meno, ed infatti risulta avere
il minor coefficiente di quantizzazione. Durante la fase di
decodifica, il decoder moltiplicherà ogni coefficienti DCT
quantizzato per il rispettivo valore della matrice di
quantizzazione, e ricostruirà la relativa matrice dei coefficienti
DCT, che ovviamente non potrà essere equivalente all'originale, ma
ne sarà una sua approssimazione; tuttavia, sebbene molti dei 64
coefficienti della matrice DCT originale siano stati "persi", se la
compressione (quantizzazione) non è stata troppo elevata (ovvero
coefficienti della matrice di quantizzazione troppo elevati)
difficilmente si è in grado di notare la differenza tra l'immagine
originale (non compressa) e quella (de)compressa, questo poichè le
informazioni (quelle più importanti) dell'immagine orginale sono
state in gran parte concentrate in alcuni dei coefficienti DCT
(quelli delle basse frequenze). Qui sotto è illustrato il
procedimento che avviene in fase di decodifica; come si può notare
la matrice dei coefficienti DCT non risulta uguale a quella di
partenza:
|
 Matrice
dei coefficienti DCT(x,y)Quantizzati
|
Durante
la decodifica, moltiplicando la matrice quantizzata dei coefficienti
DCT per la matrice di quantizzazione Q utilizzata dall'encoder, si
ottiene una approssimazione della matrice dei coefficienti DCT
originale di partenza. Tale matrice DCT "ricostruita" viene quindi
utilizzata dal decoder per ricostruire l'immagine originale, tramite
la trasformata inversa del coseno (iDCT).
|
 Matrice
dei coefficienti DCT(x,y) "ricostruita"
|
| La
parte restante della procedura di encoding è forse quella che ci
può interessare di meno ai fini della comprensione del meccanismo alla
base della compressione video, in quanto si tratta di tecniche atte alla
memorizzazione (e compressione) delle informazioni fin qui raccolte. Si
tratta di tecniche di
compressione “loseless”, ovvero che avvengono senza perdita di
dati. La perdita di dati, informazioni, è già avvenuta durante la
quantizzazione della matrice DCT, ed è per questo che la compressione
video è considerata di tipo "non loseless" ovvero con perdita di
informazioni. Ne darò solo un breve cenno, rimanendo molto sul
generale.

|
6) Zig-Zag Scanning (Scansione a
Zig-Zag)
|
|
I
coefficienti delle matrici DCT quantizzate vengono memorizzati e
salvati in array (sono delle matrici lineari) con dei metodi detti
Scansione a Zig-Zag. Per le caratteristiche delle matrici DCT (tutti
i coefficienti non nulli risultano per lo più concentrati
nell’angolo in altro a sinistra nella matrice), i numeri diversi
dallo 0, tendono ad essere raggruppati tutti assieme. Il risultato:
una lunga sequenza di zeri, intervallata da alcuni coefficienti non
nulli:
|
|

|
7)Run-Level encoding
(RLE) e Variable-Lenght
coding (VLC)
|
|
Il procedimento fin qui descritto è
servito per trasformare i dati in una forma trattabile da una serie
di algoritmi matematici descritti generalmente come Entropy Encoding
che, sfruttando la distribuzione casuale dei dati, tentano di
rimuovere una certa rindondanza statistica naturalmente presente, ad
esempio memorizzando i valori più comuni con dei codici brevi,
mentre quelli meno comuni con dei codici più complessi. Tra le
tecniche di questo tipo rientrano:
- codifica Run-Lenght:
utilizzata quando i dati presentano ripetizioni consecutive di
alcuni simboli
- codifica di Huffman:
rappresnta simboli a probabilità di occorenza decrescente mediante
una codifica a lunghezza crescente
- codifica DPCM (Difference
Pulse Code Modulation): rappresenta i simboli originali come
differenza tra il simbolo corrente ed una predizione dei simboli
precedenti
- codifica LZW: utilizza una
tabella per rappresentare sequenze ricorrenti di simboli
- codifica aritmetica:
rappresenta gruppi di simboli, in base alla probabilità di
ricorrenza degli stessi, mediante una rappresentazione in virgola
mobile.
Vediamo qui di seguito un esempio di
applicazione della prima di queste tecniche (Run-Lenght).
----------------------------------------------------
Al
termine della procedura di scansione a Zig-Zag, ci troviamo in
presenza di una sequenza di numeri del tipo:
Sequenza
originale: 90, 5, 10, 2,
10, 1, 0, 0, -2, -4, 3, 0, 0, 0, 0,
3, 0, 0, 0, 0, 0, 1, -2, ...
Utilizzando la
Run-Level
encoding, sequenze consecutive di simboli identici vengono
combinati assieme e vengono rappresentati da un singolo simbolo o
codice. Ad esempio è possibile rappresentare la serie di numeri qui
sopra rappresentata come una coppia di coefficienti (run, level) dove run = numero di
zero precedenti il valore "level", con "level" corrispondente ad
ogni valore diverso da zero che è presente nella nostra sequenza;
utilizzando l'esempio di sopra, applcando una codifica Run-Level
come quella descritta (in cui tutte le sequenze di 0 consecutive
sono rappresentate con il numero degli zeri che precedono il
coefficiente non nullo), si otterrebbe la sequenza
seguente:
Sequenza Run-Leve: (0,
90)(0, 5)(0, 10)(0, 2)(0,
10)(0, 1)(2, -2)(0, -4)(0, 3)(4,
3)(5, 1)(0, -2)
...
A questo punto è
possibile applicare tecniche di copressione Entropy Encoding o Variable-Lenght
Coding, dove le sequenze od i gruppi di dati che si
presentano più frequentemente vengono rappresentati con un codice
breve, mentre vengono assegnati codici più lunghi a quelle sequenze
che si presentano piuttosto di rado. La conseguenza di questa nuova
rappresentazione dei dati è che mediamente occorrono un numero
inferiore di bit per la memorizzazione dello stesso simbolo rispetto
alla quando i dati si presentavano nella forma di partenza. Esempi
tipici di algoritmi che vengono applicati nella codifica a codice a
lunghezza variabile, sono il cosidetto albero di Huffman (che porta
ad un rapporto di compressione tipicamente 1.5:1), le codifiche
aritmetiche e le codifiche sostituzionali come ad esempio
l'algoritmo LZW usato nella compressione delle immagini GIF e che in
una forma modificata, combinata con la codifica di Huffman, è
presente nei famosi formati di compressione gzip, pkzip e png.
Ribadisco che tutte queste tecniche sono di tipo loseless, ovvero
non comportano nessuna perdita dei dati di partenza.
|
|
-----------------------------------------------
Motion
Estimation e Compensation in praticaEd infine, per chiarire un pò le
idee, un po di "Motion Estimation"
applicata. Osservate le seguenti immagini: si tratta di una sequenza video
di un'auto che si sposta da sinistra a destra. A sinistra abbiamo il
fotogramma A, a destra il fotogramma successivo B:
 |
 |
Fotogramma
A
|
Fotogramma B
(successivo)
| Il fotogramma seguente
mostra la differenza tra le due immagini, differenza calcolata pixel a
pixel senza l'utilizzo di nessuna tecnica di compensazione del moto; è in
bianco e nero, in quanto si tratta della sola componente della luminanza
(Y).
 |
L'immagine differenza tra i due
fotogrammi A e B, senza Motion
Compensation
| Osservate ora le due
immagini seguenti: l'immagine di sinistra mostra il fotogramma A con
tracciati i vettori di moto; ogni vettore (linea) indica la direzione in
cui si sposta il macroblocco corrente nel fotogramma B successivo
(direzione individuata mediante motion
estimation). L'imagine di destra è stata invece ottenuta
effettuando la differenza tra i due fotogrammi A e B, utilizzando, al
posto del fotogramma A, il fotogramma A su cui è stata effettuata la stima
di moto. Quello che è importante osservare è che l'immagine di sinistra contiene un numero di
dettagli (informazioni) notevolmente inferiore rispetto all'immagine qui
sopra mostrata (ottenuta dalla differenza senza ME) e richiede quindi un
numero inferiore di bit per essere codificata.
 |
 |
Fotogramma A con
tracciati i vettori di moto
|
L'immagine
differenza tra i due fotogrammi A e B, con Motion
Compensation | La sequenza di immagini
qui sopra è stata prodotta con il programma VCdemo, Image Compression Learning Tool,
liberamente scaricabile al seguente indirizzo: http://www-ict.its.tudelft.nl/~inald/vcdemo, un software
estremamente illuminante per tutti coloro che vogliano capire i principi
alla base della compressione video tramite qualche divertente
esperimento.
Chi desiderasse approfondire l'argomento, trova alcuni
link ad indirizzi web molto interessanti nelle fonti
alla fine di questo articolo.
NOTA BENE: tenete
sempre a mente che ogni fotogramma (immagine) di cui è composto il
video viene suddiviso in macroblocchi di 16x16 pixels (o blocchi di
8x8), ed è lavorando su questi blocchi che il video viene compresso.
Quando catturate, ridimensionate o comprimente un video, assicuratevi sempre che il numero di
pixels verticali ed orizzontali del vostro video, le
dimensioni del vostro video, siano
un multiplo intero di 16, ovvero siano divisibili per 16
(senza resto!), pena una compressione non ottimale od un possibile
errore in fase di codifica. | Un piccolo
commento riguardo alla nota di qui sopra. Utilizzare una risoluzione non
multipla di 16, quanto piuttosto multipla di 4 o di 8 potrebbe comunque
funzionare, tuttavia si rischia di andare incontro ad alcuni problemi,
sotto forma di artefatti video in fase di codifica. Questo è piuttosto
logico se si pensa al fatto che ci si troverebbe in presenza di un
macroblocco di dimensioni non standard. Ad esempio, utilizzando una
risoluzione di 640x360 pixel (640 è multiplo di 16, mentre 360 è
multiplo di 8), avremmo una linea orizzontale di "macroblocchi" di 16x8
pixel, cosa che potrebbe recare qualche fastidio durante la compensazione
del moto. Il problema si potrebbe inoltre complicare nel caso di video
interlacciato. L'argomento è stato comunque trattato più in dettaglio da
Benedetto in un suo articolo, quindi vi rimando alle sue pagine per
ulteriori dettagli (http://www.benis.it/dvd/dig_vid.htm)
-----------------------------------------------
Tipi di fotogrammi: un approfondimento sulla
compressione dei singoli fotogrammiVeniamo ora ad analizzare più in
dettaglio gli I, P, B-Frames ovvero (tradotto) fotogrammi-I, P, B che non
sono altro che differenti metodi in cui il codec Xvid o DivX (quest'ultimo
solo nella versione Professional per quel che riguarda i B-Frames)
comprime i fotogrammi, che appunto a seconda del metodo di compressione
applicato, predono poi i rispettivi nomi. In sintesi, un film compresso in
mpeg4 (ma questo vale anche per gli Mpeg1 e2) sarà costituito da una
sequenza di fotogrammi di diverso tipo, generalmente qualcosa come
IPBBBPBBBPIBBBP eccetera.
Intra-Frames
I-Frames: i
fotogrammi di tipo I, chiamati anche Intra-Frames o Key-Frames (fotogrammi
chiave), sono fotogrammi che vengono codificati utilizzando le informazioni contenute nel
fotogramma stesso e non contengono nessun riferimento od informazione sui
fotogrammi adiacenti; in pratica sono compressi alla stregua di
un'immagine singola, allo stesso modo di quando un'immagine viene salvata
in formato JPEG. Nessun tipo di compressione temporale (ovvero
compressione che tiene conto anche dei fotogrammi successivi e/o
precedenti) viene applicata a questi fotogrammi. E' ovvio quindi che se
tutti i fotogrammi del film fossero di questo tipo, i nostri film
occuperebbero decisamente molto spazio (25 immagini per ogni secondo di
film, per 90 minuti di film... fate un pò voi). In genere i fotogrammi
chiave vengono inseriti dal codec ogniqualvolta vi sia un repentino
cambiamento tra due immagini successive. Quando ad esempio un fotogramma è
completamente diversao dal precedente, l'encoder probabilmente codificherà
tale immagine come fotogramma di tipo I o chiave. Se inoltre viene
specificato un'intervallo massimo tra un fotogramma chiave ed il
successivo (come in Maximum
I-Frame Interval) il codec dovrà necessariamente inserire un
fotogramma chiave anche se non strettamente necessario. Questo risulta
utile in quanto quando ci si sposta all'interno di un file video mentre lo
si sta guardando, alla ricerca di una particolare scena, è possibile solo
spostarsi tra un fotogramma chiave ed il successivo. Fotogrammi chiave
troppo distanziati renderebbero la ricerca piuttosto complicata ed è per
questo che in genere si utilizza un valore massimo per la distanza tra un
key frame ed il successivo corrispondente a circa 10-12 secondi di film
(250, 300 fotogrammi nel caso di un film PAL). Per altre informazioni, vi
rimando al seguente articolo di Benny, http://www.benis.it/dvd/agg2.htm.
Delta-Frames o
Inter-Frames
P-Frames: il fotogramma P, (Predicted frames)
viene codificato utilizzando informazioni acquisite in base al fotogramma
che lo precede, sia questo di tipo I o di tipo P. Ogni macroblocco
di 16x16 pixels di un P-Frame può essere codificato sia in modo
indipendente (come nel caso dell'I-Frame) sia può essere compensato,
bilanciato utilizzando informazioni del fotogramma precedente. Utilizzando
le somiglianze tra fotogrammi successivi i fotogrammi P risultano essere
più piccoli dei corrispondenti I-Frames. (1)
Spesso in una sequenza video, un gruppo o serie di fotogrammi risultano
tra loro molto simili. Considerate ad esempio il caso limite del
conduttore di un telegiornale che parla seduto alla scrivania. Per la gran
parte del tempo, lo sfondo rimarrà praticamente invariato. Prendendo in
considerazione che per ogni secondo di video si susseguono 25
fotogrammi, risulterebbe molto più utile poter memorizzare non i
singoli fotogrammi in modo indipendente, quanto piuttosto
memorizzare e quindi successivamente comprimere esclusivamente le minime
differenze tra di loro. A questo scopo vengono utilizzati i fotogrammi di
tipo P, che consentono di eliminare le informazioni rindondanti e
ripetitive: un fotogramma di tipo P contiene le informazioni della
posizione (X',Y') nel fotogramma corrente in cui si è spostato un blocco
che aveva coordinate (X,Y) in quello precedente (Motion Estimation /
Compensation). Ripeto, in tal modo, al posto di mantenere l'informazione
spaziale (tipo JPEG) del singolo fotogramma, vengono memorizzate le sole
informazioni sulla variazione di posizione (ad ogni blocco viene associato
il suo vettore di moto che consente di ricostruire l'immagine originale),
informazioni che a conti fatti richiedono molti meno bit rispetto alla
memorizzazione dell'immagine completa. Lo svantaggio dell'utilizzo di
questo tipo di fotogrammi si ha in fase di decodifica; è infatti
necessario "ricostruire" ciascun fotogramma P prima di poterlo
visualizzare, e per far questo si deve sempre partire dal fotogramma
P seguente all'ultimo fotogramma chiave; ovvero per visualizzare ad
esempio il quarto fotogramma P di una sequenza tipo IPPPPPPP è necessario comunque ricostruire
anche i 3 fotogramma P precedenti.
Un discorso piuttosto
approfondito meritano i B-Frames che introducono la codifica bidirezionale.
B-frames / Bi-directional encoding: per i
fotogrammi di tipo B la ricerca del moto (motion estimation /
compensation) è effettuata non solo sul fotogramma precedente (come nel
caso di P-Frames) ma anche sul fotogramma successivo. La codifica ed anche
la decodifica risultano quindi decisamente più complesse. Sostanzialmente
i fotogrammi B sono di tipo "Bidirezionale", nel senso che fanno
riferimento sia a ciò che li precede, sia a quello che segue. Inserire in
un fotogramma informazioni che si riferiscono ad un fotogramma successivo
è possibile solo alterando l'ordine in cui i fotogrammi vengono
archiviati all'interno del file video compresso. Questo è effettivamento
quello che fa l'encoder (e di cui tiene conto il decore in fase di
decodifica). Facciamo un esempio. Supponiamo di avere 4 fotogrammi da
comprimere. Il primo di questi sarà necessariamente un fotogramma chiave
(I-Frame), mentre vogliamo che i successivi due siano B-Frames (che
generalmene hanno una dimensione di 1/4 del P-Frame corrispondente);
l'ultimo deve essere necessariamente un P-frame, in quanto i fotogrammi B
necessitano dopo di loro di qualcosa da cui essere derivati. In sequenza
avremmo:
n° fotogramma
|
1
|
2
|
3
|
4
|
| tipo di fotogramma: |
I
|
B
|
B
|
P
| tuttavia i fotogrammi verranno
archiviati all'interno del filmato in questo modo:
n° fotogramma
|
1
|
4
|
2
|
3
|
| tipo di fotogramma: |
I
|
P
|
B
|
B
| Dopo aver codificato l'I-Frame,
l'encoder salta avanti di due fotogrammi e codifica quello che è destinato
ad essere il fotogramma P (ovvero il quarto) e lo codifica come se
seguisse immediatamente l'I-frame:
n° fotogramma
|
1
|
4
|
| tipo di fotogramma: |
I
|
P
| Questo processo genererà un P-frame
di dimensioni superiori a quello che si avrebbe codificando come P-frame
il 2° fotogramma, in quanto generalmente vi saranno più cambiamenti
(ovvero differenze) tra il 1° fotogramma ed il 4° che non tra il 1° ed il
2°. Tuttavia, l'utilizzo dei due B-frame porterà complessivamente ad una
riduzione del numero di informazioni (dimensioni) necessarie alla codifica
(come ho già detto un B-frame occupa 1/4 delle dimensioni di un P-frame).
Ora abbiamo un fotogramma I ed uno P compressi. Fatto questo, l'encoder
ritorna al 2° fotogramma (che è destinato ad essere il nostro primo
B-Frame) e facendo riferimento sia al fotogramma I che a quello P per la
stima e ricerca del movimento, analizza le eventuali somiglianze e procede
alla codifica del B-Frame:
n° fotogramma
|
1
|
4
|
2
|
| tipo di fotogramma: |
I
|
P
|
B
| L'encoder prende quindi il 3°
fotogramma e confrontandolo sempre con l'I-frame ed il P-frame iniziale
genera il secondo B-frame:
n° fotogramma
|
1
|
4
|
2
|
3
|
| tipo di fotogramma: |
I
|
P
|
B
|
B
| I B-frame non possono comuque mai
fare riferimento uno all'altro, ovvero è sempre necessario avere un
I-frame e un P-frame tra più B-frames consecutivi. Questa procedura
porta a complicare ulteriormente la fase di decodifica in quanto ora non
solo è necessario rigenerare i fotogrammi in base alle informazioni
codificate, ma i fotogrammi stessi risultano non essere più archiviati con
il corretto ordine. Traduzione libera di
un intervento di "rui" del 18th February 2002 nel forum di Doom9.
(1)
| In sintesi, l'utilizzo di
queste tecniche permette di ridurre la quantità di bit necessari per
la codifica dell'informazione trasmettendo (codificando) le
differenze tra fotogrammi, piuttosto che archiviando i fotogrammi
stessi. Alla luce di quanto detto finora, si comprende meglio
il motivo per cui sequenze video con scene in rapido movimento o con
un'elevata dinamica siano più impegnative da codificare e richiedano
un bit-rate (o equivalentemente un numero di bit) più elevato:
essendo maggiori le differenze tra i fotogrammi adiacenti, maggiori
sono le informazioni che devono essere memorizzate e conservate. Al
contrario, scene statiche con movimenti lenti o pochi cambi di
scena, presentano minime differenze tra fotogrammi adiacenti, minime
differenze che si traducono con un numero decisamente inferiore di
informazioni da mantere e trasmettere ovvero con un basso
bit-rate. |
"Quantificare" la
compressione: il 'Quantizer'Un'ottimo articolo scritto da Benny sulla configurazione del codec
DivX 4.12, spiega ottimamente la funzione del Quantizer o fattore di
quantizzazione. Come si evince dall'articolo, il fattore di
quantizzazione, che deriva direttamente dall'Mpeg1 e 2, dove generalmente
viene chiamato Q, istruisce il codec sul livello di compressione da applicare ai
singoli fotogrammi. In sintesi, il fattore di quantizzazione può
essere inteso come l'entità della
compressione da applicare al singolo fotogramma. Più
elevato è il Quantizer, più elevata è la compressione e minore è lo spazio
occupato dal singolo fotogramma, ma peggiore è la qualità del
fotogramma. Si possono avere valori compresi tra 1 (compressione
nulla, massima qualità) e 31 (compressione massima, qualità estremamente
scadente, sostanzialmente inutilizzabile). Generalmente i quantizer
prendono valori tra 2 e 16, utilizzando valori superiori solo ove si
voglia effettivamente risparmiare spazio trascurando la qualità (vedi ad
esempio per la codifica dei titoli
di coda); con valori compresi tra 2 e 4 si ottiene un'ottima qualità,
con artefatti dovuti alla compressione praticamente invisibili ad occhio
nudo, se non ingrandendo con uno zoom il filmato. Nel codec sarà
necessario inserire un range massimo e minimo per i valori di
quantizzazione. Sarà l'encoder in fase di codifica ad utilizzare un
determinato valore del fattore di compressione (sempre e comunque
all'interno dell'intervallo scelto), adattandosi in base allo spazio
(bit-rate) disponibile. In situazioni in cui vi sarà abbondanza di
bit-rate disponibile, saranno preferiti valori bassi di compressione; nel
caso invece vi fosse mancanza di spazio, l'encoder preferirà aumentare la
compressione dei fotogrammi. Utilizzando un valore uguale per il minimo e
per il massimo si ottiene una cosidetta codifica a qualità costante,
ovvero ad ogni fotogramma è applicata la stessa compressione. (5)
PARTE
II - Alcune cose di cui tener conto
La scelta del metodo di
compressione
In genere si possono presentare due diverse situazioni
quando andiamo a comprimere un video, sia esso un film in DVD, un
documentario registrato dalla TV od il filmino delle nostre
vacanze.
1) Non ci
interessa lo spazio occupato dal video e miriamo solo alla
qualità.
|
2) Siamo in
presenza di uno spazio limitato, non vogliamo rinunciare alla
qualità: cerchiamo il miglior compromesso tra spazio occupato e
qualità del video. |
Una
situazione del genere potrebbe verificarsi ad esempio se desideriamo
mantenere tutti i nostri video digitali su di un disco fisso
dedicato (dischi di 120GB sono oggi piuttosto economici). In
alternativa, data la rapida diffusione ed il costante ribasso dei
prezzi, molte persone oggi dispongono di un masterizzatore DVD;
i 4,7GB di un supporto DVD, sono quasi sicuramente più che
sufficienti per un normale video di 3 ore in Mpeg4 ad elevata
risoluzione (es. 720x576) e magari anche con audio multicanale, ed
anche in questo caso non ci si preoccuperà dello spazio disponibile
od occupato dal video, quanto piuttosto l'unica preoccupazione sarà
ottenere la massima qualità possibile.
In casi di questo tipo, il modo
migliore per comprimere il video è utilizzare un bit-rate
costante estremamente elevato, oppure impostare un livello di
qualità e/o compressione costante (es. quality = 98% o
quantizer = 2). Sono
situazioni relativamente semplici da affrontare e la codifica
video risulta inoltre piuttosto rapida, in quanto basta un
solo passaggio per la compressione del
video.
| |
Qui le cose
si complicano un po', perchè ora quello che ci interessa non è più
la sola qualità video, ma anche lo spazio occupato dal video, vuoi
ad esempio perchè vogliamo sfruttare al massimo il nostro supporto
DVD+/-R inserendovi più di un film, vuoi perchè ad esempio stiamo
usando dei supporti CD-R (scelta tutt'altro che rara, data la loro
elevata economicità) per conservare i nostri video.
| Il
metodo di compressione più indicato in
queste situazioni è il metodo a bit-rate variabile in due
passaggi, ed è proprio quello che assicura la massima
qualità sfruttando al meglio lo spazio disponibile. In sintesi con questo metodo si
risparmia bit-rate nelle scene più semplici per utilizzarlo in
quelle più complesse, che risultano avere quindi un qualità
migliore rispetto alla codifica con un solo passaggio ed a
bit-rate costante (per il quale invece viene riservato lo
stesso bit-rate video indipendentemente dal tipo di
scena). | |
|
Andiamo ora ad analizzare più in dettaglio la
problematica sollevata dalla seconda situazione vista più sopra.
Questioni
di spazioUna delle prime domande che possono venirci in mente è
"in quanti CD metto il mio
video?", ovvero, "quant'è il
numero minimo di CD in cui posso comprimere il mio video con la certezza
di ottenere una buona qualità?", oppure in alternativa, "quanti megabytes (MB) o Gigabytes (GB) devo
dedicare al mio video per essere sicuro di ottenere una buona
qualità?".
Per
rispondere a questa domanda, è necessario prima chiarire un concetto
importante.
Il
bit-rate: il bitrate (o bit-rate) è una velocità (lo dice la
parola stessa, bit-rate = velocità dei
bit), ovvero la quantità di bit che vengono trasmessi in ogni
secondo; l'unità di misura del bitrate sono i bit al secondo (bps), o
generalmente i kilobit per secondo (kbps) e tutti i loro multipli
(megabit, gigabit, petabit ecc...); per codificare una singola immagine o
fotogramma sono necessari un determinato numero di bit, e poichè nel caso
di un flusso video si ha un determinato numero di fotogrammi ogni secondo,
ecco che si passa dai bit (o Kilobit) al bitrate. L'immagine
seguente aiuta a chiarire il concetto:
Ovviamente,
più alto il bitrate,
mantenendo constante il numero di fotogrammi che scorrono ogni secondo,
più alta è la quantità di bit riservata ad ogni fotogramma. Più elevato è
il numero di bit disponibili per ogni singolo fotogramma, maggiore sarà il
numero di informazioni che possono essere memorizzate e maggiore sarà
quindi la qualità del singolo fotogramma (vi siete persi? ;).
Sicuramente avrete già sentito parlare di bitrate se siete soliti
comprimere i vostri CD-Audio in formato MP3. Più o meno tutti sanno che
una volta compressi in MP3, in un CD-R potranno essere inseriti diversi
album musicali. Se ci si accontenta di una qualità almeno accettabile
generalmente si creano mp3 a 128 kbps (kilo bit per secondo, dove
1bit = 1/8 byte = 1/(8*1024) kbyte
ovvero 1 kbyte = 1024*8 bit), ma
se si desidera una qualità superiore in genere sceglierò almeno 196 kbps.
Nel primo caso potrò mettere circa 10 interi album in nel mio CD mp3, nel
secondo caso probabilmente solo 7 o forse 8. Una situazione di questo tipo
ricade comunque nel primo caso di quelli più sopra analizzati, ovvero non
interessa minimamente lo spazio occupato dalla singola canzone, e
difficilmente ci si porrà un problema del tipo "qual'è la qualità massima (in termini di kbps)
che posso usare per far stare esattamente tutti i miei 10 CD Audio in
700MB (ovvero 1CD da 80 minuti) avanzando al più 1 o 2
MB?"
Al pari della compressione audio, quando si effettua la
compressione di un video la quantità di dati necessari per memorizzare le
informazioni (ovvero il numero di bit necessari) dipende molto dal tipo di
video che si sta comprimendo. Per chiarire questo concetto, torniamo alla
compressione di un file audio. Supponiamo di avere due file audio della
stessa lunghezza, diciamo 5 minuti. Supponiamo che uno sia la
registrazione di un dialogo tra due persone, effettuato in una stanza
molto silenziosa; necessariamente in questo file saranno presenti delle
pause, dei silenzi, che richiederanno un numero molto basso se non nullo
di bit per essere codificati. L'altro file, sia invece la registrazione di
un concerto di una famosa orchestra sinfonica; 40 e più strumenti che
riempiono di una melodiosa armonia la sala da concerto. Inutile dire
quanto più complesso sia da comprimere questo secondo file; ovviamente
sarà necessaria una quantità molto superiore di bit per la compressione
del concerto. Potrebbe quindi bastare un solo megabyte per il primo file
(quello dei dialoghi), per ottenere una qualità più che buona, ma
potrebbero esserne necessari 3 per il concerto dell'orchestra sinfonica.
Lo stesso concetto può essere applicato al video, ma se nel caso
dell'esempio, risultava piuttosto ovvia la differente complessità dei due
file audio, ed era quindi possibile azzardare a priori una previsione sul
bitrate medio necessario per la codifica con qualità accettabile, non
altrettanto semplice è prevedere a priori la complessità di un video.
Alla luce di quanto visto nella Parte
I (introduzione alla compressione video), i più attenti potrebbero
interpretare l'eventuale presenza di lunghe sequenze video statiche (pochi
movimenti con sfondi fissi) e/o di sequenze video molto scure, alla
stregua dei silenzi nell'equivalente audio dell'esempio di sopra, e quindi
potrebbero essere in grado (se dotati di una certa esperienza) di
prevedere a priori un bitrate medio necessario ad una ottimale codifica
del video in questione o piuttosto essere in grado di intuire se sarà
sufficiente un solo CD per contenere tutto il filmato con una qualità più
che accettabile, o più di uno.
Ma è possibile sapere a priori con
certezza quanti MB (od eventualmente quanti CD) ci garantiscono una
elevata qualità di codifica?
Quali dimensioni per il
video?Facendo qualche prova (ovvero provando a comprimere più volte
il video ed a dimensioni diverse) potremmo conoscere le dimensioni minime
che ci garantiscano la qualità voluta. Tuttavia la compressione di un
video è un'operazione piuttosto laboriosa e richiede diverso tempo. Quindi
questa soluzione appare piuttosto improbabile.
| Se
non interessa sprecare CD, o non vi scoccia dividere il film in più
supporti anche se non strettamente necessario, il problema
sostanzialmente non si pone. | Prendiamo un
video in formato 16:9, di risoluzione 640x352 pixel (punti). Se seguirete
la seguente tabella, avrete un risultato garantito nel 100% dei
casi:
Durata
del film (video di 640x352 pixel)
|
Numero di
CD (da 700MB) |
| Inferiore a
1h 00m |
1
|
| tra
1h 00m e 2h 00m |
2
|
| tra
2h 00m e 3h00m |
3
| Sostanzialmente
1 ora di video per CD, ovvero, tolto lo spazio occupato dall'audio,
riservando qualcosa come 500-600 MB (MegaBytes) per ogni ora di video,
avente risoluzione orizzontale di 640 pixel ed verticale di 352 pixel,
andrete sul sicuro. Ovviamente aumentando la risoluzione aumenteranno i MB
necessari ma direi che fino a risoluzioni di 720x384 pixel o simili non
dovreste avere problemi seguendo la tabella di sopra. Sebbene 1 ora di
video per CD non si possa certo definire una situazione di basso bitrate è
comunque questo un caso in cui utilizzare un metodo di compressione in due
passaggi, per lo meno per essere sicuri di utilizzare tutto lo spazio
disponibile. Il metodo in due passaggio è infatti l'unico che consente di
impostare a priori e con precisione la dimensione del file video.
| Le
cose si complicano se invece siete decisamente tirchi e/o pigri e
non volete sprecare un CD in più di quelli effettivamente necessari
per ottenere una buona qualità (come il sottoscritto ad esempio
;). |
Il rapporto bit per pixel (bit /
pixel, bpp)
|
Un metodo potrebbe essere quello
di fare un pò di conti e vedere il numero di bit che mediamente
vengono assegnati a ciascun pixel del nostro video (!). La cosa
sembra complicata, ma prestate un pò di attenzione e vedrete che in
realtà tanto difficile non è. Ciò che è però necessario sapere a
priori è quanti bit/pixel (bpp) siano necessari per poter avere un
video di qualità accettabile. Supponiamo che mediamente siano
sufficienti 0,25 bit/pixel
(bpp) per avere una qualità
accettabile (comprimendo il video in Mpeg4). In tal modo è
possibile calcolare il numero minimo di MB (Megabytes) da assegnare
al video, ovvero il numero di megabyte sotto il quale non dovremmo
andare per garantire un risultato di qualità. Per fare il conto
sostanzialmente basta sapere la risoluzione del video (il
n° di pixel orizzontali ed
il n° di pixel verticali) e
la sua durata e
tenere conto che in ogni secondo di video vi sono 25 fotogrammi (se
il video è in formato PAL come del resto sono tutti i video prodotti
e venduti in Italia ed in UE).
Prendiamo ad esempio un video
di 640x352 pixel, della durata di 90 minuti (= 90 x 60 = 5400
secondi). Il conto è presto fatto:
PF = Numero di pixel per ogni
fotogramma ROriz = Risoluzione orizzontale in
pixel RVert = Risoluzione verticale in
pixel Risulta:
FTOT = Numero totale di
fotogrammi TSec = Durata in secondi del
video FSec = Fotogrammi al
secondo Sapendo che ogni pixel necessita di almeno 0,25
bit, ovvero:
calcoliamo:
BF = Numero di bit necessari per 1
fotogramma PF = Numero di pixel per ogni
fotogramma da
cui:
BTOT = Numero di bit necessari
per l'intero film BF = Numero di bit necessari
per 1 fotogramma FTOT = Numero totale di
fotogrammi tenuto conto che:
ovvero
si
ha:
Quindi
per garantire la riuscita di un video di qualità nel nostro caso
(video di 640x352 pixel, della durata di 90 minuti), potrebbero
bastare poco più di 900MB. Questo sempre se il valore di 0,25 bpp
fosse corretto e fosse costante, ovvero se non dipendesse dal film.
Ma purtroppo così non è: il rapporto
bit per pixel come indice di qualità, dipende dal video che si sta
prendendo in esame (come del resto era logico aspettarsi). In
effetti, sebbene con una certa approssimazione questo discorso possa
valere per un gran numero di video o film, vi sono dei casi in cui
questo metodo non funziona. Generalmente un valore di 0,25 potrebbe
essere sufficiente, ma in certi casi potrebbe non esserlo, ed in
altri potrebbe essere troppo elevato (uno spreco di bit in soldoni).
Alcuni programmi, calcolano questo valore partendo dalla dimensione
in MB che viene assegnata al video (basta effettuare il procedimento
di sopra alla rovescia) e lo usano come valore indicativo della
possibile qualità del video dopo la compressione:
Indicativamente
valori inferiori a 0,20 bpp potrebbero non essere sufficienti per
una qualità accettabile, mentre valori superiori a 0,30 bpp vi
daranno sicuramente un risultato di ottima qualità. Rimane comunque
un certo margine di incertezza e non è infatti possibile usare solo
questo parametro per garantire il risultato ottimale (massima
qualità con il minimo spreco di
spazio).
| Facciamo un esempio in
cui il metodo appena descritto del calcolo del rapporto bit/pixel in
realtà non risulta utile per una stima corretta delle dimensioni minime
del video atte a garantire una buona qualità.
Il
"caso" The Mothman Prophecies
| "The Mothman Prophecies" di 115
minuti, risoluzione 640x272 |
è stato compresso in un solo CD, con
una dimensione del file video di 555MB; facendo un po' di conti,
risulta un rapporto bit/pixel = 0,15 |
| "Balck Hawk Down" di 138 minuti,
risoluzione 640x256 |
è stato compresso in due CD, con una
dimensione del file video di 1167MB; facendo un po' di conti,
risulta un rapporto bit/pixel = 0,29 | Eppure
vi assicuro che non si nota la differenza in termini qualitativi;
relativamente parlando i due film sembrano compressi con lo stesso bitrate
medio, ma ovviamente non è così. Tra l'altro a priori un rapporto bpp di
0,15 mi avrebbe suggerito che lo spazio non era sufficiente per una
qualità accettabile. Il fatto è che "The Mothman Prophecies" è un film
composto di sequenze molto scure, vi sono notevoli sezioni in cui si hanno
sfondi fissi con poco movimento in primo piano, insomma tutte situazioni
che portano complessivamente ad un notevole abbassamento del bitrate
necessario per la codifica (cosa che si poteva intuire osservando il
film). In sintesi il primo film era estremamente comprimibile, una
situazione estremamente favorevole, mentre il secondo risultava di una
comprimibilità "normale".
Esiste dunque un metodo per
prevedere la comprimibilità di un video?
Il metodo c'è, anzi
ve ne sono 2; il primo consiste nell'effettuare un cosidetto test di
comprimibilità, il secondo consiste nell'eseguire il primo passaggio della
codifica e creare il file video con quantizer = 2 oppure nell'analizzare
il file stats creato dal codec sempre al termine del primo passaggio
(rispetto al primo metodo è leggermente più preciso, ma non consente di
stabilire la dimensione del file video a priori, ovvero prima ancora di
iniziare la compressione).
| Test
di comprimibilità |
Alcuni software, quali GordianKnot, consentono di effettuare un test
sulla comprimibilità prima della codifica del film, ed il test è
effettuabile sia con il codec Xvid, sia con il DivX. Iniziano ad
essere disponibili anche i primi sofware che consentono di
effettuare test di comprimibilità con praticamente qualunque codec
video. Per il codec Xvid potete usare Enc by
Jonny, che tra le varie cose permette anche di gestire anche la
compressione del video (tramite VirtualDub). Come funziona un test
di comprimibilità? Viene praticamente compressa e codificata una
piccola parte del video (generalmente il 5%); terminata la
compressione, note le dimensioni del file risultante e nota la
percentuale di video compressa, è possibile risalire alle dimensioni
che avrebbe il video intero compresso, commettendo generalmente un
errore di qualche punto percentuale. Un test di comprimibilità
simile a quello effettuato da GordianKnot (comprimendo ad
esempio il 5% del film) potrebbe essere implementato utilizzando,
all'interno di in uno script per AviSinth
2.5 il filtro SelectRangeEvery
(video_di_input, periodo, num_fotogrammi) (è un filtro
build-in, interno, di AviSynth, disponibile solo nelle versioni 2.5
e successive, ma non disponibile nelle versioni precedenti), dove
periodo è un numero intero
che descrive ogni quanti fotogrammi verranno selezionati il numero
di fotogrammi specificati in num_fotogrammi. Ad esempio SelectRangeEvery(1000,50)
seleziona 50 fotogrammi ogni 1000: vengono selezionati i fotogrammi
0-50, 1000-50, 2000-50, ecc... Si tratta quindi di effettuare la
codifica con VirtualDub o con un'altro programma a piacere, e, note
le dimensioni del video corrispondente al 5% dell'intero film,
stimare la dimensione finale del video moltiplicando tale valore per
20 (es: se il file video corrispondente al 5% risulta avere una
dimensione di 75MB, è probabile che l'intero video abbia una
dimensione finale di 75x20=1500MB). Per rendere attendibile il
risultato vi consiglio di scegliere degli intervalli piuttosto ampi
(1000-2000), onde consentire al codec di effettuare un certo grado
di compensazione del moto. Questo metodo, in genere, data l'esiguità
della parte di video da comprimere (generalmente il 5%) non richiede
molto tempo. |
| Creazione
del video durante il primo passaggio o analisi del file stats |
E' il
metodo sostanzialmente più preciso, ma che non consente di conoscere
la possibile dimensione del nostro video se non al termine del primo
passaggio. Disabilitando l'opzione "Discard first pass" nella
finestra di configurazione "Two Pass" del codec Xvid,
durante il primo passaggio viene creato dal codec il video con
quantizers = 2. Al termine si potrà quindi conoscere la dimensione
del video creato alla massima qualità e quindi avente dimensione
massima. Note le
dimensioni del file video, è quindi possibile avere un'idea della
comprimibilità, ovvero quanto sia comprimibile il video, ovvero
quanti MB siano necessari per la massima qualità; più basso è questo
valore, più il video risulta favorevolmente comprimibile, e quindi
minore risulta lo spazio (o il numero di CD) di cui abbiamo bisogno
per ottenere una qualità paragonabile all'originale. In genere si può
ottenere un'ottima qualità impostando nella
finestra del secondo passaggio, come dimensioni
finali per il video, un valore tra il 70% e l'80% delle dimensioni
del video ottenuto con la qualità massima (quantizer = 2).
Potreste ottenere una
qualità accettabile anche con un valore attorno al 60% (ma
qui dipende da cosa intendete per accettabile). Anche senza
creare il video durante il primo passaggio (ad esempio nel caso
abbiate problemi di spazio), è comunque possibile conoscerne le
dimensioni utilizzando alcuni programmi che leggono il file stats;
uno tra tutti "Nitrogen's XviD Stats Viewer", decisamente
generoso nelle informazioni che è in grado di elargire.
|
Concludendo:
partendo dalla durata del film è possibile farsi solo un'idea di
partenza molto approssimativa dello spazio necessario per una buona
codifica; tenendo poi conto del tipo di film che andiamo a
comprimere, ovvero se ci troviamo in una situazione particolarmente
favorevole (film molto scuro, statico, con poche scene
d'azione) potremmo ipotizzare di essere in una situazione di
materiale video altamente comprimibile e quindi accettare anche
valori del rapporto bit/pixel estremamente bassi. A questo punto si
potrebbero verificare le ipotesi di partenza effettuando un test di
comprimibilità oppure effettuare un primo passaggio e procedere
quindi all'analsi del file stats. Questo ed un pò di pratica ed
esperienza, dovrebbe essere tutto quello di cui avrete bisogno per
creare dei video perfetti anche dal punti di vista qualitativo,
senza inutile spreco di tempo e spazio (ovvero CD-R).
|
PARTE
III - La configurazione del
codec Xvid
Veniamo quindi alla configurazione del codec Xvid.
Questa la prima finestra che si presenta quando andiamo a scegliere il
codec ed a configurarlo tramite il nostro programma preferito (vedi ad
esempio la Guida
all'uso di Virtualdub).

|
Le opzioni
disponibili nella sezione "Encoding
Options", variano a seconda di quello che viene selezionato
in "Encoding Mode"; le
modalità possibili di codifica sono le seguenti e verranno
analizzate in dettaglio nel resto dell'articolo.
Si
noti inoltre che anche le impostazioni configurabili nella sezione
"Advanced options..." ,
variano a seconda del modo di compressione scelto (in particolare in
alcune modalità certe opzioni potrebbero non essere
disponibili).
| Vediamo in dettaglio i
singoli casi.
Encoding Options
Modalità ad un solo
passaggio.
|
Questi
metodi di compressione si differenziano dai metodi a due passaggi
che vedremo di seguito, in quanto la compressione del video viene
effettuata in un solo passaggio.
1 Pass -
CBR: modalità ad un passaggio a bitrate costante (CBR =
Constant Bit Rate); in questo caso ad ogni fotogramma viene
assegnato lo stesso numero di bits, indipendentemente dalla
sua complessità. In realtà è più un metodo a bitrate medio, in
quanto il valore costante, più che essere rispettato sul
singolo fotogramma, si tenta di rispettarlo in un determinato
intervallo di fotogrammi (mediamente ai fotogrammi viene
assegnato il bitrate selezionato). La quantità di bits, per la
precisione di Kbps assegnati a ciascun fotogramma è
selezionabile o spostando lo "slide" (indicato dalla freccia)
o semplicemente scrivendo il numero di Kbps nell'aposito
spazio. E' possibile impostare un valore qualsiasi compreso
tra 1 e 10000 (ma impostare un valore uguale ad 1 non ha molto
senso). Per rispettare lo standard richiesto dal consorzio che
ha fondato l'Mpeg4, si considera 1 Kbit = 1000 bit (e non a
1024), ovvero il prefisso K indica semplicemente le migliaia
(1000).
|
1 Pass -
quality: modalità ad un passaggio cosidetta a "qualità
costante"; il codec tenta di comprimere ogni fotogramma con la
stessa qualità, indifferentemente dalla complessità o meno del
fotogramma stesso. E' possibile impostare un valore per la
qualità spostando la barra o scrivendo un valore tra 1 e 100
nell'apposito spazio (100% = massima qualità). La differenza
con la modalità "1 Pass -
quantizer" dove il quantizer è fisso per ogni
fotogramma e dove può assumere solo valori interi (es. 2, 3,
4...) , viene qui utilizzato un "quantizer medio costante"
ovvero mediamente il quantizer rimane costate e può assumere
anche valori non interi come ad es. 2,5, valori ottenuto
facendo variare il quantizer tra 2 e 3 in fotogrammi
successivi: il primo fotogramma viene ad esempio codificato
con quantizer 2, il secondo con quantizer 3, il terzo con
quantizer 2, il quarto con quantizer 3 e così via, in modo
tale che mediamente il quantizer assume il valore
2,5.
|
1 Pass -
quantizer: un altro metodo di compressione a "qualità
costante"; la differenza con modalità 1 Pass - quality è che
ora ad ogni fotogramma viene assegnato lo stesso quantizer,
ovvero viene compresso ogni fotogramma allo stesso identico
modo (vi ricordo che il quantizer indica il livello di
dettaglio che viene rimosso), mentre nel metodo sopracitato (1
Pass - quality), i quantizer non erano fissi ma piuttosto
modulati, variati, a seconda del comportamento di altri
parametri del codec onde garantire complessivamente un effetto
"qualità costante". Con questo metodo invece i quantizer
vengono bloccati ed in un certo senso può essere considerato
effettivamente il vero metodo a qualità costante; i valori
possono variare da 1 a 31, ma non consiglio di usare il valore
1 (la cui differenza con il valore 2 è minima e non giustifica
l'aumento notevole di dimensioni nel file finale), o valori
superiori a 4 (se interessa un minimo di
qualità). |
I
metodi di compressione ad una sola passata fin qui esposti,
sono generalmente indicati in tutte quelle situazioni in cui
non interessi minimamente lo spazio occupato dal file video ma
esclusivamente la qualità del risultato. In particolare il
metodo a quantizer fisso = 2
dovrebbe garantire il miglior risultato in termini di
qualità, sebbene le dimensioni del file video possano essere
piuttosto elevate. Se possedete un computer sufficientemente
potente (soprattutto in termini di velocità del processore)
potreste provare ad utilizzare una di queste alternative per
la cattura video in tempo reale in formato mpeg4 (ad esempio
per la registrazione da una videocamera o da una scheda TV).
In particolare, in queste situazioni, si dovrebbe preferire il
metodo 1
pass - CBR e disabilitare funzioni avanzate che
potrebbero rallentare la cattura (B-Frames, VHQ Mode, Croma
Motion,
etc...)
|
|
| Modalità a due
passaggi. |
La modalità
di compressione in due passaggi richiede il doppio del tempo
rispetto alle modalità ad una singola passata viste in precedenza,
tuttavia è anche l'unico metodo di compressione che consente di
impostare a priori la dimensione esatta del file video (con un
margine di errore minimo) ed è anche quella che, a parità di bitrate
fornirà la qualità video migliore. Sebbene sia possibile prevedere
anche con il metodo "1 Pass -
CBR" la dimensione finale del nostro file (è sufficiente
effettuare qualche piccolo conto), è altrettanto vero che la
modalità CBR non consente una elevata precisione sulla dimensione
finale senza contare che la qualità ottenibile, a parità di bitrate
medio impiegato, risulta generalmente inferiore. L'utilizzo del
doppio passaggio sostanzialmente consente di risparmiare bit
preziosi nelle scene video semplici da comprimere, per riservarli a
quelle più complesse. Lo schema seguente illustra il funzionamento
della modalità "2
Pass...":
L'utilizzo
dei sue passaggi è necessario in quanto il codec di compressione non
può conoscere a priori quali e quante siano le scene più semplici e
quali e quante quelle più complesse. Ecco quindi che risulta
necessario effettuare una prima analisi del video, cosa che viene
effettuata nel primo passaggio. Durante il primo passaggio il codec
comprime il film con la massima qualità possibile (minima
compressione), impostando tutti i quantizers
al valore di 2, un pò quello che succede quando comprimiamo con
quantizer fisso = 2. Infatti, disabilitando l'opzione "Discard first pass" presente
nella scheda "Two Pass", viene creato il file video ottenibile con
la massima qualità possibile ed avente quindi anche dimensione
massima (in realtà la massima qualità corrisponderebbe a quantizer =
1, tuttavia il lievissimo incremento qualitativo che si potrebbe
ottenere abbassando i quantizers da 2 ad 1, non giustificherebbe il
netto aumento delle dimensioni del file finale). Oltre al file
video codificato con quantizers costanti pari a 2 (che ripeto viene
creato solo se è deselezionata l'opzione "Discard firts pass"), durante il
primo passaggio viene generato anche un file contenente le
statistiche di bitrate del file originale e le indicazioni dove
posizionare i fotogrammi
chiave, i P-frames
ed i B-Frames
(il famoso file "1st pass
stats" che vredremo più avanti).
Durante il secondo passaggio viene invece generato il filmato finale
(generalmente un file avi, ma non necessariamente, essendo il
formato avi solo un "contenitore" per il video mpeg4), usando tutte
le informazioni raccolte durante il primo passaggio nel file .stats e integrando con qualche
altro procedimento addizionale.
In sintesi:
con il metodo di codifica a due passaggi è possibile mantenere
sostanzialmente una qualità costante in tutto il video,
indipendentemente dalla complessità della sezione di video in
esame. La differenza sostanziale rispetto ai metodi ad un solo
passaggio a qualità costante (1 Pass - Quality o 1 Pass -
Quantizer), è che il bitrate risulta essere limitato, ovvero
che non possiamo trascurare le dimensioni occupate dal video;
resta comunque ovvio che la qualità media ottenibile dipenderà
dal bitrate disponibile, ovvero dai megabyte occupati dal
video e che al di sotto di un determinato numero di MB, per
quanto si tenti di agire sui parametri di configurazione del
codec, il bitrate sarà comunque troppo basso per garantire una
buona qualità.
|
2 Pass - 1st
pass: in tal modo viene effettuato il metodo di
codifica in due passaggi, ed in particolare viene scelta la
modalità primo passaggio (passo ovviamente obbligato se poi
dovete effettuare il secondo passaggio) onde configurare le
impostazioni avanzate del codec per il primo
passaggio.
|
2 Pass - 2nd
pass Internal: secondo passaggio della codifica in due
passaggi; è necessario fornire al codec le dimensioni in kbyte
(1 Kbyte = 1024 bytes) che desideriamo abbia il nostro video
al termine della conversione. Il codec provvederà sulla base
dei dati raccolti durante il primo passaggio e salvati nel
file .stats a comprimere il video onde rispettare le
dimensioni desiderate affidando agli algoritmi interni
(implementati nel codec Xvid stesso) la ridistribuzione
ottimale del bitrate. |
2 Pass - 2nd
pass External: secondo passaggio della codifica in due
passaggi; i parametri da passare al codec, l'analisi del file
stats e la compressione da assegnare ai singoli fotogrammi
vengono gestiti da un programma esterno e non più
dall'algoritmo interno al codec. Per essere utilizzato
richiede un programma che sia in grado di gestire la curva di
compressione del codec (es.
GordianKnot).
|
|
|
| Modalità
Test |
Null - test
speed: non viene scritto nessun file video; l'opzione è
utile quando si desideri studiare l'impatto di alcune opzioni
sulla velocità di
codifica. |
| Prima
di affrontare le impostazioni della sezione "Advanced Options...", vediamo le altre
impostazioni selezionabili in questa finestra.
Decoder OptionsCliccando su "Decoder Options..."
compare
la seguente finestra:
Qui
è possibile selezionare alcune opzioni per il postprocessing; queste
opzioni comunque non
influenzano in alcun modo la codifica ma solo la decodifica del
video ovvero quando andremo a guardare il nosto film una volta
compresso, e non è comunque necessario selezionarle o modificarne lo
stato. Possono comunque essere modificate in un secondo momento.
Generalmente per video compressi con una buona qualità, non consiglio di
applicare filtri di postprocessing, in quanto tenderebbero a ridurre la
qualità dell'immagine. Un caso particolare potrebbe essere quello dei
cartoni animati o degli anime giapponesi, nei quali invece i filtri di
deblocking potrebbero migliorare la qualità generale del video. Per
maggiori dettagli vi rimando alla Guida introduttiva al postprocessing.
Load DefaultsCliccando su "Load Defaults...":
vengono
configurate tutte le opzioni così come impostate dagli sviluppatori in
fase di compilazione del codec. In genere viene consigliato di caricare le
impostazioni standard di defaults ogni qual volta si installa una nuova
versione del codec oppure ogni qual volta si hanno problemi in fase di
codifica e non si è in grado di individuarne la fonte.
Qui di seguito verranno ora illustrati e spiegati tutti i parametri
disponibili nelle schede di impostazioni avanzate. In particolare dovete
far riferimento a quanto spiegato nella sezione seguente se state
codificando nelle modalità 1 Pass, o se state configurando i parametri per
il primo passaggio nelle modalità a due passaggi. Se invece desiderate
configurare le impostazioni per il secondo passaggio, fate riferimento
alla sezione "Impostazioni
del codec per il secondo passaggio". Vi ricordo inoltre che l'aspetto delle singole finestre, in particolare
la disponibilità o meno di alcune opzioni, varia a seconda del tipo di
codifica ("Encoding Mode") scelto; alcune opzioni potrebbero
risultare non attive, in quanto utilizzate dal codec in altre modalità di
codifica, mentre l'aspetto delle finestre qui rappresentato è quello
relativo alla codifica in due passaggi, dove è stato scelto "2 Pass - 2nd pass Internal" per il
secondo passaggio.
Modalità "1 Pass..." e "2 Pass
- 1st pass": impostazioni per la codifica ad 1 solo passaggio ed
impostazioni dei settaggi per il primo passaggio nella codifica a
due passaggi. | Le impostazioni che
verranno volutamente trascurate durante questa prima analisi, saranno
affrontate nella seconda parte ("Impostazioni
del codec per il secondo passaggio") in quanto inutili o non
utilizzabili nella codifica ad 1 passaggio o durante il primo passaggio
nella codifica a 2 passaggi.
Procediamo dunque con le "Advanced options...":
 Si
presenta la finestra seguente.
Scheda
"Global" |
 |
Questa che
vedete qui a lato la scermata della prima finestra di
configurazione. I parametri mostrati non è detto siano i
migliori. Procedendo con la lettura, troverete una
spiegazione dei singoli campi
modificabili. | Global
settings
Motion search
precision: questo parametro indica l'accuratezza o
precisione con cui il codec analizza il video ed è di
fondamentale importanza per la qualità del risultato. Valori
bassi consentono una maggior velocità ma una minor qualità;
valori bassi possono essere consigliati solo per la cattura in
tempo reale di un flusso video. In tutti gli altri casi vi
consiglio di impostare il valore massimo, corrispondente a
"6-Ultra High", che garantisce la miglior qualità
possibile; solo nei casi di bitrate elevati o di processori
non abbastanza potenti, potete provare ad utilizzare
"5-Very High" che dovrebbe garantirvi un 10% in più in
termini di velocità e quindi un certo aumento nel numero di
fotogrammi al secondo (FPS) che il codec riesce a processare
(maggiore il numero dei FPS, minore risulterà il tempo di
codifica), ma anche qualcosina in meno in termini di
comprimibilità (se è più comprimibile, le stesse informazioni
richiedono meno bit che possono essere quindi utilizzati
eventualmente in altre scene o risparmiati dando una
dimensione finale del file inferiore, a parità di qualità).
Ricordate comunque che la compressione del video in mpeg4
richiede una elevata potenza di calcolo, soprattutto se si
utilizzano alcuni dei parametri avanzati disponibili per il
codec (Lumi masking, B-Frames, Croma motion etc...),
quindi il componente del vostro PC che farà la differenza in
termini di tempi di codifica sarà per il 95% il processore.
Direi che processori AMD di almeno 1,2Ghz od Intel PIV di
almeno 1,6Ghz, sono consigliabili per la codifica (almeno per
non avere tempi esageratamente lunghi del tipo oltre le 10
ore). Entrando un pò nei dettagli tecnici, diciamo che livelli
da 1 a 3 utilizzano le stesse impostazioni interne per la
stima del moto. A partire dalla precisione 4, il codec usa una
interpolazione a mezzo pixel per un risultato più preciso. A
partire dal livello 5, il codec usa i "vettori di moto
inter4v", ovvero tutti i 4 blocchi di dimensione 8x8 di ogni
macroblocco di dimensione 16x16 (macroblocchi in cui viene
suddiviso il fotogramma dal codec ai fini
della compressione), riceve il proprio vettore di moto. Vi
ricordo che la compensazione del moto viene effettuata
ricercando, tra fotogrammi adiacenti, blocchi di 8x8 pixels
tra loro simili. Con il livello di precisione 6, la ricerca è
estesa ad un intervallo di pixel adiacenti maggiore, e quindi
la codifica risulta più lenta (10% circa), a vantaggio
tuttavia di una maggior comprimibilità (1) a causa di una miglior
costruzione dei P e B-frames. Se si desidera la massima
qualità, consiglio di utilizzare "6 - Ultra
High". |
Quantization
type: in questo campo viene scelta la matrice di
quantizzazione da utilizzare durante la compressione; tale
matrice contiene i valori di quantizzazione (quantizers) che
vengono utilizzati per la compressione (divisione) dei singoli
coefficienti
DCT. La scelta potrebbe dipendere non solo dal video, ma
anche dal bitrate disponibile; per alti bitrate (2CD ad
esempio), "MPEG"
dovrebbe garantirvi un'immagine più dettagliata e definita,
ovvero una qualità migliore sebbene potrebbe essere presente
una certa "granulosità" nel video, cosa comunque tipica del
video MPEG (si nota spesso anche nei DVD); la presenza di una
granulosità maggiore rende comunque il video meno comprimibile
ed è per questo che questo tipo di quantizzazione viene
consigliata quando non si sia in situazioni di bitrate
limitato o spazio limitato. Per bassi bitrate invece potrebbe
essere più consigliabile utilizzare "H.263"
che tratta allo stesso modo alte e basse frequenze video e dà
un risultato più sfumato e meno dettagliato e quindi un video
più comprimibile. Selezionando "MPEG-Custom"
consente invece di utilizzare una matrice di quantizzazione
personalizzata che può essere eventualmente caricata agendo
nella scheda "Quantization". Le altre
due possibilità, "Modulated"
e "New
Modulated HQ" possono essere utilizzate esclusivamente
nel secondo passaggio della codifica a 2 passaggi, e non vanno
utilizzate nelle codifiche ad 1 solo passaggio, nè nel primo
passaggio della codifica a 2 passaggi. Vi rimando alle impostazioni
per il secondo passaggio per maggiori dettagli. |
|
FourCC
used: questo parametro è in realtà un residuo di quando
lo sviluppo del codec Xvid era ancora agli albori, e non era
stato ancora correttamente implementato un filtro DirectShow
in grado di riprodurre i video compressi con Xvid. Tuttavia,
poichè si trattava comunque di un formato mpeg4, era (ed è
tuttora) possibile utilizzare un filtro DirectShow esistente
disponibile per un altro codec (il DivX ad esempio) per
decomprimere i flussi video Xvid. Se si lascia XVID viene utilizzato il filtro
che viene installato con il codec Xvid stesso; DIVX
consente invece di utilizzare il decodificatore distribuito
con il codec DivX (che comunque deve essere installato). E'
comunque possibile modificare in un secondo tempo anche al
termine della conversione tale parametro, tramite un'apposito
programma. Per maggiori informazioni, vi consiglio di leggere
la guida
sulle basi del
postprocessing. |
VHQ Mode:
la sigla VHQ non è un acronimo ben definito, Koepi l'ha
definita "Vastly Hyped Quality" (qualcosa come qualità
eccezionale o giù di li), comunque sia, come più volte
sottolineato da qualcuno (3), VHQ
non significa "Very High Quality", quindi non passate subito ad
attivare il valore 4. In un certo senso questa opzione
effettua una più precisa / economica (in termini di bit)
ricerca e "mode
decision" dei vettori di moto. Ovvero: il VHQ Mode fa sostanzialmente due
cose.1)
Anzitutto è in grado di prevedere il numero di bit che
verranno assegnati ad un determinato macroblocco in diverse
ipotesi e quindi scegliere quello che ne utilizza il numero
minore, ovvero prova diversi modi (algoritmi?) con cui
potrebbe essere compresso lo stesso macroblocco (sempre
mantenendo però la stessa qualità) e quindi sceglie quello che
consuma il numero minore di bit. 2) In secondo luogo, è in
grado di effettuare una limitata ricerca sui vettori di moto
onde minimizzare il numero di bit necessari per un determinato
scenario, dove con scenario si intendono diverse modalità di
macroblocchi (ovvero al macroblocco potrebbe essere assegnato
un solo vettore di moto, oppure quattro vettori differenti od
ancora nessun vettore, ed in tal caso il macroblocco sarebbe
di tipo intra, come gli I-Frames).(3) La decisione sulla
modalità di "archiviazione" di un macroblocco, è basata sulla
quantità di distorsione introdotta (Rate-Distortion
(R-D) based VHQ
modes); le conseguenze sono che generalmente l'utilizzo
del VHQ porta ad una aumento della qualità (l'aumento sarà
difficilmente visibile, ma comunque quantificabile come
piccolo incremento del PSNR Picture Noise
to Signal Ratio), ed a una diminuzione delle
dimensioni del file video (dal 5 al 10% in meno nella modalià
4). Il livello 1 (Mode
Decision) sembra quello più consigliato, in quanto pare
garantire un miglior rapporto tra qualità, riduzione delle
dimensioni del file ovvero aumento della comprimibilità (2-5%
in meno), e rallentamento della velocità di codifica (circa
+20% del tempo rispetto a quando è disattivata, 0 - Off). Riguardo a
quest'ultima affermazione, è doveroso sottolineare che
l'opzione non è stata ottimizzata per la velocità di codifica.
La conseguenza è che attivando la modalità 4 (Wide Search) i tempi di
codifica potrebbero tranquillamente raddoppiarsi, cosa cui non
tutti sono disposti ad accettare. Alla luce di queste
considerazioni pare quindi saggio limitare l'utilizzo delle
modalità 2, 3 e 4 solo in situazioni particolarmente
difficili, quali casi di bitrate estremamente basso come ad
es. film di durata superiore alle 2 ore, a risoluzioni elevate
(640x... o 720x...) archiviati in un solo CD-R. Si noti
infine che il R-D VHQ Mode funziona solo sui P-Frames
(ovviamente sugli I-Frames non viene effettuata alcun tipo di
ricerca sui vettori di moto) e non è stato ancora implementato
sui B-frames.
Risulta quindi piuttosto logico ipotizzare che si ottengano i
risultati migliori in termini di aumento della comprimibilità
(ovvero di riduzione delle dimensioni finali del file video)
quando non si stanno utilizzando i B-Frames. VHQ mode al
momento è compatibile con tutte le altre opzioni del codec
ad esclusione del
Global Motion Compensation (GMC). Non utilizzatela
quindi in abbinamento con il GMC. Più elevato è il
valore dell'opzione "VHQ Mode", più in dettaglio viene
effettuata la ricerca delle possibili alternative alle diverse
configurazioni dei vettori di moto. Il valore 0 - Off disabilita
l'opzione. Il valore 1 - Mode
Decision effettua solo una decisione sugli scenari
diversi senza effettuare una ricerca delle possibili
alternative, cosa che invece
viene effettuata dal livello 2 in
poi.
|
Maximum e
Minimum I-frame interval: indicano rispettivamente
l'intervallo massimo e minimo in termini di fotogrammi, che
può intercorrere tra un fotogramma chiave (key-frame od
I-frame od Intra-frame) ed il successivo. Il valore Maximum
dovrebbe essere qualcosa attorno a 10-12 volte il numero di
FPS (fotogrammi per secondo) del film sorgente (in formato
PAL, tipico in Europa ed in Italia, si hanno 25 FPS), ovvero
un valore tra 250 e 300. Per quanto riguarda il "Minimum...",
scegliete un valore tra 1 e 5 (anche se sono più propenso a
consigliare il valore 1). Valori
consigliati: 1/5-250/300. | Enable lumi
masking: il luminance
masking (mascheramento della luminanza) è simile al "psychovisual model" del DivX 5: si
sfrutta la minor capacità dell'occhio umano nel distinguere i
dettagli nelle zone molto scure o molto chiare di un'immagine,
soprattutto se si sta osservando di sequenze di immagini (un video).
Alla base del lumi masking
vi è la possibilità peculiare del codec Xvid di assegnare ad ogni
macroblocco (16x16 pixels) un differente quantizer, ovvero la
possibilità di comprimere in maniera indipendente i singoli
macroblocchi; risulta quindi logico utilizzare quantizers superiori
per i macroblocchi particolarmente scuri o chiari ed impiegare i bit
risparmiati in zone di luminosità intermedia onde aumentarne la
qualità. E' chiaro che in situazioni di bassi bitrate questo
potrebbe aumentare la qualità globale del video ovvero aumentarne la
comprimibilità, dato che è possibile ottenere una qualità superiore
a parità di bitrate. Sebbene teoricamente l'opzione si presenti
estremamente interessante, al lato pratico è bene ricordare che è
ancora in fase sperimentale, ed in alcune situazioni il video
potrebbe presentare un numero superiore di artefatti (blocchettizzazione) rispetto a
quando l'opzione non è attivata. Il consiglio è di
non lasciare attivo il lumi masking di default e di limitarsi ad
usarlo in tutti quei casi particolari che potrebbero effettivamente
beneficiare dell'opzione, ovvero film particolarmente scuri
e/o luminosi di cui si desidera aumentare la comprimibilità e/o
nelle situazioni di basso bitrate (gli sviluppatori ritengono comunque
l'opzione ancora non funzionante e ne sconsigliano l'uso, in quanto
non sembra contribuire positivamente alla qualità del video).
Un'ultima nota: nelle modalità di codifica a due passaggi, si
consigliava di non attivare l'opzione durante il primo passaggio, ma
non vi è un motivo preciso; per il perfetto fuzionamento della curva
di compressione interna del codec, l'opzione andrebbe usata in
entrambi i passaggi. Comunque, nel caso abbiate problemi, solo come ultima risorsa
provate a ripetere la codifica abilitando il l.m. solo nel secondo passaggio.
Enable
grayscale: selezionate questa opzione solo nel caso vogliate codificare
il film in bianco e nero (scala di grigi). Quando l'opzione è
attivata, tutte le informazioni sui colori vengono scartate, in
particolare si usano le sole informaizioni sulla luminanza (Y),
mentre le componenti sul colore memorizzate in Cb
e Cr vengono eliminate.
Enable
interlacing: attivate questa opzione nel caso il film sorgente sia in
formato interlacciato (vi rimando per le spiegazioni
all'ottimo articolo di Benny che trovate a questo indirizzo http://www.benis.it/dvd/template258/tmpeg258.htm).
L'opzione è necessaria in quanto in video interlacciato la gestione
della compensazione del moto risulta più complessa (deve essere
effettuata a fotogrammi alterni). E' importante sottolineare che
questa opzione non elimina l'interlacciamento di un video, ma
semplicemente attiva il supporto per video interlacciati.
 |
Zoom
(200%) su di un tipico esempio di linee orizzontali che si
notano in un video interlacciato attorno a soggetti in rapido
movimento | Use croma
motion: effettuando una stima del movimento anche nelle
componenti del colore (Cb
e Cr), questa opzione migliora ulteriormente la precisione
nell'analisi del movimento (Motion
Estimation) nei blocchi 8x8, e può essere considerata
qualcosa come un livello 7 di Motion
search precision (7). L'ulteriore analisi di
moto, può migliorare qualità e comprimibilità del video ma rallenta
anche la velocità di codifica. Consigliato per bassi bitrate o per
ottenere la massima qualità.
Quarterpel (Qpel,
Quarter PixEL resolution): l'utilizzo del quarterpel aumenta
la precisione nell'analisi del moto e quindi la qualità video, a
favore di una superiore definizione del video (le immagini
dovrebbero apparire più definite); non dovrebbero invece esserci
sostanziali variazioni in termini di comprimibilità, sebbene si
possa capitare di assistere ad una piccola riduzione nelle
dimensioni del file video. Il
funzionamento: come già accennato in precedenza, ai fini
della codifica vengono analizzate le differenze tra fotogrammi
vicini, e sono queste differenze che vengono codificate, piuttosto
che il fotogramma in se stesso (escluso ovviamente il caso degli I-Frames). Le differenze tra
singoli fotogrammi vengono ricercate facendo riferimento ai
macroblocchi di 16x16 pixels od ai blocchi di 8x8 pixels. Ad
esempio, la parte del fotogramma corrente, individuata dal blocco di
coordinate (1,1) (coordinate riferite alla griglia in cui è diviso
il fotogramma), potrebbe spostarsi nei pressi della posizione (1,2)
nel fotogramma successivo. Raramente capita che i movimenti siano
perfettamente centrati nelle coordinate della griglia, e una
risoluzione limitata a blocchi di coordinate 8x8 (ovvero alla
possibilità di spostarsi solo di un numero intero di valori per le
coordinate), potrebbe non essere sufficientemente precisa. E' stato
così introdotto l'utilizzo dei quarti di valore per lo spostamento
nei singoli blocchi della griglia, ovvero vengono considerati anche
movimenti di soli 1/4 (quarter) di blocco. Il codec così è in grado
di effettuare una moddellizzazione del moto più precisa e di
analizzare movimenti più piccoli, ad esempio dalle coordinae (1,1)
alle coordinate (1.25, 1.75).(4)
Si ottiene in tal modo la superiore precisione nell'analisi del moto
cui accennavo in partenza. Dal lato pratico, vi erano stati
inizialmente problemi nell'utilizzo del qpel (effetti di
trascinamento, sfumatura o macchia che di si voglia, in inglese
"smearing effects") che sono
stati risolti con le più recenti distribuzioni del codec; ritengo
sia comunque necessaria una certa prudenza nel suo utilizzo anche in
virtù del fatto che riduce non di poco la velocità di codifica (un
decremento di oltre il 30%) e che i miglioramenti ottenibili possono
variare da video a video. Sono stati inoltre segnalate possibili
incompatibilità con alcuni decoder Mpeg4 che non implementano ancora
correttamente lo standard ISO e viene consigliato per la decodifica
l'utilizzo del decoder Xvid o di ffdshow (vedi guida
postprocessing).
Global Motion
Compensation (GMC): in casi particolarmente favorevoli
l'utilizzo del GMC potrebbe portare ad un decremento delle
dimensioni video (a parità di qualità) dell'ordine dell'1 o 2%.
Funzionamento: teoricamente il GMC dovrebbe compensare situazioni in
cui si hanno movimenti globali di un intero fotogramma in una
direzione preferenziale, come nei casi di panoramiche, zoom, ecc...
od in tutti qui casi in cui i
vettori di moto assegnati ai singoli blocchi risultano avere una
direzione parallela (questo indica per l'appunto una traslazione
globale dell'intero fotogramma). In un post apparso sul forum di doom9, si
accennava al fatto che forse la GMC non interviene direttamente
sulle panoramiche in quanto l'analisi sui vettori di moto effettuata
dall'encoder dovrebbe essere in grado di trattare sufficientemente
bene anche questi casi; il post continuava spiegando che più
probabilmente la GMC interviene nel ridurre il numero di dati
necessari nella matrice DCT per descrivere un movimento, in quanto
situazioni quali zoom o rotazioni, se viste alla scala del singoli
blocco, approssimano ma non equivalgono ad una traslazione. In virtù del fatto che
in ogni caso non dovrebbe portare a nessun degrado qualitativo
(dovrebbe, e qui il condizionale è d'obbligo), e dato che la
velocità di codifica non viene significativamente ridotta (1 FPS su
di un AthlonXP 2400+), potreste decidere di lasciare il GMC
abilitato di default tuttavia NON
deve essere utilizzato in combinazione con il "VHQ
Mode" in quanto funzioni attualmente non compatibili.
A dovere di cronaca si noti che Nic generalmente non consiglia
l'utilizzo del GMC, e Koepi sottolinea che l'attuale
implementazione del GMC può portare qualche beneficio solo in
situazioni estremamente particolari, ben lontane dal tipico film o
video di tutti i giorni.
B-Frame
control
Maximum
B-frames: il numero massimo di B-Frames consecutivi.
Attualmente viene consigliato di
impostarlo a 2, ma potreste provare anche
i valori 3 o 4 sebbene valori superiori a 2 non siano
consigliati per possibili impatti negativi che potrebbero
avere sulla qualità; valori superiori a 4 non sembrano
aumentare in modo significativo la comprimibilità (ovvero
ridurre la quantità di bit necessari per la codifica). (3)
Per disabilitare
l'uso dei B-Frames, inserite il valore -1.
Impostando il valore 1 si
ottine lo stesso numero di
B-Frames massimi del DivX(10).
B-frame quantizer ratio (%)
(rapporto) e B-frame quantizer
offset (compensazione): questi ultimi due
parametri servono per calcolare il quantizer da assegnare ad
un determinato B-frame. La formula che viene usata per il
calcolo del B-frame quantizer è la seguente: B-Frame
quantizer = {1/2*[(Quantizer P-frame Precedente) + (Quantizer
P-frame Successivo)]*(B-frame quantizer ratio) + B-frame
quantizer offset} / 100. Un'esempio sul funzionamento
viene dalla risposta seguente pubblicata nel forum di
Doom9: ...Se il "...quantizer ratio (%)" è
settato al 100% ed anche il "...quantizer offset" è 100,
il quantizer del fotogramma B (B-frame) sarà dato dal valore
medio tra i quantizer del P-frame precedente e successivo
addizionato di 1. Ovvero: P-frame(quant3), B-frame(quant =
(3+3)/2 + 1 = 4), P-frame(quant3). Se viene aumentato
l'offset ovvero la compensazione, ad esempio, a 200, lasciando
inalterato "...quantizer
ratio (%)" settato al 100%, il quantizer del B-frame
verrà calcolato sempre come media dei quantizer dei P-frames
adiacenti (precedente e successivo) ma sarà addizionato di 2.
Ovvero: P-frame(quant3),
B-frame(quant = (3+3)/2 + 2 = 5), P-frame(quant3). Se
il "...quantizer
ratio" è settato a valori superiori al 100%, il
quantizer del B-frame non sarà più il valor medio addizionato
di un fattore dipendente dall'offset, ma aumenterà
esponenzialmente in funzione del valore dei quantizers dei
P-frames. Se "...quantizer
ratio" è settato al 150%, un P-frame quantizer uguale a
3, darà (teoricamente) un B-frame quantizer di 5.5, un
P-frame quantizer uguale a 4, darà un B-frame quantizer di 7 e
così via, con una crescita esponenziale del B-f quantizer in
funzione del P-f quantizer e/o del "B-frame quantizer
ratio"...".
Ancora, per chiarire le
idee, utilizzando un quantizer ratio di 100, sostanzialmente
verrà utilizzato per i B-Frames lo stesso quantizer usato per
i fotogrammi P ed I (ovvero per il resto del video) e si
utilizzarà sostanzialmente lo stesso grado di compressione su
tutti i fotogrammi (l'offset consente eventualmente di
aumentare compressione per i fotogrammi B); qualunque valore
superiore a 100 tenderà invece a comprimere maggiormente i
B-Frames rispetto agli altri fotogrammi, abbassandone quindi
la qualità rispetto agli altri tipi di
fotogrammi.
In
sintesi, giocando con il quantizer ratio / offset, possiamo
decidere il valore del quantizer da assegnare ai
B-frames: tale valore può essere semplicemente
calcolato come media tra il quantizer dei P-frames adiacenti
addizionato di 1 (caso 100 /
100, maggior qualità), oppure possiamo scegliere di
addizionare sempre un valore costante ma più elevato,
lasciando invariato a 100 il ratio ed incrementando a piacere
l'offset (es. 100/200, ma non c'è un limite superiore), oppure
ancora possiamo preferire una crescita ancora maggiore
aumentando entrambi i valori. In un certo senso possiamo
pensare di aumentare in modo "indiscriminato" il quantizer del
B-frame modificando l'offset, mentre potremmo preferire di
utilizzare il ratio invece per un incremento più "mirato" sui
frame più comprimibili (ovvero quelli cui è stato assegnato
dal codec un quantizer superiore ai P-frames adiacenti). Un doveroso grazie a "blueseb" dal
forum italiano di Doom9. Difficile dire quali
siano i valori migliori, ogni compressione video è una
situazione diversa e non è quindi detto che un valore di 150 /
100 dia risultati migliori che non lasciare il ratio al 100% e
variare il solo offset. Tuttavia è possibile dare alcune
indicazioni: buone
combinazioni ratio / offset con cui provare, sembrano
essere: 150 /
100, 200 /
150, od anche 100 /
200 come consigliato da Iago (6). Potete
comunque provare valori tra 100 e 200 per il "B-frame quantizer ratio
(%)", tuttavia è stato sottolineato come valori
superiori a 200 diano pessimi risultati in termini di
qualitativi. (3)
In sintesi, valori più bassi
danno una qualità migliore a scapito ovviamente della
comprimibilità (quantizers inferiori), valori più elevati
danno quantizers superiori che portano ad una compressione
maggiore ma ad una qualità inferiore. Nel caso vi si presenti il
cosidetto fenomeno dell'"undersize", provate ad usare la
combinazione 100 /
100; nel mio caso ha risolto il
problema.
B-Frames
threshold: questo parametro influenza l'utilizzo dei
B-frames da parte dell'encoder. Gli sviluppatori Xvid, a
partire dalle distribuzioni del febbraio 2003, hanno
modificato il comportamento dell'encoder nei confronti dei
B-Frames, che vengono impiegati con più "parsimonia".
L'encoder può ora "decidere" di non utilizzarli in tutte
quelle scene statiche, nelle quali l'impiego dei B-Frames
causava spesso la comparsa di artefatti video di compressione
che portavano ad un conseguente degrado qualitativo
dell'immagine. Il range dei valori possibili va da -40 a (teoricamente) +255: un valore negativo
impone al codec di utilizzare un numero inferiore di B-frames,
favorendo i P-frames che possono garantire una qualità
superiore a scapito ovviamente di una dimensione superiore del
video finale. Valori positivi invece "obbligano" il codec ad
utilizzare un numero superiore di B-frames (il numero massimo
di b-frames consecutivi è comunque limitato dal campo "Maximum B-Frames"). Il
valore minimo -40
equivale a disabilitare
l'utilizzo dei B-frames, mentre per valori
superiori a +90 non
dovrebbe notarsi più alcuna differenza. Il valore
0 dovrebbe andare bene nella
maggior parte dei casi, tuttavia in situazioni di basso bitrate, potrebbe
essere consigliato l'utilizzo di un maggior numero di B-Frames e
quindi l'uso di valori tra +50 e +90.
Packed
bitstream: se l'opzione viene attivata, l'encoder
impacchetta un P-frame ed il successivo B-Frame in un unico
bitstream; ad esempio, nel caso di un flusso video del tipo
IPBBPBBPBB..., mentre normalmente i fotogrammi verrebbero
impacchettati ciascuno nel suo bitstream: [I] [P] [B] [B] [P]
[B] [B] [P] [B] [B]... ed in tal modo letti e decodificati uno
alla volta, attivando l'opzione si avrebbe un flusso di questo
tipo: [I] [PB] [B] [vuoto] [PB] [B] [vuoto] [PB] [B] [vuoto]...; in tal modo in
fase di decodifica vengono letti (caricati in memoria dal
decoder) due fotogrammi contemporaneamente, cosa che può
velocizzare la fase di decodifica. Ed infatti una decodifica
priva dei ritardi che potrebbero essere causati dalla presenza
dei B-Frames, è proprio la funzione del Packed bitstream (che per la
cronaca fu introdotto per la prima volta nel DivX versione
5.01). Qualcuno ha segnalato che la curva di compressione del
codec potrebbe non essere in grado di gestire correttamente
l'opzione (??...mah...), qualcun altro, invece, sostiene che
potrebbe fornire una miglior qualità (...non vedo come), altri
ancora hanno accennato al fatto che il video procede a scatti
se abilitato il p. bitstream. Come potete intuire se ne
sentono davvero di tutti i colori... Non ho effettuato
ulteriori test, Nic cosiglia di non utilizzarlo(10)
(e se lo dice lui...): in sintesi: non
attivatelo.
DX50 B-VOP
compatibility: questa opzione è nata per garantire la
compatibilità del video compresso anche con il decodificatore
del DivX; infatti le versioni del DivX precedenti alla 5.03,
non erano in grado di decomprimere flussi video in cui
un B-Frame usava come referente futuro un I-Frame, e
questa opzione impediva per l'appunto comportamenti di questo
tipo. Ho aggiunto "in linea teorica" perchè all'atto pratico
l'incompatibilità apparentemente non si limitava solo a questo
dettaglio, in quanto, come ho potuto constatare, sebbene si
trattasse di video codificato con l'opzione attivata, questo
non veniva riprodotto correttamente una volta che si cambiava
il FourCC da Xvid a
DivX (vedi "Guida introduttiva al postprocessing").
Comunque, dato che non influisce su velocità di codifica e
qualità del risultato e che dovrebbe garantire una portabilità
(leggi compatibilità maggiore) del video prodotto anche con
futuri decoder hardware (es. lettori DivX da tavolo), consiglio di mantenerla
attivata.
Print debug info
on each frame: questo parametro è utile solo per
eventuali test e verifiche; non influenza la qualità della
codifica. Non è necessario selezionarlo a meno che non abbiate
la necessità di effettuare dei test di
controllo.
|
|
Scheda "Quantization" |
I parametri di questa scheda
risultano modificabili solo nelle modalità 1 Pass - CBR / quality (ed ecco
perchè viene mostrata adesso), e nella modalità 2 Pass - 2nd pass. Tuttavia
restringere i quantizer ha effettivamente senso solo in quest'ultimo
caso (2 Pass - 2nd pass) in
quanto nelle altre modalità di codifica (CBR e quality), i quantizer
utilizzati dipendono dal bitrate utilizzato (CBR) e dalla qualità
scelta (quality). Nella codifica con il metodo 1 Pass - quantizer i parametri di
questa scheda risultano non modificabili (in quanto costanti), come
del resto non sono modificabili nella modalità 2 Pass - 1st pass che equivale
sostanzialmente al metodo 1 Pass -
quantizer = 2.


Utilizzando
Load matrix... e Save matrix... è possibile
caricare e salvare matrici esterne create da qualcunaltro o da
voi stessi.
|
Quantizer
restrictions
Min / Max
I-frame quantizer: questi valori restringono il campo
dei quantizer che possono essere utilizzati per i fotogrammi
di tipo I. Valori consigliati sono quelli indicati in figura:
2 per "Min..." e 6 per
"Max..." (viene quindi
favorita la qualità per gli I-Frames).
Min / Max
P-frame quantizer: questi valori restringono il campo
dei quantizer che possono essere utilizzati per i fotogrammi
di tipo P. Valori consigliati sono quelli indicati in figura:
2 per "Min..." e 16
per "Max...".
NOTA: anche i
valori di default 2-31 per entrambi i campi garantiscono un
risultato ottimale, in quanto non dovrebbe essere necessario
limitare i quantizer in condizioni di bitrate
sufficiente.
Min / Max
B-frame quantizer: al momento non è ancora possibile
gestire i quantizers dei B-frames, forse l'opzione sarà resa
disponibile con le release successive del codec.
Edit Quantizer
Matrix: Questo pulsante può essere utilizzato per
modificare e personalizzare la matrice di quantizzatione di
cui ho spiegato l'utilizzo in precedenza. Non credo sia
necessario aggiungere altro, tranne precisare che non vi
consiglio di modificarla se non sapete esattamente quello che
state facendo (ma in tal caso dubito che stareste leggendo
questa guida ;). Vi ricordo comunque che: - ogni singolo valore non è altro
che il numero per cui viene diviso ogni coefficiente della
matrice 8x8 DCT; - numeri più elevati corrispondono
ad una compressione più elevata e quindi ad una maggior
perdita di informazione (qualità video inferiore); -
in alto a sinistra vi sono i divisori per le basse frequenze
video (che dovrebbero essere il più possibile fedeli
all'originale), mentre in basso a destra i divisori per le
alte frequenze (quelle alle quali il nostro occhio è meno
sensibile e che possono essere quindi approssimate
maggiormente od eliminate ovvero poste = 0). Si noti
infine come siano presenti due matrici diverse, una per gli
Intra Frames (I-Frames) che in genere devono avere una qualità
elevata, ed una per gli Inter Frames (P e B-Frames), sui quali
è possibile effettuare una compressione superiore (notate il
coefficiente in posizione
(1,1)).
|
|
Scheda
"Two Pass" |
Non sono molte le impostazioni configurabili in
questa scheda durante il primo passaggio nella codifica a 2
passaggi. In tutte le modalità di codifica ad 1 solo passaggio
la scheda risulta non avere opzioni attive (e questo del resto
è piuttosto ovvio).
Discard first
pass: selezionate questa opzione per evitare la
creazione del file video durante il primo passaggio, questo
per evitare inutile spreco di spazio sul disco. Ricordo che
durante il primo passaggio il film viene compresso con la
massima qualità possibile (quantizers = 2) onde analizzarne la
complessità. All'atto pratico, la presenza di tale file
potrebbe essere giustificata solo per confrontarlo con il
nostro video finale ed avere un'idea del livello
qualitativo.
Hinted ME
(Hinted Motion
Estimation): (non
più utilizzabile) è stata un tentativo di implementare
un'opzione presente in alcuni encoder MPEG2; se questa opzione
è attivata, durante il primo passaggio viene creato un file
con estensione .MVH in cui vengono memorizzate le informazioni
sui vettori di moto associati ai singoli macroblocchi, in modo
simile all'opzione di logging dei vettori di moto (Motion
Vector - MV Logging) del DivX 5.x. In pratica la stima del
moto è effettuata solo durante il primo passaggio, con
l'intento di velocizzare la codifica del secondo passaggio, in
quanto non vengono ricalcolati i vettori di moto. L'opzione
tuttavia non funziona in quanto nell'mpeg4 la stima di moto
non è basata solo sul moto reale, ma piuttosto risulta
correlata pesantemente alla stima di moto, all'immagine
differenza, a sua volta correlata ai quantizers utilizzati e
così via. L'opzione non sarà più supportata e non ne è
previsto un ulteriore sviluppo.
1st pass
stats: in questa riga potete scegliere il nome e la cartella in cui
salvare il file che conterrà le statistiche video
(ovvero i dati con l'analisi del video effettuata dal codec
durante il primo passaggio) che saranno necessarie per la
codifica nel secondo passaggio. Ricordatevi che questo
valore non deve essere cambiato quando andate ad impostare il
codec per la codifica del secondo passaggio. Al termine
dei due passaggi potete cancellare tranquillamente il file.
Potrebbe tornarvi utile per saltare il primo passaggio solo
nel caso non andrete a cambiare le impostazioni di
configurazione del codec, in particolare quelle che cambiano
la compressibilità del video (Quantizers, B-frames,
Quarterperl
ecc...).
|
|
Scheda
"Alt. (Alternative) Curve" |
Gli unici parametri modificabili in questa scheda
nelle codifiche ad 1 solo passaggio (1 Pass) o nella codifica
a 2 passaggio, durante il primo passaggio, sono i
seguenti:
Max bitrate
(Kilobit/s): obbliga il codificatore Xvid a stare al di
sotto di questo bitrate massimo. Lasciate il valore di default
10000.
Max overflow
improvement % - Max overflow
degradation %: indica la velocità con cui il codec può
consumare un bitrate disponibile in eccesso (overflow) in
tutte quelle situazioni in cui di sta ottenendo un file
sottodimensionato (undersize)
rispetto alle dimensioni specificate nella finestra iniziale
della configurazione per il secondo passaggio. Un valore più
elevato, dovrebbe colmare il divario più in fretta. Lasciate il valore di
default.
--------------------------------------
La
sezione "Use Alternative
curve system" non è
attivabile.
|
|
Scheda
"Credits" |
Si noti che nella modalità
"1 Pass - CBR", questa
scheda non è configurabile.
Credits at start
of movie & Credits at end of movie: questa opzione
sembra in particolare pensata per la codifica dei film. Se
pensiamo ad esempio ad un film in DVD, questo contiene alla
fine qualcosa come 6-8 minuti di crediti (o titoli di coda).
Nella maggior parte dei casi questi sono costituiti da testo
scorrevole che difficilmente verrà mai letto. Codificare
questa parte con un bitrate basso se non con una qualità
scadente consente di aumentare il bitrate disponibile per il
restante film. Tale accorgimento risulta estremamente utile
soprattutto quando ci si trova con spazio disponibile
limitato. Prenderò in considerazione solo il caso di crediti
alla fine del film in quanto è la situazione che più spesso si
presenta. Spuntate la casella "Credits at end of movie"
per attivare tale opzione. In "Credits begin at frame
no.:" dovete inserire il numero del fotogramma in cui
iniziano i titoli di coda mentre in "Credits end at
frame no.:" il numero del fotogramma in cui finiscono
(nella stragrande maggioranza dei casi questo coinciderà con
l'ultimo fotogramma del film). Per conoscere il numero del
fotogramma da inserire, la procedura è piuttosto semplice, vi
serve solo una piccola calcolatrice. Ciò che dovete fare è
aprire il film con il vostro DVD Player preferito (es. WinDVD
o PowerDVD) e controllare sulla barra di stato il tempo in
ore, minuti e secondi in cui compare il primo titolo di coda,
ed il tempo in cui i titoli finiscono (oppure la durata totale
del film). Ecco un esempio pratico. Supponendo di avere un
film in formato PAL (è il tipico formato di tutti i film
distribuiti in Italia), caratterizzato dall'avere 25
fotogrammi al secondo (fps). Per trovare il numero del
fotogramma che corrisponde ad un determinato tempo T (espresso
in ore, minuti e secondi), è necessario prima convertire il
tempo in secondi e poi moltiplicare per il numero di
fotogrammi al secondo. In parole povere, basta usare questa
semplice formula:
Num. del fotogramma =
[(num. di ore) x 3600 + (num. di minuti) x 60 + (num. di sec)]
x 25
Utilizzando
l'esempio mostrato nella tabella seguente:
| Durata totale del
film |
2h 10m
40s |
Inizio dei crediti
finali (titoli di coda) (si suppone che i
crediti terminino con la fine del film) |
2h
03m
13s
| si
ottengono i seguenti valori:
inizio dei
crediti al fotogramma: [(2 x 3600) + (3 x 60) + 13] x 25
= 184825
fine dei
crediti al fotogramma: [(2 x 3600)
+ (10 x 60) + 40] x 25 = 196000
Basta
compilare i relativi campi con i valori trovati qui sopra,
come mostrato nella figura precedente.
In linea di
massima, l'inizio dei titoli di coda coincide con l'ultimo
capitolo del film; potrebbe quindi essere sufficiente andare a
leggere il file di testo contenente la lista dei capitoli che
è stato creato da DVD Decrypter al momento della copia del
film sul disco fisso. Tuttavia fate attenzione poichè questa
regola non è rispettata in tutti i film (un esempio per tutti,
Matrix). Molti
programmi consentono di semplificare notevolmente la
procedura, in quanto mostrano il numero del fotogramma
corrente per una determinata scena. VirtualDub è uno di
questi.
Potete
leggere in (2) il numero del fotogramma corrente, ed usare il
cursore (1) per spostarvi all'inizio ed alla fine dei titoli
di coda, annotando il loro valore. In tal modo la compilazione
dei campi precedenti risulta molto più semplice. Per chi
usasse altri programmi, nel caso il programma in questione non
disponga di una opzione simile a quella di VirtualDub, rimane
la possibilità di eseguire il tutto manualmente seguendo la
procedura spiegata, ovvero utilizzando il software DVD player
e annotando da parte il tempo in cui iniziano e terminano i
titoli di coda.
Encode credits
in greyscale: per risparmiare ulteriormente bitrate nei
crediti ed aumentarne la comprimibilità, consiglio di
codificarli in bianco e nero (sempre ovviamente che nei
titoli non siano presenti immagini o video a colori come
talvolta capita). Per far ciò, selezionate questa
opzione.
Credits
rate reduction
Desired %
rate: utilizzando questo campo, i crediti vengono
compressi con un bitrate costante che è la percentuale
indicata del bitrate utilizzato per il resto del video; ad
esempio, se il bitrate medio del film è 800kbps, per i titoli
di coda verrà utilizzato un bitrate di 80kbps se "desired % rate" è impostato
a 10%.
I-frame
quantizer / P-frame quantizer: indicate qui il
quantizer fisso che verrà utilizzato per i fotogrammi I e P
compresi nell'intervallo selezionato come appartenente ai
crediti (o titoli di coda, nel caso dei crediti finali). Consiglio un
valore tra 19 (migliore) e 25 (peggiore). Oltre si
ottiene una qualità non accettabile nemmeno per i titoli di
coda (ma questo è opinabile, nel senso che se proprio non ve
ne frega niente dei titoli...).
Starting size /
Ending size (kBytes): utilizzando questi campi è invece
possibile specificare la dimensione in kB che si desidera
assegnare ai crediti; in tal modo, il codec tenterà di
codificarli in modo da fargli occupare la dimensione richiesta
(es: supponendo di voler riservare 2MB ai titoli di coda,
dovremmo inserire in "Ending size (kBytes)" il valore di 2048
(= 2 x 1024)). Problemi potrebbero insorgere nel caso la
dimensione richiesta sia troppo piccola, in quanto al di sotto
di una data compressione (quantizer = 31) il codec non è in
grado di spingersi. (8)
|
|
Scheda
"Debug" |
Performance
optimizations: se non fosse già automaticamente
selezionato, scegliete "Automatically detect optimizazions".
Vi ricordo che le istruzioni SSE2 sono supportate al momento
dai soli processori della famiglia Pentium IV. Questa scheda
in linea di massima non necessiata di nessun aggiustamento.
Solo nel caso abbiate seri problemi di codifica (es. continui
crash del programma durante la codifica ecc...) potreste
provare a forzare o meno alcune ottimizzazioni ("Force optimisations") alla
ricerca di eventuali incompatibilità ma dovrebbe essere
davvero l'ultima spiaggia.
Chroma
Optimizer: questa
opzione dovrebbe interpolare in fase di preprocessing (ovvero
ad un livello precedente l'inizio della codifica vera e
propria), le informazioni sui colori nelle zone molto scure o
molto luminose per ridurre l'effetto di scalettatura dovuto ad
una transizione troppo brusca tra i livelli. A livello
matematico la differenza con il video originale dovrebbe
aumentare, ed in quanto tale dovrebbe ridursi il PSNR,
tuttavia la qualità soggettiva percettibile, dovrebbe
aumentare (riduzione delle scalettature tra i colori). Ho
usato il condizionale per ricordare che è una caratteristica
ancora in fase di test (ecco il motivo per cui è stata messa
nella scheda "Debug"). Consiglio il suo utilizzo solo ad
utenti esperti.
Use
trellis R-D quantisation: questa opzione è presente in
questa scheda in quanto è da considerarsi in fase sperimentale;
inoltre al momento attuale funziona solo con le matrici di
quantizzazione H.263 e nella codifica in due passaggi
(2 Pass). L'opzione,
basata sulla teoria rate-distortion,
lavora impostando (forzando) a 0 alcuni coefficienti della matrice
DCT se il livello di distorsione introdotto con
tale scelta non supera un determinato valore, valore a sua
volta funzione del numero di bit risparmiati avendo impostato
a 0 alcuni dei coefficienti DCT. Questo comporta una lieve
perdita in termini di PSNR,
compensato comunque dal decremento delle dimensioni del file
video (aumento della comprimibilità).
Frame drop
ratio: numero di fotogrammi saltati, non modificatela,
lasciate 0 a meno che non sappiate esattamente cosa state
facendo (0 = Nessun
fotogramma viene saltato, 100 = Tutti i fotogrammi sono
saltati).
CBR
options
Questi parametri sono modificabili solo
nella modalità "1 Pass -
CBR" e consiglio di lasciare i valori di default, dato
che il loro funzionamento non risulta spiegato in nessuna
guida.
Reaction Delay
Factor: il valore determina il ritardo in fotogrammi
(?) che il codec deve attendere prima di correggere il bitrate
al variare della complessità delle scene codificate (si
ricordi che la modalità CBR è piuttosto una modalità a bitrate
medio
costante, piuttosto che a bitrate sempre costante). Questo
parametro pare influenzare molto la qualità di
codifica.
Average
period: descrive il numero di fotogrammi consecutivi
sul quale il codec può variare il bitrate onde ottenere
mediamente il valore prestabilito.
Smoother:
indica il numero di fotogrammi minimo che è necessario
interporre tra la minima qualità possibile e la qualità
corrente scelta dal codec. In pratica il parametro tenterebbe
di prevenire una eccessiva differenza qualitativa tra
fotogrammi adiacenti che potrebbe essere causata nel tentativo
di rispettare il bitrate medio impostato in quelle situazioni
in cui il codec abbia aumentato notevolmente il bitrate a
causa di scene particolarmente complesse.
|
| Cliccate quindi su OK fino a tornare alla finestra
principale del programma che state utilizzando per la codifica.
Nel
caso stiate codificando con 1 solo passaggio, la configurazione del codec
Xvid è ora terminata e potete tranquillamente procedere con l'avvio della
conversione o della cattura del video su cui state lavorando. Nel caso
stiate effettuando la codifica in due passaggi, procediamo oltre e vediamo
come configurare il codec per il secondo passaggio. Per un esempio
pratico, fate riferimento alla Guida alla configurazione del codec Xvid con
Virtualdub.
Modalità "2 Pass - 2nd
pass...": impostazioni del codec per il secondo
passaggio | Siamo nuovamente alla finestra
di configurazione principale del codec Xvid; è necessario ora sceglire
"2 Pass - 2nd pass Int." od
evetualmente "2 Pass - 2nd pass
Ext.":
Supponiamo di aver scelto,
secondo passaggio con utilizzo delle
impostazioni interne al codec per la predizione della dimensione finale
del vostro video. Accanto a "Desired size (kBytes)", è necessario
inserire la dimensione finale che volete abbia il vostro file contenente
il solo flusso video
(questa operazione non è necessaria se si sta utilizzando un software
esterno, "... - 2nd pass Ext." per
regolare la curva di compressione del codec):
Vi ricordo che la
dimensione in kBytes si ottiene moltiplicando per 1024 (1 kilobyte = 1024
bytes) la dimensione in MegaBytes, ovvero moltiplicando per 1024x1024 =
1048576 la dimensione in GigaBytes (es: 695MB = 695*1024 kB = 711680 kB;
1390MB = 1423360 kB). Nel caso dovessero verificarsi problemi con il
raggiungimento delle dimensioni desiderate, vi consiglio di leggere l'appendice
B.
Scheda "Global" |
Non dovrete modificare nulla in questa scheda
rispetto al primo passaggio; solo una piccola precisazione per
quel che riguarda il "Quantization
type".
Quantization
type: per il secondo
passaggio è necessario lasciare sempre lo stesso valore che è
stato impostato durante il primo passaggio tranne nel caso
vogliate utilizzare MODULATED o NEW MODULATED HQ. Nel
caso scegliate MODULATED, verrà usato H.263 come matrice di
quantizzazione nel caso di quantizers inferiori od uguali a 3
(fotogrammi poco compressi quindi), e MPEG nel caso di quantizers
superiori od uguali a 4(6)
(ovvero per tutti quei fotogrammi che sono stati compressi
maggiormente); NEW MODULATED HQ invece usa H.263 come matrice di
quantizzazione nel caso di quantizers inferiori od uguali a 4,
e MPEG nel caso di
quantizers superiori. In linea teorica questi due metodi
dovrebbero riuscire ad eliminare una parte del rumore, della
"granulosità", che si nota soprattutto nei fotogrammi meno
compressi (quelli più grandi) che invece di essere trattati
con la matrice MPEG, vengono trattati con la H.263. L'utilizzo
invece della matrice MPEG per i fotogrammi più compressi
consente comunque di mantenere una buona dose di dettaglio che
verrebbe invece perso con la H.263. Si noti tuttavia che i metodi
"Modulated" non rispettano lo standard Mpeg4 e quindi
il video potrebbe non essere perfettamente compatibile con dei
player Mpeg4; Inoltre sono
stati segnalati possibili problemi (presenza di artefatti
video) con l'utilizzo contemporaneo di B-Frames, Qpel e
matrici "Modulated". (10)
|
|
Scheda "Quantization" |

|
Quantizer
restrictions
In questa scheda potrete ora
modificare i quantizers cosa che non era invece possibile fare
durante il primo passaggio della codifica in due passaggi (si
ricordi in proposito che durante la codifica in 2 passaggi,
nel primo passaggio si effettua sostanzialmente una codifica
con quantizer fisso uguale a 2). Un breve richiamo delle
opzioni selezionabili.
Min / Max
I-frame quantizer: questi valori restringono il campo
dei quantizer che possono essere utilizzati per i fotogrammi
di tipo I. Valori consigliati sono quelli indicati in figura:
2 per "Min..." e 6 per
"Max..." (viene quindi
favorita la qualità per gli I-Frames).
Min / Max
P-frame quantizer: questi valori restringono il campo
dei quantizer che possono essere utilizzati per i fotogrammi
di tipo P. Valori consigliati sono quelli indicati in figura:
2 per "Min..." e 16
per "Max...".
NOTA: anche i valori di default
2-31 per entrambi, dovrebbero comunque garantirvi un risultato
soddisfacente.
Ricordatevi che non dovete
modificare la matrice di quantizzazione rispetto a quella
utilizzata nel primo
passaggio.
|
|
Scheda "Two Pass" |
|
Curva di
compressione lineare: più semplice da configurare, più
garanzia sulla qualità del risultato
Per la
compressione mi sono basato su quanto consigliato da Koepi e
da Iago (6) ovvero di
utilizzare una curva di compressione lineare per la
distribuzione del bitrate ai vari fotogrammi (Linear curve downscaling),
non utilizzando quindi il metodo "Alternative Curve"
implementato nel codec. Il concetto alla base dell'Alternative
Curve consiste nel ridurre le dimensioni dei fotogrammi più
grandi in favore dei più piccoli, mentre un metodo di
compressione lineare ridimensiona tutti i fotogrammi tenendo
semplicemente conto dello spazio disponibile. Una risposta di
"unplugged" apparsa in
una discussione nel forum di doom9 (http://forum.doom9.org/showthread.php?threadid=32294),
chiarisce ulteriormente il concetto:
"...non è che una curva lineare per
il calcolo della distribuzione dei bit ai singoli fotogrammi,
sia meglio o superiore al metodo "Alternative Curve"; il suo
principale vantaggio è nel garantire una distribuzione del
bitrate più omogeneo; sebbene vi sia una effettiva
penalizzazione nei confronti dei fotogrammi più piccoli, il
metodo lineare potrebbe (e qui il condizionale è d'obbligo)
garantire una qualità superiore semplicemente perchè la Curva
di Compressione (CC) del codec Xvid risulta piuttosto
complessa da configurare e potrebbe non avere un codice (per
il calcolo della distribuzione dei bit ai fotogrammi)
ottimamente tarato per tutto il video, senza contare che
risulta piuttosto complicato da configurare... cioè il metodo
lineare può talvolta essere migliore non in quanto superiore
dal punto di vista teorico rispetto all'Alternative CC, ma
piuttosto perchè l'algoritmo di distribuzione lineare risulta
molto semplice da implementare in maniera omogenea e risulta
quindi più preciso nel raggiungere la fine del video
rispettando le dimensioni volute senza dover effettuare
continui aggiustamenti nel bitrate (incremento di 1235,
decremento di 4345, incremento di 7686, incremento di 2000...
fluttuazioni tipiche di una curva di compressione lineare non
ben tarata)".
Non verrà quindi usata l'"Alternative
curve system" che dovrà essere in seguito disabilitata.
I
parametri in questa scheda che caratterizzano la curva di
compressione sono I-frame boost %, High / Low bitrate scenes %
e per ottenere una distribuzione perfettamente lineare, tutti
dovranno essere impostati a 0. Tenete comunque sempre
presente che potete scegliere il metodo "Alternative Curve
Compression" selezionando i parametri interessati seguendo le
alternative proposte. |
Two
pass tuning
I-frame boost
%: con questa opzione è possibile aumentare della
percentuale indicata i bytes assegnati ai fotogrammi chiave (I
o Key frames). La qualità degli I-frames è calcolata in base
ai parametri "Min / Max
I-frame quantizer", ovvero vengono usati tali
quantizers per il calcolo dei bytes assegnati ad ogni I-frame.
In alternativa è possibile incrementare i bytes asseganti ad
ogni fotogramma chiave della percentuale indicata in questo
campo. Supponendo ad esempio, che un I-frame sia compresso
(letteralmente scalato, dall'inglese "scaled") a 5000 bytes,
con questa opzione attivata ed impostata al 20(%), verrebbe
"riscalato" a 6000 bytes (5000+20% di 5000). (1) Il valore
consigliato è 0 (linear curve), ovvero
nessuna ridistribuzione. Da un punto di vista teorico, un
I-Frame di maggiori
dimensioni (ovvero di qualità elevata) potrebbe portare a dei
vantaggi qualitativi nella codifica, poichè i delta-frames
vengono calcolati partendo proprio da un I-frame. Nel caso si
decida di incrementare (boost) la qualità e la
dimensione degli I-Frames, vi consiglio di usare valori
compresi tra 5 e 20% (max).
Discard first
pass:
vedi sopra.
Dummy 2nd
pass: ovvero "finto
secondo passaggio" o "secondo passaggio fantasma".
Se attivata, non viene creato nessun file video durante il
secondo passaggio; utile solo per test.
Below i-frame
distance... e I-frame bitrate
reduction %: nel caso che due fotogrammi chiave o
i-frames si trovino vicini in un intervallo inferiore al
numero di fotogrammi specificato in "below i-frame distance...",
il codec provvederà a ridurre i numero di bit assegnati al
secondo i-frames (e quindi a ridurne la qualità) della
percentuale indicata in "I-frame bitrate reduction
%". I valori
consigliati sono 10-15
per "below i-frame
distance..." e 20-30%
per "I-frame bitrate
reduction %" (per quest'ultimo parametro, valori più
elevati sono preferibili in situazioni di basso
bitrate).
Curve
compression I parametri seguenti controllano
come vengono distribuiti i bit ai singoli fotogrammi dalla
curva di compressione. Un metodo di compressione a bitrate
variabile "puro" assegna il bitrate in base alla complessità
dell'immagine; le immagini più complesse ovvero le scene con
un'elevata quantità di movimento, riceveranno una maggior
quantità di bit, quelle più statiche e quindi meno complesse,
una quantità minore. Regolando i parametri "High / Low bitrate scenes %"
è possibile regolare la distribuzione del bitrate rendendola
più "uniforme". Da un punto di vista pratico, scene con una
grande quantità di movimento risultano più complesse da
codificare e richiedono una quantità maggiore di bit (High bitrate scenes); al
contrario scene statiche richiedono una quantità decisamente
inferiore di bit (Low bitrate
scenes).
High / Low
bitrate scenes %: impostando entrambi questi valori a
0, non viene applicata nessuna ridistribuzione del bitrate,
che viene semplicemente allocato in base alla complessità
delle scene (tipico di un metodo di codifica VBR puro).
Tenendo conto della bassa sensibilità con cui il nostro occhio
percepisce i dettagli nelle scene in rapido movimento rispetto
a quelle statiche, nonchè della scarsa sensibilità alle alte
frequenze video (vedi
qui), potrebbe essere preferibile riallocare alle scene
statiche, un pò del bitrate riservato alle scene in rapido
movimento. Il parametro in "high bitrate scenes
%" indica la percentuale di cui deve essere
ridotto il bitrate allocato ai fotogrammi che risultano avere
una dimensione decisamente superiore al valore medio: più alto
è questo valore, maggiore è il numero di bit che vengono tolti
a queste scene e ridistribuiti alle altre; specifica la
percentuale di bitrate che verrà presa dai frames più grandi
della media per essere redistribuito. Il parametro in "low bitrate scenes %" indica
invece di quale percentuale dovrà essere incrementato il
bitrate assegnato ai fotogrammi che risultano avere una
dimensione inferiore alla dimensione media. Valori
consigliati: 0 / 0
per disabilitare
la ridistribuzione dei bit (consigliato da Koepi e
necessario se volete una linear curve compression
pura). Se desiderate invece utilizzare questa
opzione, sono consigliati i valori (High / Low) 20 / 12
per film
d'azione, con un'elevato numero di scene in rapido
movimento, ed i valori 25 / 10
per film
più statici.
Bitrate payback delay
(frames) ("dilazione del risarcimento del
bitrate"): questo campo indica il numero di fotogrammi
che vengono interessati nella redistribuzione in tutti i casi
in cui si fosse verificato un sotto utilizzo od un abuso di
bit (ridistribuzione calcolata in base ai 2 parametri
precedenti). E' possibile disabilitare l'opzione inserendo il
valore 1; penso comunque che lasciare il valore di default di
250 sia più consigliabile.
Payback with
bias: ridistribuisce i bit tra il range di fotogrammi
individuato in payback delay, non in maniera proporzionale
alla dimensione dei fotogrammi, quanto piuttosto tende a
favorire i piccoli fotogrammi (aumenta la qualità dei
fotogrammi piccoli, che teoricamente potrebbero avere una
qualità inferiore). Payback
proportionally: ridistribuisce i bit proporzionalmente
alla dimensione del fotogramma, ovvero i fotogrammi più grandi
ricevono più bit, quelli più piccoli meno. In sintesi il
metodo "proportionally" (proporzionale) distribuisce i bit in
più a tutti i fotogrammi in base alle dimensioni, ovvero ogni
fotogramma riceve un numero di bit dato da una percentuale
delle sue dimensioni (i fotogrammi più grandi riceveranno
quindi un numero di bit superiore in termini assoluti) e la
percentuale è la stessa per tutti i fotogrammi; il metodo
"bias" tende invece a favorire i piccoli fotogrammi e potrebbe
essere indicato nelle situazioni di alto bitrate, per
aumentare la qualità dei quei fotogrammi che sono stati
comunque compressi molto. (3) Non ci sarebbe
comunque da stupirsi se non si riuscisse a notare alcuna
differenza qualitativa nel video finale utilizzando un metodo
piuttosto che l'altro.
Gli altri parametri,
Hinted ME, e
soprattutto "1st pass
stats",non
vanno
modificati.
|
|
Scheda
"Alt. (Alternative) Curve" |
Use
Alternative curve system: come
già accennato viene consigliato di disabilitare l'"Alternative curve system".
Tuttavia, sebbene non utilizzati, ho deciso comunque di
fornire una piccola descrizione della funzione dei vari
parametri (ovviamente i parametri non risultano selezionabili,
se disabilitate l'opzione). L'idea dell'Alternative Curve consiste
principalmente nel tentare di ridistribuire in modo più "equo"
il bitrate, almeno questo in teoria. La sua implementazione e
configurazione corretta è piuttosto complessa, soprattutto se
paragonata ad una curva di compressione lineare che invece non
ridistribuisce in alcun modo il bitrate.
Curve
agression: questo valore modifica l'aggressività con cui verrà
ridistribuito il bitrate. Un'elevata curva di aggressione
(High)
aiuterà il codec a trattare i fotogrammi a basso bitrate,
mentre nuocerà alle scene ad alto bitrate, ed è l'ideale per scene altamente
dinamiche (ad esempio scene lente seguite
improvvisamente da scene in rapido movimento). Una bassa curva
di aggressione (Low)
si adatta più lentamente alle variazioni di bitrate e non
migliora le scene a basso bitrate, ma non danneggerà le scene
in rapido movimento. Una curva a media aggressione (Medium)
è una via di mezzo tra le due. (11)
High distance
from average %: specifica la dimensione di quel
fotogramma per cui verranno applicati i parametri di qualità
minima relativa ("Minimum
relative quality %"), dimensione che si ottiene dalla
percentuale qui indicata della dimensione media dei
fotogrammi. Aumentando
questo valore si tende a favorire i fotogrammi ad alto
bitrate. Low distance
from average %: specifica la dimensione di quel
fotogramma per cui verranno applicati i parametri di massima
qualità, dimensione che si ottiene dalla percentuale qui
indicata della dimensione media dei fotogrammi. Abbassando questo valore si
tendono a favorire i fotogrammi a basso bitrate. Valori
consigliati, in base alle esperienze maturare nel forum
di Doom9: "Low
distance..." < 100 e "High
distance..." tra 150 e 200. (11)
Enable
automatic minimum relative quality: quando attivata,
non è più possibile impostare "Minimum relative quality %",
ma la minima qualità relativa viene calcolata automaticamente
in base al parametro Strenght
%: che relaziona la qualità minima in base alle
dimensioni finali del video ovvero al bitrate disponibile.
Tale parametro percentuale indica quanta influenza ha la
scelta di un basso bitrate (inteso come bitrate disponibile,
in base alle dimensioni finali che si desiderano per il file
video) sulla minima qualità accettabile (più elevato è il
parametro, più bassa sarà la minima qualità accettabile nel
caso di bassi bitrate). Tale
parametro influenza notevolmente la qualità del video;
il valore
standard di 50 si è comunque visto fornine un'ottima qualità
in tutto il film.(11)
Minimum relative
quality %: la minima qualità prodotta non può essere
inferiore alla percentuale qui indicata della massima qualità
prodotta, ovvero il parametro limita in percentuale la
differenza che vi può essere tra la miglior qualità possibile
e la peggiore (nel tentativo di rendere più uniforme e
costante la qualità, forse...). Non sono stato in grado di
reperire informazioni maggiori in merito. Lasciate il valore
di default (50).
Enable automatic
bonus bias calculation: calcola automaticamente il
bonus di bitrate da assegnare con il metodo pesato
(bias).
Manually set
bonus bias: è qui possibile indicare la percentuale del
bonus di bitrate (ovvero di bitrate da ridistribuire) che deve
essere riassegnata con il metodo pesato (bias) che andrà a
favorire i piccoli fotogrammi. Il resto del bitrate sarà
invece riassegnato in modo proporzionale. Più elevato questo
valore, più si tende a favorire le scene a basso bitrate,
ovvero quelle più statiche.
Max bitrate
(Kilobit/s): l'opzione non va modificata rispetto a
quanto impostato nel primo passaggio.
Max overflow
improvement % - Max overflow
degradation %: come sopra, non modificate questa
opzione rispetto a quanto visto nel primo
passaggio.
|
| Le
altre scede non necessitano di nessuna modifica. Cliccate quindi su OK fino a ritornare alla finestra
principale del vostro software di conversione.
E con questo è tutto...
(That's all
folks!)
Appendice A - I
"difetti" dovuti ad una cattiva compressione video |
Se il video è ben compresso
(ovvero è stato usato un bitrate sufficientemente elevato per ogni
situazione), generalmente potrebbe essere difficile distinguerlo
dall'originale non compresso o compresso in altri formati ad elevata
qualità. Ad esempio, è possibile ridurre di circa 1/3 le dimensioni
di un video in formato MPEG2 (es. un DVD) convertendolo in MPEG4
(Xvid o DivX) e non essere in grado di notare (se non ad una più
attenta analisi) una sostanziale differenza. Talvolta però se il
bitrate non è sufficientemente elevato e se non si è configurato
propriamente l'encoder, si possono presentare alcuni difetti tipici
della compressione Mpeg e non dovuti magari ad un baco (bug)
dell'encoder stesso. I più evidenti sono due e vengono generalmente
indicati con il nome di "blocking-artifact" e "mosquito-noise".

|

|
Un
esempio di "blocking-artifacts" del video dovuta ad un bitrate
non adeguato (troppo basso)
|
Un
esempio di "mosquito-noise" attorno alle parole (indicato
dalle frecce), anche qui causato da un bitrate
inadeguato
| Il "blocking-artifacts" o "blocchettizzazione" o "quadrettatura" che dir si voglia,
è causato da una eccessiva compressione del fotogramma, cosa che
consente l'individuazione dei blocchi in cui è stata suddivisa
l'immagine ai fini della compressione prima dell'utilizzo della DCT
(maggiori
dettagli). Il fenomeno è causato da una non perfetta
corrispondenza tra i diversi blocchi a causa di un numero troppo
elevato di informazioni che sono state "eliminate" al momento della
quantizzazione della matrice delle frequenze DCT (maggiori
dettagli). Il "mosquito-noise" detto anche "ringing" si presenta invece come
un alone di disturbo, rumore accanto agli oggetti che presentano una
netto contrasto con lo sfondo. Le immagini qui sopra aiutano a
chiarire i due concetti ed illustrano i due più tipici difetti
causati da un compressione eccessiva basata sugli algoritmi Discrete
Cosine Transform, ovvero da un bitrate non adeguato alla
situazione. Due sono i metodi per eliminare questi difetti:
- in fase di compressione, aumentando il bitrate disponibile
(aumentando quindi le dimensioni del video);
- in fase di postprocessing, utilizzando dei filtri di
"deringing" e "deblocking". Quest'ultimo metodo è comunque
consigliato solo se risulta davvero impossibile aumentare le
dimensioni del video e se la qualità è un fattore trascurabile
(es. streaming video).
Se il problema dovesse presentarsi
su di un video compresso in modalità "1 Pass - CBR" consiglio anzitutto
di provare a effettuare nuovamente la compressione questa volta
utilizzando una modalità a due passaggi lasciando inalterate le
dimensioni del file; se il problema dovesse ripresentarsi anche con
l'utilizzo di una modalità 2
Pass, allora sarà necessario aumentare il bitrate (ovvero le
dimensioni del file video ed eventualmente il numero di supporti, es
CD-R, in cui salvare il filmato).
|
Appendice B - Undersize (video
sottodimensionato) e problemi simili.
|
Quanto qui descritto si
riferisce alla sola modalità di compressione in due passaggi (2 Pass - ...).
Undersize Per
quel che riguarda la dimensione finale desiderata, come ho avuto io
stesso modo di sperimentare, in taluni casi si può ottiene un file
più piccolo di quanto richiesto ("undersize", sottodimensionato). In
un caso, ad esempio, sebbene avessi impostato una dimensione di
1275MB, il file al termine della conversione, non superava i 900MB.
Motivo? Qualcuno aveva inizialmente parlato di un bug nel codec
quando vengono attivate alcune funzioni avanzate (Qpel, B-Frames
etc...), ma in realtà non è così. Il fenomeno è dovuto al fatto che,
con i parametri scelti, il codec riesce tranquillamente ad
utilizzare la massima qualità possibile rimanendo al di sotto del
massimo bitrate disponibile. In pratica il film risulta ottimamente
comprimibile, il bitrate va in saturazione, e si ottiene un file più
piccolo del rischiesto. Possibili soluzioni sono quelle di aumentare
la risoluzione del video, ad esempio mantenendo la risoluzione
originale di 720 pixel di larghezza, senza ridimensionare a 640, e/o
utilizzare dei valori più bassi nei vari quantizer (lasciando
invariato 2 come "Min ...quantizer", provate ad abbassare "Max... quantizer" e/o abbassate
"Maximum / Minimum I-frame
interval", qualcosa tipo 250/1 invece di, ad esempio, 300/5)
e/o utilizzare 100/100 in
B-frame quantizer Ratio/Offset oppure ancora
disabilitare del tutto l'uso dei B-Frames (Maximum B-frames = -1). Ricordate
tuttavia che se da una parte la cosa può essere fastidiosa (nel caso
abbiate ad esempio fatto tutti i conti con l'audio, per sfruttare
appieno i 2 CD) dall'altro potrete ricomprimere l'audio ad una
qualità nettamente superiore od in alternativa inserire anche una
seconda traccia audio. Non necessariamente infatti un file di
dimensioni inferiori significa che avrete un video di qualità
inferiore, dato che il codec avrà comunque utilizzato la massima
qualità possibile in base ai parametri che gli avevate assegnato.
Nel caso che, oltre ad un file sottodimensionato, il video
risulti anche di scadente qualità, assicuratevi di non aver usato
una versione dell'encoder video con qualche baco (se è una versione
non ufficiale, la possibilità non è del tutto da scartare), e
provate a ripetere il tutto installando una differente versione del
codec Xvid.
Oversize Problemi
opposti, ovvero video sovradimensionato rispetto a quanto richiesto,
sono in genere causati da un errore di implementazione della curva
di compressione. Non mi è mai capitato di incontrare un simile
problema usando la curva di compressione interna del codec;
piuttosto può capitare di incorrere in tali errori nel caso si stia
utilizzando un programma esterno per la configurazione del codec. Ho
incontrato tali problemi utilizzando ad esempio Vidomi+Xvid
per la compressione video. Soluzioni sono quelle di provare con una
differente versione del codec o se il problema non si risolve,
utilizzare un differente programma o se possibile, la curva di
compressione interna al codec stesso. |
Appendice C - PNSR (Peak Signal Noise
Ratio)
|
Per la valutazione della qualità
di un video compresso ci si basa generalmente su di un giudizio
soggettivo, per così dire "ad occhio", e si formula un giudizio
basandosi ad esempio su di una scala come quella illustrata qui di
seguito:
Punteggio
|
Scala
della qualità
|
Scala
della presenza di artefatti e disturbi
|
5
|
Eccellente
/ Ottima
|
Impercettibili
|
4
|
Buona
|
Appena
percettibili ma non fastidiosi
|
3
|
Sufficiente
/ Discreta
|
Percettibili
e leggermente fastidiosi
|
2
|
Non
sufficiente
|
Fastidiosi
|
1
|
Pessima,
del tutto insufficiente
|
Molto
fastidiosi
|
Tuttavia è possibile
valutare anche numericamente (matematicamente) la qualità di un
video o di un'immagine compressa con un metodo di compressione lossy
misurando la distorsione introdotta tra l'originale e la copia
compressa. Tra i metodi più utilizzati, vi è il calcolo del PSNR,
ovvero Peak Signal-to-Noise
Ratio, la cui espressione matematica è la seguente:
L'unità
di misura è il decibel (dB) cosa che ci si poteva aspettare se si
tiene conto che il PSNR si calcola sostanzialmente come un rapporto
segnale / rumore, dove per il segnale si usa una stima di massima
considerando l'immagine completamente bianca (valore 255), mentre il
rumore viene calcolato come varianza (sigma2) dell'immagine errore (|X-Y|), immagine che si
ottiene effettuando la differenza pixel a pixel tra l'immagine non
compressa (X) e l'immagine compressa e successivamente decompressa
(Y). Il perchè il valore 255 corrisponda al bianco è presto
detto: anzitutto si deve tener conto che il PSNR confronta solo le
componenti della luminanza delle due immagini (la componente Y),
mentre non vengono confrontate le componenti dei colori (Cr e Cb).
Ora, dato che il video è codificato nel sistema YUV
4:1:1, dove la componente Y utilizza una risoluzione di 8 bit
per pixel, ricordando che il maggior numero decimale rappresentabile
con un numero n di bit è dato dalla formula Max =
2n-1 (nel
nostro caso 28-1 = 255), al valore 0 corrisponde il nero,
mentre al valore 255 il bianco (e tutti i valori intermedi sono
diverse tonalità di grigio). Per quel che riguarda il
denominatore, è necessario un piccolo ripasso di statistica con due
definizioni:
| Media di n valori x1, x2,..., xn: |
 |
| Varianza di n valori x1, x2,..., xn: |
 | Applicando
il tutto al nostro caso, ovvero all'immagine errore, dove ogni pixel
ha coordinate |x(i,j) -
y(i,j)| e sommando su tutti i pixel, si ottiene:
 dove
l'immagine ha una risoluzione di Larghezza x Altezza (L x A) pixel,
ogni pixel ha coordinate
(i,j), con i = 1...L,
j = 1...A, x(i,j) è il valore del pixel
nell'immagine originale non compressa y(i,j) è il valore del medesimo
pixel nell'immagine compressa e dove è il valore medio dei pixel dell'immagine
differenza Chiuso con la teoria, al lato pratico
il PSNR tipicamente assume valori compresi tra 20 e 50 dB (con due
cifre decimali significative del tipo 43,54 dB) e valori più
elevanti testimoniano un qualità superiore ovvero una maggior
fedeltà con l'originale non compresso. La seguente immagine aiuta a
farsi un'idea del rapporto tra esistente tra valore del PSNR,
bitrate e qualità soggettiva percettibile:
E'
necessario sottolineare che piccole variazioni del PSNR, dell'ordine
di 1-2 dB, difficilmente saranno evidenziabili con un giudizio
soggettivo e che sebbene utilizzato universalmente per la
valutazione della qualità di un'immagine, il PSNR è in grado di dire
relativamente poco sulla gravità di alcuni difetti di compressione
quali la "blocchettizzazione" ed il "ringing". Per maggiori dettagli
e per una procedura pratica su come effettuare un test per il
calcolo del PSNR, consiglio di leggere l'ottima guida scritta da
Kaiousama dal titolo "Guide To PSNR
Computation Via Avisynth" e che dovreste trovare al seguente
indirizzo: http://www31.brinkster.com/kaiousama/video_main.htm
(nel caso il link fosse cambiato, provate a ricercare in rete
l'homepage dell'autore); la guida richiede l'uso di AviSynth in
combinazione con Virtualdub. Un'altro piccolo software (funziona
da riga di comando) piuttosto comodo e che permette il confronto in
PSNR tra due file video con estensione avi, è PSNR4avi che
potete trovare a questo indirizzo: http://vsofts.com/codec/codec_psnr.html. Potrebbe
ad esempio essere utilizzato per il calcolo del PSNR tra il video
codificato con quantizer costanti uguali a 2 (primo passaggio) ed il
file video risultante al termine del secondo passaggio.
Fonti:
Prove
sperimentali sulla compressione lossy, tesi dall'università di
Milano. Rimozione di Blocking-Artifacts da immagini codificate
con DCT, di Andrea Coslovich e Daniele Palazzolo Guide To PSNR Computation Via Avisynth,
Kaiousama Digital Signal Coding, Prof.dr.ir. Inald
Lagendijk
|
Appendice D -
Rate-Distortion |
La
teoria Dal punto di vista teorico, la teoria del Rate-Distortion (banda,
bitrate - distorsione) è un branca delle teoria dell'informazione
che si occupa del problema di determinare il minimo livello di
informazione che può essere trasmessa o mantenuta, affinchè il
segnale originale possa essere ricostruito con un livello di
distorsione non superiore ad un determinato valore. In tal
senso quindi tale teoria fornisce un limite teorico al livello di
compressione ottenibile usando dei metodi di compressione con
perdita di informazione (lossy).
Molte delle tecniche di compressione esistenti per la musica, il
video, la voce, le immagini ecc... utilizzano al loro interno
procedure di trasformate (es. DCT), quantizzazione e allocazione del
bit-rate che derivano dalla forma generale delle funzioni sulla
teoria che lega la banda disponibile (bitrate od in generale rate)
ed il livello di distorsione ottenuto. Il termine "rate" viene generalmente
accomunato al numero di bits per campione di dati che devono essere
trasmessi od archiviati. Il concetto di "distortion" invece richiede una
discussione un pò più ampia. Nel caso più semplice (che fortunamente
coincide con la maggior parte dei casi), si definisce distorsione la
discordanza, differenza, tra il segnale in entrata "I" (l'originale)
e quello in uscita "O" (il segnale compresso e quindi decompresso)
ed è possibile ad esempio quantificarlo matematicamente tramite
l'errore quadratico medio (Mean Square Error, MSE) della
differenza:
 |
L = largezza in pixel
dell'immagine A = altezza in pixel dell'immagine I(x,y)
= valore del pixel dell'immagine originale O(x,y) = valore
del pixel dell'immagine
compressa
| Tuttavia, dato
che la maggior parte delle tecniche di compressione "lossy"
operano su dati che hanno a che fare con il sistema sensoriale umano
(ascoltare della musica, vedere un'immagine od un video), la misura
della distorsione dovrebbe rendere conto anche di alcuni aspetti di
quest'ultimo. Nella compressione audio, modelli percettivi
sensoriali, ovvero misure percettive della distorsione, sono
ampiamente sviluppati e largamente utilizzati in algoritmi di
compressione quali l'mp3, ma spesso non è così semplice incorporarli
nei modelli pratici. Nella compressione delle immagini e del video,
i modelli sensoriali umani sono invece meno sviluppati e la loro
applicazione è per lo più ristretta alla scelta dei coefficenti
delle matrici di quantizzazione e di normalizzazione nelle
compressioni JPEG ed MPEG. Tralasciando ora la parte più stretta
di analisi matematica che richiederebbe una certa conoscenza di base
(e che non ho tempo ne spazio a sufficienza per spiegarvi, anche
perchè mi costringerebbe ad un ripasso accelerato di statistica ed
analisi 2 ;-), veniamo al succo della questione e riassumiamo il
problema:
- si deve minimizzare il tasso (rate) di informazione necessario
per trasmettere, riprodurre, il nostro video, ovvero nel nostro
caso minimizzre il bitrate, in modo tale che mediamente la
differenza, distorsione, tra l'originale non compresso ed il video
compresso (e poi decompresso) non superi un determinato valore o
tasso di distorsione D;
- un tasso D = 0 significa che l'immagine compressa e
decompressa sono identiche ed ovviamente non si verificherà mai
nelle situazioni di compressione lossy;
- si desidera quindi che l'originale e il corrispettivo
compresso differiscano in termini di distorsione a meno di un
valore D (<D);
- la teoria della Rate-Distortion mi fornisce una funzione R(D)
che lega la distorsione D al bitrate utilizzato e trova il minimo
livello di distorsione teorico che è possibile ottenere ad un
determinato bitrate, ovvero esiste un limite inferiore per D sotto
il quale non è possibile scendere, e tale limite è dato dalla
teoria;
- nessun sistema di compressione può trasmettere le informazioni
con un rapporto rate-distortion R(D) inferiore a quello predetto
dalla teoria (vedi figura più sotto);
- l'obiettivo dell'algoritmo di compressione o dell'encoder
video che dir si voglia è avvicinarsi il più possibile al valore
teorico del R(D);
- la compressione lossy del video è regolata dal valore dei
quantizers ed è proprio sulle
tecniche di quantizzatione e sulla loro implementazione matematica
che si concentrano gli sforzi degli sviluppatori onde trovare quel
metodo che maggiormente consente di avvicinarsi all curva teorica
R(D) (es. "Vector Quantization" piuttosto che "Scalar
Quantization").
 Dal
grafico possiamo ad esempio stabilire che ad un determintato bitrate
R1, il minimo livello di distorsione ottenibile sarà
D1 (si ricordi che minore il livello di distorsione, più
fedele all'originale è il video o l'immagine compressa). Ad un
bitrate più basso R2 < R1, necessariamente
il livello di distorsione non potrà essere inferiore ma dovrà
aumentare, ed il suo valore minimo sarà D2 >
D1.
--------------------------------------------------
Nel
caso del codec Xvid, l'algoritmo funziona a livello dei singoli
macroblocchi in cui viene suddivisa l'immagine, prendendo in
condiderazione un vasto numero di parametri durante la fase della
stima del moto (motion estimation). Per ogni blocco, vengono
considerate la bontà della stima di moto in termini di precisione
sull'individuazione del blocco corrispettivo nel fotogramma
adiacente, il numero di bit inpiegati per memorizzare tale scenario
e la qualità finale del blocco stesso. In base a tutti questi
criteri, il codec decide se utilizzare o meno lo scenario corrente
per la motion estimation (ME). La teoria del livello di distorsione
interviene nella scelta dello scenario per limitare il degrado
qualitativo entro un valore stabilito; potrebbero presentarsi
situazioni in cui spendendo qualche bit in più si ottiene un livello
qualitativo nontevolmente più alto rispetto alla situazione con
bitrate più basso in assoluto. Si vuole quindi basare la scelta non
solo sul bitrate utilizzato, ma anche sulla qualità ottenibile ed è
per questo che l'algoritmo sceglie non solo in base al numero di bit
risparmiati ma anche in base al livello di distortione
introdotto.
Fonti: Rate
distortion theory, Wikipedia, the free encyclopedia Digital Signal Coding, Prof.dr.ir. Inald
Lagendijk Doom9's Xvid Forum
|
Appendice E - Schema dei
parametri di conversione |
Qui di seguito alcuni schemi
riassuntivi per i parametri di configurazione del codec.
Modalità
di compressione a 2 passaggi: miglior qualità possibile, a scapito
di un maggior tempo di codifica
Primo
passaggio
|
Secondo
passaggio
|
Encoding
Mode: 2
Pass - 1st pass Scheda Global: Motion
Search Precision: 6 - Ultra
High Quantization Type: MPEG /
H.263 FourCC Used: XVID
VHQ Mode: da "1-Mode
Decision" a "4-Wide Search" solo con H.263 (rallenta di molto
la velocità di codifica) Max I-frame Interval: 250, Min
I-frame Interval: 1
Lumimasking: OFF
Interlacing: OFF / ON (a
seconda delle necessità) Greyscale: OFF / ON (a
seconda delle necessità) Quarterpel: OFF / ON
(rallenta di molto la velocità di codifica) Global
Motion Compensation: OFF Chroma
Motion: ON
Max B-frames: da 1 a 2
B-frames Quantizer Ratio(%): da 100% a
150% B-frames Quantizer Offset: 100 B-frame
threshold: 0 (da
testare) Packed bittream: OFF DX50
B-VOB compatibility: ON Print
debug info on each frame: OFF Scheda Two Pass Discard
First Pass: ON Hinted
Motion Estimation: OFF Scheda Credits: Start
Credits: ON/OFF (a
seconda delle necessità) End Credits: ON/OFF (a
seconda delle necessità) Scheda
Debug: Automatically detect optimizations: ON /
OFF Chroma Optimizer: OFF/ON (da
testare) Use trellis R-D quantisation: OFF (da
testare) Frame drop ratio: 0
|
Encoding
Mode: 2
Pass - 2nd pass Desired size (Kbytes): a seconda delle
necessità Scheda
Global: Motion Search Precision: Come 1°
passaggio Quantization Type: Come 1°
passaggio FourCC Used: Come 1°
passaggio VHQ Mode: Come 1°
passaggio Max I-frame Interval / Min I-frame
Interval: Come 1°
passaggio Lumimasking: Come 1°
passaggio Interlacing: Come 1°
passaggio Greyscale: Come 1°
passaggio Quarterpel: Come 1°
passaggio Global Motion Compensation: Come 1°
passaggio Chroma Motion: Come 1°
passaggio Max B-frames: Come 1°
passaggio B-frame Quantizer Ratio(%): Come 1°
passaggio B-frame Quantizer Offset: Come 1*
passaggio B-frame threshold: Come 1°
passaggio Packed bittream: Come 1°
passaggio DX50 B-VOB compatibility: Come 1°
passaggio Print debug info on each frame: OFF Scheda Quantization Min
I-frame Quantizer: 2, Max
I-frame Quantizer: 6
Min P-frame Quantizer: 2, Max
P-frame Quantizer: 16
Scheda Two
Pass I-frame Boost %: 0 Discard
First Pass: ON Dummy
2nd Pass: OFF Below
I-frame Distance: 10%-15% I-frame
Bitrate Reduction: 20%-30% High
Bitrate Scenes: 0% Low
Bitrate Scenes: 0% Bitrate
payback delay (frames): 250 Payback
with bias: ON Payback
proportionally: OFF
Hinted ME (Motion Estimation): Come 1*
passaggio Scheda
Alt. Curve: Use Alternative Curve System: OFF Max
Bitrate (Kilobit/sec): 10000
(default) Max overflow improvement %: 60
(default) Max overflow degradation %: 60
(default) Scheda
Credits: Tutto come nel
primo passaggio Scheda
Debug: Automatically detect optimizations: ON /
OFF Chroma Optimizer: Come 1°
passaggio Use trellis R-D quantisation:Come 1°
passaggio Frame drop ratio: Come 1°
passaggio |
Modalità
di compressione 1 Pass - quantizer: miglior qualità possibile, a
scapito di un maggior tempo di codifica
Unico
passaggio
|
Encoding
Mode: 1
Pass - quantizer Quantizer: 2 Scheda Global: Motion
Search Precision: 6 - Ultra
High Quantization Type: MPEG /
H.263 FourCC Used: XVID
VHQ Mode: da "1-Mode
Decision" a "4-Wide Search" solo con H.263 (rallenta di molto
la velocità di codifica) Max I-frame Interval: 250, Min
I-frame Interval: 1
Lumimasking: OFF
Interlacing: OFF / ON (a
seconda delle necessità) Greyscale: OFF / ON (a
seconda delle necessità) Quarterpel: ON / OFF
(rallenta molto la velocità di codifica) Global
Motion Compensation: OFF Chroma
Motion: ON
Max B-frames: da 1 a 2
o -1
(disabilitati) B-frames Quantizer Ratio(%): da 100% a
150% B-frames Quantizer Offset: 100 B-frame
threshold: 0 (da
testare) Packed bittream: OFF DX50
B-VOB compatibility: ON Print
debug info on each frame: OFF Scheda Alt. Curve: Max
Bitrate (Kilobit/sec): 10000
(default) Max overflow improvement %: 60
(default) Max overflow degradation %: 60
(default) Scheda
Credits: Start Credits: ON/OFF (a
seconda delle necessità) End Credits: ON/OFF (a
seconda delle necessità) Scheda
Debug: Automatically detect optimizations: ON /
OFF Chroma Optimizer: OFF/ON (da
testare) Use trellis R-D quantisation: OFF (da
testare) Frame drop ratio: 0
| Cattura
di un video, elevata velocità e bassa precisione: compressione 1
Pass - CBR (il video catturato deve essere successivamente
ricompresso)
Unico
passaggio
|
Il bitrate da
usare, dipende dalla risoluzione a cui catturate; consiglio un
rapporto bit/pixel di 0,8 per garantire una buona qualità in
tutte le situzioni (tale valore è puramente empirico e
semplicemente si è dimostrato sufficiente e forse anche
eccessivo, nella gran parte dei casi; il valore è comunque
molto sensibile alla qualità ed al tipo di video; ad es. un
video di pessima qualità con molto rumore di fondo, potrebbe
richiedere un valore più elevato). Per calcolare il bitrate,
partendo dalla risoluzione, utilizzate la seguente formula:
(*) Bitrate in Kilobit/sec = [(Ris_Oriz_in_Pixel *
Ris_Vert_in_Pixel) * Num_Fotogrammi_Sec *
Rapporto_Bit_per_pixel] / 1000
dove: Il
risultato è inteso in Kilobit/sec dove 1 Kilobit = 1000
Bit Num_Fotogrammi_Sec = 25 per sistemi
PAL Rapporto_Bit_per_pixel >= 1
Ad esempio se
catturate ad una risoluzione di 320x240, dovrebbe essere
sufficiente un bitrate di: Bitrate = (320 * 240) * 25 *
0,8 / 1000 = 1536 Catturando ad una risoluzione di
640x480, dovrebbe essere sufficiente un bitrate di: Bitrate =
(640 * 480) * 25 * 0,8 / 1000 = 6144
---------------------------------------------------
Encoding
Mode: 1
Pass - CBR Bitrate: Bitrate in
Kilobit/sec(*) Scheda Global: Motion
Search Precision: da 0 -
None a 1 - Very Low Quantization Type: MPEG /
H.263 FourCC Used: XVID
VHQ Mode: 0 -
Off Max I-frame Interval: 250, Min
I-frame Interval: 1
Lumimasking: OFF
Interlacing: OFF / ON (a
seconda delle necessità) Greyscale: OFF / ON (a
seconda delle necessità) Quarterpel: OFF Global
Motion Compensation: OFF Chroma
Motion: OFF
Max B-frames: -1
(disabilitati) Packed bittream: OFF DX50
B-VOB compatibility: ON Print
debug info on each frame: OFF Scheda Quantization Min
I-frame Quantizer: 2, Max
I-frame Quantizer: 31
Min P-frame Quantizer: 2, Max
P-frame Quantizer: 31
Scheda Alt.
Curve: Max Bitrate (Kilobit/sec): 10000
(default) Max overflow improvement %: 60
(default) Max overflow degradation %: 60
(default) Scheda
Debug: Automatically detect optimizations: ON /
OFF Chroma Optimizer: OFF Use
trellis R-D quantisation: OFF Frame
drop ratio: 0 Reaction
Delay Factor: 16
(default) Average period: 100
(default) Smoother: 100
(default) | |
...buon
divertimento.
(Rimuovi "_NOSPM" dall'indirizzo email per
contattarmi)
Fonti
|