Plugin Decomb para o Avisynth
(Versão 5.2.1)
Tutorial

por Donald A. Graft


Tabela dos Conteúdos


Introdução

Este documento é um tutorial para o Decomb. Fornece um procedimento de livro de receitas de como aplicar corretamente Telecide() e Decimate() ao processar um determinado clipe. Não cobre FieldDeinterlace() já que é muito fácil entender no Manual de Referência Decomb.

Por favor consulte o acompanhado Manual de Referência Decomb para uma descrição detalhada do Decomb e seus parâmetros.


Telecide()

Telecide() recupera quadros progressivos (achando e alinhando campos iguais). Não use Telecide() em fluxos que não contêm quadros telecinados progressivos, como os de vídeos entrelaçados puros.

Passo 1. Determinar e Fixar a Ordem de Campo

É essencial fixar adequadamente a ordem de campo para correta renderização. A ordem de campo é fixada com o parâmetro order  obrigatório. Fixe order=1 para o primeiro campo do topo; fixe order=0 para o primeiro campo de fundo (de baixo). Fixar isto corretamente é muito importante e o encorajo fortemente a não fazer suposições sobre a ordem de campo de um clipe, mas especialmente em verificar a ordem de campo com este procedimento.

Para determinar a ordem de campo, faça um escrito Avisynth que serve o clipe cru, sem qualquer tratamento. Se for um AVI, então só AviSource() é usado. Para nossos exemplos, usaremos AviSource(). Inclua uma linha de escrito para separar os campos com primeiro campo de topo, como a seguir:

AviSource("your_clip.avi")
AssumeTFF().SeparateFields()

Agora sirva o escrito no VirtualDub e ache uma área com movimento. Um passo adiante pelo movimento. Note se os movimentos sempre avançam como deve ser, ou se salta de um lado para outro ao prosseguir. Por exemplo, se a ordem de campo está errada, uma mudança de objeto continuamente da esquerda para direita moveria direito, então volte um pouco para a esquerda e mova para a direita novamente, etc. Se a ordem de campo estiver correta, move-se continuamente para a direita.

Se o movimento está correto com AssumeTFF().SeparateFields(), então sua ordem de campo é primeiro campo de topo e você tem que fixar order=1. Se o movimento estiver incorreto, então sua ordem de campo é primeiro campo de fundo e você tem que fixar order=0. Caso queira reconferir, pode usar AssumeBFF.SeparateFields() para checar a correta operação do primeiro campo de fundo.

Vamos assumir que temos um clipe de primeiro campo de topo nos passos seguintes. Usaríamos a ordem de campo correta para o clipe, claro. Até aqui então, nosso escrito é como segue:

AviSource("your_clip.avi")
Telecide(order=1)

Passo 2. Montar o Guia Padrão se Conveniente

Freqüentemente você sabe, pela natureza de um clipe, qual padrão de telecinagem (se algum) é usado e então qual padrão de campos iguais deveria ser. A característica de orientação padrão Telecide() usa essa informação para comparar melhor o campo. A orientação padrão é controlada pelo parâmetro guide opcional. Tem 4 possíveis valores: guide=0 significa desativar orientação padrão; guide=1 significa usar orientação de pulldown 3:2 (24fps->30fps); guide=2 significa usar orientação 2:2 (PAL); e guide=3 significa usar orientação 3:2:3:2:2 (25fps->30fps).

Primeiro decida se seu clipe fonte é PAL. Se é, e se tiver conteúdo progressivo, você quase pode fixar invariavelmente guide=2 para usar orientação padrão PAL. Claro que, se o seu clipe não tiver conteúdo progressivo, não o ajudará e você não deve usar Telecide(), de modo algum!  Assim para PAL, podemos saltar ao Passo 3 com nosso escrito parecendo com isto:

AviSource("your_clip.avi")
Telecide(order=1,guide=2)

Se tivermos um clipe fonte NTSC 29.97 fps ou 30 fps, as coisas são mais enganadoras. Primeiro temos que determinar se o clipe contém material pulldown 3:2. Há vários testes que podemos aplicar. Primeiro, sirva o clipe cru (nenhum Decomb ou outro processo) ao VirtualDub. Então siga pelos quadros em áreas de movimento. Se você vê um padrão de 3 quadros limpos repetindo-se, seguidos por 2 quadros entrelaçados, são pulldown 3:2. Tipicamente, os filmes de cinema usam pulldown 3:2.

Procurando o padrão 3:2 como descrito acima não é à prova de erro, porque para animações há quadros duplicados que podem fazer com que seja difícil de ver um padrão claro 3:2.

Segundo, você pode servir o escrito seguinte ao VirtualDub e ver que Telecide() informa sobre ele (lembre-se de usar a ordem de campo correta, como determinado acima).

AviSource("your_clip.avi")
Telecide(order=1,guide=1,post=0,show=true)
Sirva no VirtualDub e passe pelas várias seções típicas do clipe. Se Telecide() informa "in-pattern", no padrão, então está fechando sobre pulldown 3:2. Se informa "out-of-pattern", fora do padrão, ou salta continuamente para dentro ou para fora do fechamento padrão, então não está fechando sobre um padrão 3:2 consistente.

Se você determina que seu clipe tem muito conteúdo 3:2, então deve prosseguir e fixar guide=1. Se não há muito conteúdo 3:2, ou tem qualquer dúvida sobre a natureza do clipe, então fixe guide=0. Assumiremos que temos bastante conteúdo 3:2 para os próximos passos. Agora nosso escrito pode estar bem assim:

AviSource("your_clip.avi")
Telecide(order=1,guide=1)

