ConvertToRGB
(clip [, string "matrix"], bool "interlaced")
ConvertToRGB24
(clip [, string "matrix"], bool "interlaced")
ConvertToRGB32
(clip [, string "matrix"], bool "interlaced")
ConvertToYUY2
(clip, bool "interlaced")
ConvertBackToYUY2
(clip, bool "interlaced")
ConvertToYV12
(clip, bool "interlaced")
AviSynth prima della v2.5 lavorava con 2 formati di colore, RGB e YUY2. A partire
dalla v2.5 AviSynth può lavorare con un terzo formato colore, YV12. Questi filtri
convertono fra loro questi formati. Se il video è già nel formato specificato
, non subirà cambiamenti. (si presuppone che RGB sia RGBA.) ConvertToRGB
converte in RGB32 a meno che il clip sia RGB24. Se per qualche ragione ci fosse
bisogno di RGB 24-bit, si usi in modo esplicito ConvertToRGB24
e ConvertToRGB32
per fare il contrario.
La televisione Standard e quella ad alta definizione usano differenti routine di conversione del colore. Se la sorgente è high definition e si vuole convertire da YUV a RGB si deve usare
ConvertToRGB(clip, "rec709", true) o ConvertToRGB(clip, "rec709", false) # in funzione del fatto che la sorgente sia interlacciata o progressiva
in caso contrario
ConvertToRGB(clip, true) o ConvertToRGB(clip, false) # in funzione del fatto che la sorgente sia interlacciata o progressiva
A partire dalla v2.51/v2.52 è stato aggiunto il parametro optionale
interlaced (interlaced=false
è
il default). Quando impostato a false si assume che il clip sia progressivo,
quando impostato a true si assume che il clip sia interlacciato.
Questa optione è stata aggiuta in quanto (assumendo che il clip sia interlacciato
YV12):
SeparateFields(clip) ConvertToYV12 Weaveè campionato in modo errato. Al suo posto è meglio usare:
ConvertToYV12(clip, interlaced=true)Tutti i filtri di VirtualDub (caricati con
LoadVirtualdubPlugin
,
vedere Plugins) supportano SOLO input RGB32.
RGB24, RGB32: I colori sono memorizzati come valori di red, green e blue. In RGB32 c'è un canale extra "Alpha" per l'opacity. Le dimensioni delle immagini possono assumere qualsiasi valore.
YUY2: L'immagine è memorizzata come un valore Y del luma e 2 valori di colore U, V. Per 2 pixels orizzontali ci sono un solo valore di chroma e due valori di luma (2 Y, 1 U, 1 V). Per questa ragione la larghezza deve essere multipla di 2.
YV12: Stessa cosa di YUY2 ma c'è un solo valore di chroma per 4 pixels (un quadrato 2x2). Entrambe le dimensioni dell'immagine devono essere multiple di 2, se il video è interlacciato l'altezza deve essere un multiplo di 4 perchè il quadrato 2x2 è preso da un field, non da un frame.
Alcune funzioni testano le regole di dimensionamento, alcune arrotondano i parametri, ce ne sono altre che generano una distorsione dell'immagine o un errore.
Lavorare in YUY2 è più veloce che in RGB. YV12 è perfino più veloce edè il formato nativo MPEG, sicchè vi sono meno conversioni di colorspace.
La conversione avanti e indietro non è senza perdite , sicchè si facciano
meno conversioni possibile. Se fossero necessarie conversioni multiple , si
usi ConvertBackToYUY2
per ritornare in YUY2, se il sorgente originario
era YUY2. Questo ridurrà il colorblurring, ma ci sarà comunque una perdita di
precisione.
In molti casi, il filtro ConvertToRGB
non dovrebbe essere necessario.
Se l'output di AviSynth è in formato YUY2 ed una applicazione si aspetta RGB,
il sistema userà per fare la conversione il codec YUY2 installato. Tuttavia,
se non c'è un codec YUY2 installato o se (come nel caso del codec ATI YUY2)
il codec converte da YUY2 in RGB in modo sbagliato, si possono usare al posto
suo i filtri built-in in Avisynth.
Huffyuv
opera come se fosse il solo codec YUY2 installato, sicchè se si installa Huffyuv
e si disinstallano tutti gli altri codec YUY2, non c'è più bisogno di
ConvertToRGB
.
ConvertToRGB24
e ConvertToRGB32
possono essere usati
per costringere AviSynth ad usare un modo specifico per memorizzare dati RGB
. RGB24 è spesso molto più lento di RGB32, sicchè se la
sorgente è RGB24, si può guadagnare in velocità convertendo
in RGB32. Non ci sono vantaggi ad usare RGB24 eccezion fatta per TMPGEnc e VFApi
che richiedono input RGB24).
# C'è una leggera distorsione causata dalla conversione tra YUY2 e RGB. # Vediamo se possiamo trovarla. control = ConvertToYUY2() test = ConvertToYUY2(ConvertToRGB(ConvertToYUY2(ConvertToRGB(control)))) test = ConvertToYUY2(ConvertToRGB(test)) return Subtract(test,control)
$Date: 2004/09/26 19:49:40 $