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 [, string "matrix"] [, bool "interlaced"])
ConvertToYV12 (clip [, string "matrix"] [, bool "interlaced"])
ConvertBackToYUY2 (clip [, string "matrix"])

matrix: Padrão não especificado. Controla os coeficientes de cor e fatores de escala usados em conversões RGB - YUV.

interlaced: Padrão false. Usa plano entrelaçado para conversões de croma YV12 - YUY2/RGB.

AviSynth antes da v2.50 pode tratar internamente de dois formatos de cor, RGB e YUY2. A partir da v2.50 AviSynth também pode lidar com um terceiro formato de cor, YV12. Estes filtros se convertem entre si. Se o vídeo já estiver no formato especificado, será passado inalterado. RGB é assumido ao longo deste doc para significar RGBA = RGB32. ConvertToRGB converte para RGB32, a menos que seu clipe seja RGB24. Se você precisa 24-bit RGB por alguma razão, use ConvertToRGB24 explicitamente e ConvertToRGB32 para fazer o contrário.

A sintaxe e a operação de ConvertToRGB24 são idênticas ao ConvertToRGB, exceto que o formato de saída é 24-bit; se a fonte for RGB32, o canal alfa será retirado.

Desde a v2.51/v2.52 está incluído um parâmetro interlaced opcional (interlaced=false é a operação padrão). Quando fixado false é assumido clip progressivo, quando fixado true é assumido que clip é entrelaçado. Esta opção está incluída porque por exemplo (assumindo que clipe é entrelaçado YV12):

SeparateFields(clip)
ConvertToYV12
Weave
é incorretamente amostrada.  Ao invés é melhor usar:
ConvertToYV12(clip, interlaced=true)
Note, que fixando interlaced=true só faz algo se a conversão YV12 < - > YUY2/RGB é pedida, caso contrário simplesmente é ignorada. Mais sobre isto pode ser achado aqui "Color conversions and interlaced / field-based video".

Ao contrário do que se poderia esperar, não há nenhuma forma de converter YUV a RGB. Em AviSynth as duas mais comuns são implementadas: Rec.601 e Rec.709 (nomeadas depois das suas especificações oficiais). Embora não seja correto em todos os casos, o seguinte pode ser na maioria dos casos:

O primeiro (Rec.601) deve ser usado quando sua fonte for DivX/XviD ou uma captura analógica:

ConvertToRGB(clip)

O segundo (Rec.709) deve ser usado quando sua fonte for DVD ou HDTV:

ConvertToRGB(clip, matrix="rec709")

Na v2.56, o oposto também está disponível, que é

ConvertToYUY2(clip, matrix="rec709") ou ConvertToYV12(clip, matrix="rec709")

Na v2.56, matrix="pc.601" (e matrix="pc.709") permite fazer a conversão RGB < - > YUV mantendo a gama luma, assim RGB [0,255] < - > YUV [0,255] (em vez do usual/padrão RGB [0,255] < - > YUV [16,235]).

Todos o filtros de VirtualDub (carregados com LoadVirtualdubPlugin, suportam só entradas RGB32 - veja Plugins).

RGB24, RGB32: As cores são armazenadas como valores de vermelho, verde e azul. Em RGB32 há um canal Alfa extra para opacidade. As dimensões das imagens podem ter qualquer valor.

YUY2: A figura é armazenada como um valor de luma Y e dois valores de cor U, V. Para dois píxeis horizontais há só um valor de croma e dois de luma (dois Y, um U, um V). Então a largura tem que ser um múltiplo de dois.

YV12: Igual a YUY2 mas há só um valor de croma para 4 píxeis (um quadrado 2x2). Ambas as dimensões da imagem têm que ser um múltiplo de dois, se o vídeo é entrelaçado, a altura tem que ser um múltiplo de quatro porque o quadrado 2x2 é tomado de um campo, não de um quadro.

Algumas funções conferem as regras de dimensão, outras sobre os parâmetros e pode haver ainda algumas onde uma distorção de quadro ou um erro acontece.

Trabalhando em YUY2 é mais rápido que em RGB. YV12 é até mais rápido e é o formato MPEG nativo, assim há menos conversões de colorspace.

A conversão de um lado para outro não é sem perdas, então use o mínimo de conversões quanto possível. Se forem necessárias muitas conversões, use ConvertBackToYUY2 para converter a YUY2, se sua fonte já era YUY2. Isto reduzirá colorblurring (cor borrada), mas ainda assim pode haver alguma perda de precisão.

Na maioria dos casos, o filtro de ConvertToRGB não deve ser necessário. Se a saída do Avisynth é no formato YUY2 e uma aplicação espera RGB, o sistema usará o codec YUY2 instalado para fazer a conversão. Porém, se não há nenhum codec YUY2, ou se (como é o caso com codec ATI e algum outro YUY2) o codec converte incorretamente de YUY2 para RGB, você pode usar o filtro do AviSynth para converter.

Huffyuv agirá como o codec de sistema YUY2 se nenhum outro codec está instalado, assim se você instala Huffyuv e desinstala todos os outros codecs YUY2, então você nunca precisará ConvertToRGB.

ConvertToRGB24 e ConvertToRGB32 podem ser usados para forçar AviSynth a usar um método de armazenagem específico para dados RGB. Dados RGB24 são freqüentemente muito mais lentos a processar que dados RGB32, assim se sua fonte for RGB24, você pode obter um ganho de velocidade convertendo para RGB32. Não há nenhuma vantagem conhecida em usar RGB24 exceto que TMPGEnc e VFApi requerem entradas RGB24).

# Há uma leve distorção causada pela conversão entre YUV e RGB.
# Vamos tentar ver isso.
control = ConvertToYUY2()
test = ConvertToYUY2(ConvertToRGB(ConvertToYUY2(ConvertToRGB(control))))
test = ConvertToYUY2(ConvertToRGB(test))
return Subtract(test,control)

$Date: 2006/03/26 18:11:19 $ Portuguese translation by RoLon