Passo 3. Montar o Processamento Posterior

Postprocessing é o processo pelo qual os quadros que saem do processo de comparar os campos que ainda estão penteados (ou enrugados), podem ser detectados e desentrelaçados. Os modos de postprocessing são controlados pelo parâmetro post: post=0 significa desativar o postprocessing; post=1 significa calcular os pesos, mas não fazer o desentrelace; post=2 significa calcular os pesos e desentrelaçar adequadamente; e post=3 significa calcular os pesos, desentrelaçar adequadamente e mostrar um mapa de movimento de desentrelace dos quadros, que são detectados como penteados. Há também dois modos mais avançados; por favor vá até o manual de referência para os detalhes.

Nós adotaremos um procedimento padrão para montar o postprocessing. Primeiro, habilitaremos os pesos e mostraremos a eles como seguir (note, estamos previamente determinando colocações adiante -- você os usaria onde determinou em order  e guide):

AviSource("your_clip.avi")
Telecide(order=1,guide=1,post=3,vthresh=25,show=true)
Sirva isto ao VirtualDub e toque o clipe examinando os quadros e os valores dos pesos exibidos. O valor que aplica ao quadro como igualado fica entre parênteses e começa com "chosen=", (escolhido), por exemplo, "[chosen=27]". Chamemos de valor vmetric. Qualquer valor vmetric maior de vthresh define a quadro como entrelaçado. Você quer achar o valor de vthresh que distingue corretamente os quadros penteadas de quadros não penteados para seu clipe. Você poderá facilmente identificar as quadros possíveis de serem penteados porque:  a) o valor vmetric será maior que vthresh;  b) o indicador progressivo/entrelaçado dirá entrelaçado; e  c) o quadro terá um mapa de movimento desentrelaçado branco sobreposto nele. Não há como errar!

Seu vthresh escolhido pode não ser perfeito e se não é, você deve errar ao lado da precaução. É melhor ter alguns quadros progressivos que perder alguns penteados.

Vamos supor que nosso valor vthresh que distingue quadros penteados de não penteados seja 30. Agora crie o escrito seguinte com post=2 (baseado em suas prévias colocações determinadas, como sempre):

AviSource("your_clip.avi")
Telecide(order=1,guide=1,post=2,vthresh=30,show=true)
Sirva isso e toque no VirtualDub. Ao passar, verá o avanço dos quadros intactos enquanto que os penteados são desentrelaçados.

Se você não está contente com o desentrelaçado dos quadros penteados e os quer mais severos, pode reduzir o parâmetro de dthresh. Também, se você preferir interpolação para misturar com as áreas penteadas, pode mudar o parâmetro de mistura blend. Recorra ao manual de referência para o uso certo destes parâmetros.

Nosso escrito então está assim:

AviSource("your_clip.avi")
Telecide(order=1,guide=1,post=2,vthresh=30)

Há mais duas coisas importantes para dizer sobre postprocessing antes de prosseguirmos. Primeiro, há uma sutil diferença entre post=2 e post=4 que poderia lhe afetar. O manual de referência descreve as diferenças em detalhes. Fixando post=2 evitará freqüentemente rudes misturas de quadros em mudanças de cenas, mas pode fazer sucessões de vídeos desentrelaçados sacudidos. Fixando post=4 retém a suavidade das seqüências desentrelaçadas, mas pode fazer misturas de quadros em mudanças de cenas.

Segundo, você pode achar que precisa avalores vthresh diferentes para partes diferentes de seu clipe. Nesse caso, use a capacidade de ativação manual de Telecide para especificar valores para gamas de quadros diferentes conforme precisado. Recorra à referência manual para detalhes.

Decimate()

Como um efeito colateral de executar comparação de campo para pulldown 3:2, Telecide() emite quadros duplicados e deixa o clipe em sua taxa de quadros original. Decimate() detecta e remove essas duplicatas e fixa adequadamente a redução da taxa de quadros.

Passo 4. Montar Decimation

Se seu clipe for o PAL, você não precisa decimation (dizimação) e está terminado!

Se seu clipe tiver pulldown 3:2, você precisará dizimar o clipe. Simplesmente inclua uma chamada para Decimate(). Nosso escrito final então se parece assim:

AviSource("your_clip.avi")
Telecide(order=1,guide=1,post=2,vthresh=30)
Decimate()
Uma coisa para ficar atento é que nem sempre você pode querer dizimar material de 30 fps. Por exemplo, se seu clipe é um vídeo entrelaçado progressivo e normal híbrido de 3:2, se você o dizimar, terá porções do vídeo sacudidas. Freqüentemente com tais clipes é melhor deixá-los em sua taxa de quadro original omitindo Decimate().

Refinamentos

Este manual descreveu só os parâmetros e procedimentos básicos, exigidos para dominar rapidamente o Decomb. Há muitos mais parâmetros que você pode usar, para adaptar a situações incomuns e difíceis. Recorra ao Manual de Referência de Decomb para começar a explorar esta funcionalidade adicional.

Aqui é um exemplo de um refinamento, assim você entenderá sobre o que estou falando: Suponha ter uma captura ruidosa não do ar e está tendo fracassos iguais. Você pode acrescentar um pouco de tolerância de ruído extra a Telecide() aumentando o valor do parâmetro nt. Você achará muitas dessas tais jóias preciosas no Manual de Referência. Ele faz grande leitura de banheira.


Copyright © 2003, Donald A. Graft, todos os direitos reservados.

Para atualizações e outros filtros / ferramentas, visite meu web site:
http://neuron2.net/

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