Piccolo e letale. Avisynth è un potentissimo strumento di editing audio-video.
|
|
7. GESTIONE DEL COLOREE' risaputo che i colori degli streams MPEG-4 sono un filo più sbiaditi rispetto all'originale.
Oltre che da una caratteristica intrinseca dell'MPEG-4, l'opacità del colore è legata anche al fatto che gli streams MPEG-2 possono usare dei codici colore differenti rispetto a quelli usati dall'MPEG-4.
La correzione è affidata ad un filtro specifico mentre se si vuole dare più vivacità al colore è necessario intervenire manulamente.
7.1. CORREZIONE DEI COEFFICIENTI COLOREColorMatrix serve per
mantenere sullo stream di destinazione la gamma cromatica dello stream d'origine (es. MPEG-2 -> MPEG-4).
Una buona parte degli streams MPEG-2 usa dei coefficienti di colore differenti (Rec.709) rispetto a quelli usati dalle routine di conversione di colore di avisynth o dai decoder XviD/DivX (Rec.601) col risultato che gli XviD/DivX o gli MPEG-2 ottenuti con TMPGEnc/QuEnc presentano un leggero calo di luminosità, o meglio, un colore un pò più sbiadito rispetto al'originale.
Il filtro ricalcola i valori YUV in modo che gli stream in uscita (MPEG-2 o MPEG-4) si vedano correttamente.
ESEMPI:
- Quando si parte da una sorgente XviD/DivX (oppure in fase di capturing) e si vuole codificare in MPEG-2 usando CCE per es., si può usare il seguente scripts (per materiale progressivo):
colorMatrix(clip, mode="Rec.601->Rec.709")
- Per convertire streams YV12/YUY2 in RGB usando i coefficienti Rec.709 (utile per es. nella conversione DVD -> MPEG-2 con TMPGEnc):
ConvertToRGB(clip, matrix="Rec.709")
equivale a:
colorMatrix(clip, mode="Rec.601->Rec.709")
ConvertToRGB()
- Quando si fa una conversione DVD -> MPEG-4:
colorMatrix(clip, mode="Rec.709->Rec.601")
Il filtro inoltre definisce i range di valori per luma e chroma rispettivamente a (16-235) e (16-240) come previsto dallo standard CCIR-601 per quel che riguarda i valori considerati utilizzabili per le TV. E' la stessa cosa, in pratica, che fa anche
limiter()SINTASSI: colorMatrix (clip, string "mode", bool "interlaced", bool "mmx", bool "hints", string "d2v", bool "debug")[/b]
mode (default="Rec.709->Rec.601")mode può assumere i seguenti valori: "Rec.601->Rec.709" o "Rec.709->Rec.601", il cui significato è stato spiegato ampiamente in precedenza.
mode non verrà considerato se
hints vale true
interlaced (default=false)Non c'è bisogno di particolari commenti.
Da utilizzare quando la sorgente è interallacciata.
L'utilizzo ideale sarebbe in combo con
hints. Più avanti si capirà perchè:
Mpeg2source("c:\film.d2v", info=3)colorMatrix(hints=true, interlaced=true)mmx (default=true)A causa dell'arrotondamento, le ottimizzazioni introdotte dall'mmx (presente solo per YV12) non producono risultati fedelissimi. Tali differenze (+-2 sul piano Y e +-1 per UV) possono rientrare disabilitando proprio tali ottimizzazioni, settando il parametro:
mmx=false.
colorMatrix(clip, mode="Rec.601->Rec.709", mmx=false)hints (deafult=false)Le ultime versioni di DGDecode forniscono i dati sul
"colorimetry" in modo che sia più semplice scegliere il
"mode" corretto da usare.
Basta attivare l'anteprima di
DgIndex:
fig. 7.1 Queste informazioni possono essere visualizzate anche così:
Mpeg2source("c:\film.d2v", info=1) (solo dalla versione 1.20 in poi di
DGDecode.dll).
Attivando lo script su un player:
fig. 7.2Normalmente i coefficienti rimangono costanti su tutto lo stream. Quando questo non succede (es. sorgente interallacciata), colorMatrix potrebbe peggiorare la qualità invece di migliorarla. Ponendo
hints=true, si forza il plugin ad usare i coefficienti che vengono fuori dinamicamente dall'azione del
DGDecode.dll (quindi da "
Mpeg2source"):
Mpeg2source("c:\film.d2v", info=3)colorMatrix(hints=true)Notare che in Mpeg2source il parametro
info dev'essere pari a 3 e non ad 1, nel qual caso l'azione di
hints sarebbe nulla. Utilizzare
hints inoltre potrebbe appesantire l'esecuzione di colorMatrix (e rallentare tutto il processo di encoding, alla fine).
d2vSpecificando il file
.2dv, colorMatrix prenderà i coefficienti direttamente da questo file. Utile quando i coefficienti non variano mai nel video (praticamente quasi sempre) e, inutile dirlo, molto più veloce di
hints.
Mpeg2source("c:\film.d2v")colorMatrix(d2v="film.d2v")Se lo script avs e il file .d2v sono in cartelle differenti, in colorMatrix bisogna specificare tutto il path.
debug (default=false)debug=true per visualizzare le informazioni relative agli hints. E' necessaria la
DebugView utility per la loro visualizzazione.
Il
>>>seguente esempio<<< mostra gli effetti di ColorMatrix.
Come si può vedere, questo filtro non corregge i colori ma
solo il modo in cui questi vengono codificati negli stream MPEG-4.
Una correzione sembrerebbe opportuna (il codec usato in questo caso è XviD 1.1 CVS 16102005) ma senza esagerare. C'è il rischio di creare dei contrasti eccessivi e poco naturali rispetto all'originale. Nelle anime viene decisamente meglio.
Anche senza ingrandire le immagini, si nota che nella fig.7.3 i colori sono un pò più sbiaditi. Un ingradimento è fortemente consigliato per apprezzare le differenze.
Ricordo ancora che ColorMatrix corregge solo la gamma cromatica, vale a dire che permette una codifica dei colori più corretta (per dirla breve, senza ColorMatrix si evidenzia un lieve calo di luminosità, una sorta di opacizzazione), ma
non migliora assolutamente il colore, nel qual caso è necessario un intervento differente (Vedi paragrafo 7.2)
CONCLUSIONI: l'informazione sui coefficienti del colore sta nell'header dello stream MPEG-2 visualizzabile come è stato già detto, con le ultime versioni del DGDecode.dll, con Mpeg2source(info=1) oppure guardando la preview di DGIndex oppure ancora aprendo il file d2v con un banale editor di testo. Com'è mostrato nell'esempio su un estratto di un file
d2v, il 2° numero (in grassetto) è il
colorimetry.
Colorimetry:
Se non è presente, il default è dato dai coefficienti Rec.709
Per le conversioni MPEG-2 => MPEG-4,
colorMatrix() oppure
colorMatrix(d2v="c:\film.2dv") vanno bene quasi sempre e migliorano la qualità della codfica.
Prestare attenzione alla versione di DGIndex utilizzata.
La 1.4.3 per es. era viziata da un errore nell'interpretazione del colorimetry, per cui il valore di colorimetry 1 (vedi tabella sopra) veniva interpretato come 5, nel file d2v il famoso 2° numero, in alcuni casi, era un bel 5.
La 1.4.5, attualmente l'ultima release stabile, presente nella nostra sezione download, corregge questo errore.7.2. CORREZIONE DEL COLOREPer restituire brillantezza ai colori di un MPEG-4 ottenuto con DivX/XviD si può:
- agire in postprocessing, regolando i parametri di luminosità e contrasto sul riproduttore.
- usare un filtro che regoli tali parametri direttamente in fase di codifica
Tweak(Hue, Sat, Bright, Cont)Permette di regolare intensità, saturazione, luminosità, contrasto.
- Hue: (da -180.0 a +180.0, default 0.0)
- Sat: (da 0.0 a 10.0, default 1.0)
- Bright: (da -255.0 a +255.0, default 0.0)
- Cont: (da 0.0 a 10.0, default 1.0)
In poche parole:
BANALE.Nella
>>>figura successiva<<< troverete alcune immagini ottenute settando tweak nelle varie modalità
(passare col mouse sulle figure per evidenziare le differenti impostazioni)Il consiglio che posso dare è quello di usare questo filtro con prudenza perchè c'è il rischio di attribuire una cromaticità eccessiva al video che lo renderebbe poco simile all'originale. Ci sono dei casi in cui questo non è vero, nelle anime per es o quando la sorgente è particolarmente rovinata.
Al solito, occorre decidere caso per caso.
PARTE ACap. 1. PremessaCap. 2. Cos'è AvisynthCap. 3. Installazione di AvisynthCap. 4. Primi scriptPARTE BCap. 5. Avisynth: dove il codec non arrivaCap. 6. Telecined, Progressive e InterlacedCap. 7. Gestione del ColoreCap. 8. Ripulire la sorgente videoCap. 9. AnimeCap. 10. Post-Processing e altre peculiarità