ConvertToRGB / ConvertToRGB24 / ConvertToRGB32
ConvertToYUY2 / ConvertBackToYUY2 / ConvertToYV12

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 $