Vídeo Entrelaçado e Baseado em Campo

Atualmente (v2.5x e versões mais velhas), AviSynth não tem nenhum sinalizador entrelaçado que pode ser usado para vídeo entrelaçado. Há um sinalizador baseado em campo, mas ao contrário do que você poderia esperar, não é relacionado a vídeo entrelaçado. Na realidade, todo vídeo (progressivo ou entrelaçado) é baseado em quadro, a menos que você use o filtro AviSynth para mudar isso. Há dois filtros que torna vídeo baseado em quadro em vídeo baseado em campo: SeparateFields e AssumeFieldBased.

Conversões de Cores e Vídeo Entrelaçado Baseado em Campo

Vamos assumir que você tem um vídeo entrelaçado e quer trabalhar em modo baseado em campo (para aplicar alguns filtros, por exemplo) e também precisa fazer alguma conversão de cor. Você precisa fazer a conversão no clipe baseado em quadro ou você pode fazer isto no clipe baseado em campo? Bem, isso depende da conversão de cor que você quer aplicar:

* Conversões YUY2<->RGB podem ser feitas em qualquer um deles. (Note que neste caso, a colocação interlaced=true/false não faz nada. Simplesmente é ignorada).
* YV12<->YUY2/RGB devem ser feitas conversões no clipe baseado em quadro (fixado interlaced=true). Fazendo no clipe baseado em campo renderão resultados incorretos. A razão exata disto está fora do escopo desta página, mas é uma conseqüência de como o formato de cor YV12 está definido. O assunto principal é que o croma é compartilhado entre píxeis em duas linhas diferentes num quadro. Mais informações de Amostras podem ser achadas aqui.

Os usuários mais experientes devem considerar o seguinte: em geral, vídeo entrelaçado tem partes onde não há nenhum ou pouco movimento. Assim, você não verá efeitos de entrelaçamento (também chamado penteação) nestas partes. Eles podem ser considerados progressivos e ao fazer uma conversão YV12 < - >YUY2/RGB num vídeo progressivo deve usar interlaced=false que fixa melhores resultados. É possível fazer essa conversão em base de quadro, trocando interlaced=true para interlaced=false. Eis como fazer isto (você precisará ter Decomb instalado para poder usar a função IsCombed)

function ConvertHybridToYUY2(clip a, int "threshold", bool "debug")
{
debug = default(debug, false)
global threshold = default(threshold, 20)

b = ConvertToYUY2(a, interlaced=false)
c = ConvertToYUY2(a, interlaced=true)
ConditionalFilter(a, b, c, "IsCombed(threshold)", "equals", "true", show=debug)
}

function ConvertHybridToRGB(clip a, int "threshold", bool "debug")
{
debug = default(debug, false)
global threshold = default(threshold, 20)

b = ConvertToYUY2(a, interlaced=false)
c = ConvertToYUY2(a, interlaced=true)
ConditionalFilter(a, b, c, "IsCombed(threshold)", "equals", "true", show=debug)
}

AviSource("D:\captures\interlaced-clip.avi") # entrelaçado YV12
#ConvertHybridToYUY2(debug=true)
ConvertHybridToYUY2()

Porém, o lado ruim disto é que pode levar [chroma shimmering] (cintilações) nas transições de quadros pentes progressivos. Assim, não é uma solução perfeita.

Conversões de Cores, Vídeo Entrelaçado Baseado em Campo e o Sinalizador Entrelaçado de dvd2avi

Para os usuários mais experientes: Dvd2avi lembra se um quadro é entrelaçado ou progressivo (usando o sinalizador entrelaçado). Em princípio, dvd2avi pode ser modificado para armazenar isto num arquivo de texto e AviSynth pode ler e usá-lo em base de quadro. Mas é inútil. O problema às vezes é que vídeo progressivo está codificado como entrelaçado e assim é detectado como entrelaçado por dvd2avi. Na seção prévia é explicado que nesse caso você deve usar interlaced=false durante a conversão de YV12 < - >YUY2/RGB (desde que não há nenhum movimento) para resultados mais precisos. Assim, é a presença de penteação que é importante para a conversão de YV12 < - >YUY2/RGB e não se um quadro é entrelaçado.

Mudando a ordem dos campos de um clipe

Há um filtro SwapFields que troca os campos iguais/diferentes e um plugin que inverte o domínio de campo [ReverseFieldDominance]. O anterior muda a ordem de espaço e o posterior a ordem temporal.

Trocando Campos:

antes de usar SwapFields:

linha quadro 0
0 t0
1 b1
2 t2
3 b3
4 t4
5 b5

ordem de campo (campo de topo primeiro, depois campo de fundo):

linha campo 0 campo 1
0 t0  
1   b1
2 t2  
3   b3
4 t4  
5   b5

depois de usar SwapFields:

linha quadro 0
0 b1
1 t0
2 b3
3 t2
4 b5
5 t4

ordem de campo (campo de topo primeiro, depois o campo de fundo):

linha campo 0 campo 1
0   b1
1 t0  
2   b3
3 t2  
4   b5
5 t4  

Nota que as linhas iguais e diferentes são trocadas, assim você pode chamar o Campo de Topo como Campo de Fundo e vice-versa.

Invertendo o domínio de campo:

antes de inverter o domínio de campo:

linha quadro 0
0 t0
1 b1
2 t2
3 b3
4 t4
5 b5

ordem de campo (campo de topo primeiro, depois o campo de fundo):

linha campo 0 campo 1
0 t0  
1   b1
2 t2  
3   b3
4 t4  
5   b5

depois de inverter o domínio de campo (assumindo as linhas serão trocados para cima, e a última será duplicada):

linha quadro 0
0 b1
1 t2
2 b3
3 t4
4 b5
5 b5

ordem de campo (campo de fundo primeiro, depois o campo de topo):

linha campo 0 campo 1
0 b1  
1   t2
2 b3  
3   t4
4 b5  
5   b5

Note que os campos do topo e do fundo são trocados, mas as linhas iguais e diferentes não são trocadas.

A paridade (= ordem) dos campos no AviSynth

Se um clipe é baseado em campo AviSynth mantém o rasto da paridade de cada campo (quer dizer, se é o topo ou o campo de fundo de um quadro). Se o clipe é baseado em quadro mantém o rasto do campo dominante em cada quadro (quer dizer, qual campo no quadro vem primeiro, quando eles estiverem separados).

Porém, esta informação não é necessariamente correta, porque geralmente a informação de campo não é armazenada em arquivos de vídeo e os filtros de fonte do AviSynth apenas padronizam normalmente para assumir o primeiro campo do fundo (com a exceção do plugin MPEG2Source que faz isto direito!).

Sobre DV / DVD em relação a domínio de campo

O domínio de campo não é o mesmo para toda fonte. DV (com conteúdo entrelaçado) tem campo de fundo primeiro, enquanto DVD (ou CVD/SVCD) tem campo de topo primeiro. Assim quando converte entre os dois, você precisa mudar o domínio de campo. Isto pode ser feito no AviSynth (veja acima), mas também no próprio encoder (para material bff como metragem de DV, você precisa fixar o sinalizador do primeiro campo Superior). Alguns comentários em outros [methods].

Referências

[DV / DVD and field dominance]
Sobre [field dominance].
[Doom thread] sobre campos trocados e domínio de campo.
[ReverseFieldDominance plugin]

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