# Plugin Decomb para Avisynth 2.5
(Versão 5.2.1)
Manual de Referência

## por Donald A. Graft

## Tabela de Conteúdos

- Introdução
- Visão Geral das Funções
- Requisições de Entradas
- Dicas de Velocidade Importantes
- Cenários Típicos
- Notas sobre Comparação de Campos
- Sintaxes Gerais das Funções
- Adaptação de Valores de Parâmetros Padrões
- Cancelando Decisões Decomb
- Sintaxe Detalhada das Funções

- Telecide()

- Parâmetros Freqüentemente Usados
- Parâmetros Avançados

- FieldDeinterlace()
- Decimate()
- IsCombed()

- APÊNDICE A. Telecide() Teoria da Operação
- APÊNDICE B. Relacionamento com Clipes Híbridos
- Agradecimentos

## Introdução

Este pacote de funções de plugin para Avisynth determina os meios para remover artefatos pentes de fluxos progressivos telecinados, fluxos entrelaçados e misturas disso. As funções podem ser combinadas para implementar telecine inverso (IVTC) para NTSC e PAL.

O termo "pente, ou pentear" é usado como um termo geral versus "interlaçar, ou entrelaçar" porque isto é normalmente associado com fluxos não progressivos. O que parece interlaçar artefatos pode ser visto em fluxos progressivos telecinados, assim eu uso o termo "pente" para recorrer a tais artefatos, sem considerar o tipo do fluxo.

O pacote adapta automaticamente a qualquer padrão de telecine/captura e misturas disso, embora se você quiser dizimar o fluxo progressivo recuperado, tem que especificar a relação de dizimação desejada se diferir do padrão 1-em-5 usado para telecinagem NTSC 3:2. Nenhuma das funções introduz um atraso nos fluxos de áudios ou vídeos.

Para muitas aplicações, há poucos parâmetros a fixar, mas os melhores resultados são alcançados com colocação cuidadosa dos parâmetros. Decomb permite que o usuário defina seus próprios parâmetros padrões, se desejar (padrões são os valores assumidos se os parâmetros não são especificados explicitamente).

Muitas das decisões do Decomb podem ser anuladas manualmente como desejadas, usando arquivos de textos. Isto permite aos usuários meticulosos executar a melhor qualidade possível para suas codificações.

Esta é a referência manual para Decomb. Recorra ao Tutorial Decomb para procedimentos amigáveis do usuário para usar o Decomb e o FAQ do Decomb para as respostas às perguntas mais freqüentes.

## Visão Geral das Funções

O pacote consiste nas seguintes funções:

- Telecide(): Recupera quadros progressivos (achando e alinhando campos que se comparam) mas não remove duplicatas resultantes e não muda a taxa de quadros ou sua contagem. Não use Telecide em fluxos que não contêm quadros telecinados progressivas, como vídeo entrelaçado puro. Note que um fluxo de quadros PAL progressivos que são trocados por um campo, exibirão penteação e podem ser considerados como fluxos telecinados com finalidades de recuperação; Telecide controlará esta situação facilmente.

  Por padrão, Telecide roda o postprocessing nos quadros recuperados. Este pós processamento confere cada quadro para ver se é penteado (alguns quadros pentes podem passar pelo processo de comparação de campo [veja abaixo]) e se um quadro é pente, é desentrelaçado, caso contrário não é tocado. O algoritmo de desentrelaçamento é adaptável ao espaço, quer dizer, só as porções de um quadro penteado são desentrelaçadas. Isto significa que o detalhe total é retido nas áreas de quadros estáticos. O algoritmo para distinguir entre quadros pentes e progressivos é efetivo mas não perfeito.

  Para executar telecine inverso, aplique Telecide seguido por Decimate. O apêndice A explica por que este trabalho.

  Telecide suporta um pattern guidance mode (modo de orientação padrão) opcional. Habilitando esta opção permite que o Telecide anule a comparação do campo calculada com sua comparação predita, baseada na recente e futura história do clipe. Um percentual pode ser definido de forma que uma discrepância grande o bastante entre as comparações preditas e calculadas, reajustará o padrão.

- FieldDeinterlace(): Este filtro provê funcionalidade semelhante para a função do pós processamento do Telecide. Você pode usar isto para fluxos entrelaçados puros (quer dizer, os telecinados que não contém quadros progressivos). O nome se refere ao fato de que é usado o campo em modo diferenciar. Não use FieldDeinterlace depois de Telecide, porque a mesma funcionalidade está no Telecide.

  FieldDeinterlace fornece uma opção que lhe permite especificar se todos os quadros serão desentrelaçados ou se só os quadros detectados para serem penteados serão desentrelaçados.

- Decimate(): Dizima 1 quadro em cada N, onde N é um parâmetro e pode variar de 2 a 25. Decimate remove um quadro duplicado em cada grupo de N quadros. As taxas de quadro e conta são ajustadas adequadamente. Decimate suporta corretamente acesso fortuito ao VirtualDub (navegação na linha de tempo).

  Decimate provê vários modos especiais que são úteis ao lidar com material híbrido de filme/vídeo.

- IsCombed(): Este é um filtro útil nos escritos do Avisynth. Permite um escrito para distinguir quadros progressivos versus entrelaçados. É projetado para uso no ConditionalFilter().

## Requisições de Entradas

Telecide requer que a largura de entrada seja um múltiplo de 2. Diferença disto fará Telecide lançar uma exceção.

Não faça resize vertical antes de aplicar Decomb. Decomb precisa ver o espaçamento de linha original para detectar penteação corretamente.

Telecide requer entrada em formato de cor YUY2 ou YV12. A DLL lançada com esta versão de Decomb só trabalhará com a versão 2.5 do Avisynth e além.

É preferível não converter entre YV12 e YUY2 (qualquer modo) antes de usar Decomb. Aplique Decomb no espaço de cor nativo. Tais conversões podem causar artefatos devido a amostra incorreta de croma superior ou inferior.

Para operação YV12, a única versão suportada do "mpeg2dec" é o mpeg2dec3 de MarcFD (versão 0.94 e além). Outras versões podem produzir incorretamente.

## Dicas de Velocidade Importantes

Evite Converter o Espaço de Cor Esteja atento que converter RGB para YUY2 leva muito tempo, assim não salve seus AVIs em RGB. O codec popular HUFYUV tem uma opção para converter RGB para YUY2 e você deve habilitar isso quando gerar AVIs com HUFYUV que é destinado para o processo Decomb.

Não faça Pós Processamento Desnecessário Tente Telecide sem pós processamento se você acha que há uma chance em ter um agradável fluxo de entrada limpo. Se tiver, você achará que o processo roda mais rápido sem o pós.

Não Invoque Algo Diferente do Avisynth Isto é muito importante e pode o valer uma penalidade de 25% de velocidade facilmente! Parece que Avisynth tem uma coisa estranha que causa a perda de muito tempo, quando não houver parênteses com os comandos. Por exemplo, este escrito:

Telecide
Decimate

… roda muito mais lento que este aqui:

Telecide()
Decimate()

Se você duvida, tente estes modos e veja. Então, é crítico sempre incluir pelo menos um parâmetro ou vários parênteses vazios. Isso é por que todos os enredos abaixo são codificados deste modo.

Use Recompressão Rápida se Possível Se você está servindo no VirtualDub para transcodificar e não precisa de qualquer filtrado ou outro processo no VirtualDub, então use o modo de Recompressão Rápida do VirtualDub.

Desative Exibições de Quadro Ao enviar produção Decomb ao VirtualDub (e aplicações semelhantes), desative a exibição da entrada e saída de quadros durante o processo. Isto diminuirá o tempo do processo notadamente.

## Cenários Típicos

Estes exemplos são planejados só para ilustrar as características principais do Decomb. Dirija-se ao Manual do Usuário para os procedimentos detalhados de como determinar colocações corretas a aplicar, bem como melhores resultados podem ser alcançados mexendo cuidadosamente nos parâmetros.

Desentrelaçamento simples Se você tem alguma fonte não filme (entrelaçada), você simplesmente o desentrelaça como a seguir:

LoadPlugin("decomb.dll")
AVISource("nonfilm.avi")
FieldDeinterlace()

Recuperação de Quadro progressivo Se você tem filme fonte telecinado (progressivo) e quer recuperar os quadros progressivos mas não mudar a taxa de quadro dizimando, proceda como segue:

LoadPlugin("decomb.dll")
AVISource("film.avi")
Telecide(order=1)

O parâmetro de ordem deve ser fixado para especificar corretamente a ordem de campo do clipe. Note que aqui Telecide faz pós processamento dos quadros recuperados para limpar qualquer quadro penteado que poderia ter passado pelo processo de comparar campo (veja "Notas sobre Comparação de Campo" abaixo).

Você pode usar a opção show, ou a opção debug junto com a utilidade DebugView, para ver o métrico e as decisões que o Telecide gera. Isto o ajudará mexer nos parâmetros.

Telecine Inverso (IVTC) Se você quer fazer a mesma coisa, mas dizimar o resultado para remover quadros duplicados (quais quantias para executar uma operação de telecine inverso [IVTC]), prossiga como segue [NTSC 3:2 usa Decimate(cycle=5)]:

LoadPlugin("decomb.dll")
AVISource("film.avi")
Telecide(order=1)
Decimate(cycle=5)

Desativando o Pós Processamento Se seu material de fonte telecinado é bem limpo, você pode querer desativar o pós processamento para reduzir o tempo do processo. Proceda como segue:

LoadPlugin("decomb.dll")
AVISource("mixed.avi")
Telecide(order=1,post=0)
Decimate(cycle=5)

Aqui, o terceiro parâmetro post, fixado em 0 para desativar o pós processamento.

Telecine 3:2 Inverso com Orientação de Padrão Se seu material de fonte telecinado for NTSC 3:2 com pulldown, você pode habilitar a orientação padrão, que pode fazer a comparação de campo mais precisa para alguns clipes. Proceda como segue:

LoadPlugin("decomb.dll")
AVISource("mixed.avi")
Telecide(order=1,guide=1)
Decimate(cycle=5)

Recorra à descrição de sintaxe para Telecide() abaixo para mais detalhes.

Processando Material Híbrido Se você tem um clipe que contém o pulldown 3:2 (filme) e o vídeo puro, pode fazer um bom trabalho com isto:

LoadPlugin("decomb.dll")
AVISource("hybrid.avi")
Telecide(order=1,guide=1)
Decimate(mode=3,threshold=2.0)

Dirija-se ao APÊNDICE B para detalhes adicionais em como controlar material híbrido.

## Notas sobre Comparação de Campos

Telecide faz regularmente um excelente trabalho ao recuperar quadros progressivos comparando campos. Há quatro condições de fluxo de fonte conhecidas que podem causar Telecide a produzir quadros com o pentear:

- Campos Perdidos. Se um campo está perdendo devido a uma edição ruim, então seu campo parceiro na fonte não terá um bom campo para comparar. Use o pós processamento padrão para limpar o fluxo produzido.

- Mistura de Campos. Alguns fluxos têm campos que são misturas de dois filmes originais de quadros progressivos! Algumas conversões NTSC/PAL podem causar isto, por exemplo. Normalmente tal fluxo tem muitos e a solução é executar o pós processamento com blend=true para limpar o fluxo produzido. Com o modo blend=true parece trabalhar melhor e os campos misturados se parecem com quadros misturados que dão um tipo de movimento borrado e reflete a "intenção" do fluxo de entrada.

  Em casos onde há muitos quadros misturados, não há qualquer ponto para usar Telecide. Use FieldDeinterlace() para tratar o clipe como vídeo entrelaçado.

  Finalmente, como você faz se seu fluxo misturou os campos? Simplesmente use o função SeparateFields do Avisynth para dividir os campos separadamente e então sirva o resultado ao VirtualDub. Ande pelos campos e veja se há qualquer campo que seja mistura de mais de um quadro.

- Quadros Não de Filmes (Clipes Híbridos). Alguns fluxos, especialmente os capturados de transmissões ao vivo, têm períodos de filme e períodos de não filmes. Para isso, você pode usar Decimate() com mode=1 ou mode=3 como descrito na seção de cenários acima. Mode=1 deixará o clipe com 30 fps enquanto que mode=3 o deixará com 24 fps. É sua decisão (difícil) se quer o fluxo final com 24 fps ou 30 fps.

- Quadros Híbridos. Às vezes gráficos, créditos, etc., serão renderizados à taxa de quadro final e sobrepostos no conteúdo telecinado, resultando em quadros que têm conteúdos progressivo e não progressivo. Ou mais raramente, há clipes que têm camadas diferentes e são telecinados com fases diferentes e então compostos. Para fluxos com quadros híbridos, você tem que confiar normalmente no pós processamento Telecide para limpar o fluxo produzido.

  Até agora você deve estar tendo a idéia que o pós processamento geralmente é uma boa coisa a fazer para assegurar que nenhum quadro pente se perca furtivamente.

## Sintaxes Gerais das Funções

As funções Decomb usam parâmetros nomeados. Isso significa que você não tem porque se preocupar com a ordem deles. Você simplesmente pode recorrer a eles pelo nome e pode colocá-los em qualquer ordem na lista de parâmetros. Se você omite um parâmetro, ele leva seu valor padrão. Por exemplo, se você quer rodar Telecide com ordem tff, pós processamento e com debug habilitado, pode simplesmente dizer:

Telecide(order=1,post=2,debug=true)

Qualquer combinação e ordem de parâmetros nomeados são permitidas. Porém, lembre-se que você sempre deve incluir parênteses vazios se não especificar nenhum parâmetro.

## Adaptação de Valores de Parâmetros Padrões

Se você não gosta dos padrões como documentado abaixo, pode fixar os seus próprios. Para anular os padrões, crie arquivos de padrões como exigido no diretório de plugins do Avisynth. Por exemplo, para fixar post=4 como padrão para Telecide(), faça um arquivo chamado Telecide.def e ponha esta linha nele:

post=4

Você pode listar tantas tarefas de parâmetro quantas quiser, uma por linha. As não especificadas assumem os valores padrões documentados abaixo. Claro que você sempre pode anular em seus escritos quando invocar as funções.

NOTA: As linhas no arquivo de padrões não devem conter qualquer espaço ou abas.

## Cancelando Decisões Decomb

Na ocasião você pode ter um perfeito encode com exceção de alguns quadros que Decomb decide errado. Em tais casos você pode usar a funcionalidade do Decomb para anular manualmente. Esta é uma característica avançada que deve ser usada só por peritos que precisam da codificação com a mais alta qualidade possível.

Anulando o Telecide() Por exemplo, suponha que o quadro 100 não está tendo comparação de campo corretamente. Nós inspecionamos a produção depurada de Telecide() e achamos que está comparando com o quadro prévio ("[usando p]"). Nós queremos tentar forçar uma comparação com o atual e o próximo para ver se uma correta comparação pode ser encontrada (recorra ao APÊNDICE A para uma explicação da terminologia). Primeiro, nós fazemos um arquivo de escrito chamado "tango.tel" no mesmo diretório (você pode usar qualquer nome). E colocamos esta linha no arquivo:

100 c

Isto declara que o quadro 100 será comparado com o corrente (use "p" para quadro prévio e "n" para próximo).

Agora nós dirigimos Telecide para usar isto e anular o arquivo:

Telecide(ovr="tango.tel")

Agora processe o escrito como sempre; os especificados anulam o atual que será usado. Se esta comparação falha, podemos tentar substituir "c" com "n" e tentar o próximo.

Uma gama de quadro também pode ser usada, como:

100,500 c

Nós podemos incluir linhas adicionais para definir qualquer outra anulação, como exigido. Nota que os números de quadro devem estar em ordem ascendente (do mais baixo para o mais alto).

Você também pode especificar padrões completos para sua comparação no arquivo anulador Telecide. Por exemplo, suponha que quer forçar um padrão ncccn para os quadros 100 a 185. Sua linha no arquivo seria:

100,185 ncccn

Você pode pôr tantos especificadores no padrão quanto quiser. Por exemplo, isto também seria legal:

100,185 nc

O padrão especificado será repetido do quadro inicial até o quadro do fim da gama.

Esta capacidade permite controle manual flexível e conveniente de comparação de campo. Você pode fazer seu filme inteiro manualmente se quiser!

As decisões de pós processamento do Telecide() também podem ser anuladas. Para forçar que um quadro seja considerado pente, use uma linha com um '+' como um destes:

100 +
100,500 +

Para forçar um quadro a não ser considerado pente, use linhas assim:

100 -
100,500 -

Você pode fixar valores vthresh diferentes para partes diferentes do seu clipe. Por exemplo, para fixar vthresh a 25 para os quadros 200 a 500, use:

200,500 v 25

Note que o anulador 'v' requer uma gama de quadro. Para especificar um único quadro, fixe ambos os quadros iniciais e finais da gama ao número do quadro desejado.

Você pode especificar o modo de comparação (back=0/1/2) para um quadro ou gama de quadros:

100 b 2
200,500 b 1

A primeira linha acima habilita tripla comparação para o quadro 100. A segunda linha habilita comparação pente para trás para os quadros 200 a 500.

Linhas para anular campo de comparação e para anular pós processamento podem ser usadas juntas no mesmo arquivo anulador, contanto que a exigência do número de quadro ascendente seja satisfeita.

Anulando FieldDeinterlace() FieldDeinterlace() suporta os anuladores '+' e '-' como descrito para Telecide(). Claro que o anulador de comparação de campo não se aplica e não deve ser usado. Você pode chamar o arquivo anulador "tango.fd".

Anulando Decimate() Para Decimate(), fazemos as coisas do mesmo modo, mas usamos linhas de forma que onde os números são quadros do clipe, entrar Decimate() que forçará a ser dizimado:

150
175

No exemplo anterior, os quadros 150 e 175 serão força dizimada. Novamente, um nome apropriado para o arquivo anulador seria " tango.dec ".

## Sintaxe Detalhada das Funções

A seguir a sintaxe para as funções Decomb (substitua parameter_list com sua lista de parâmetros nomeados separados por vírgula):

## Telecide(parameter_list)

Parâmetros Freqüentemente usados

order (0-1, nenhum padrão!) define a ordem de campo do clipe. É muito importante fixar isto corretamente. O Manual do Usuário especifica um procedimento seguro para fazer assim. Use order=0 para primeiro campo de fundo (bff). Use order=1 para primeiro campo de topo (tff). Você tem que especificar a ordem; Decomb lança uma exceção se você omitir este parâmetro.

guide (0-3, padrão 0) pode ser usado para melhorar a comparação de campo quando o clipe fonte é conhecido como material PAL ou NTSC telecinados. Para desativar esta opção (comparação cega), fixe guide=0. Para orientação de telecine NTSC 24 fps->30 fps, fixe guide=1. Para simples orientação PAL (tente manter fechado à fase de campo), fixe guide=2. Para orientação de telecine NTSC 25 fps->30 fps, fixe guide=3.

Quando esta opção é habilitada, Telecide() pode predominar uma decisão de comparação de campo e pode usar uma comparação predita baseada no clipe recente, passado e futuro. O parâmetro gthresh (abaixo) é usado para definir a menor discrepância entre as comparações de campo preditas e calculadas que é exigida para aceitar e usar a predição. Não habilite esta opção a menos que você saiba que o clipe fonte corresponde ao modo de orientação selecionado. Se em dúvida, deixe guide=0.

Note que esta característica usa acesso de quadro fortuito do Avisynth, assim trabalha bem quando o usuário usar navegação fortuita na linha de tempo.

gthresh (0.0-100.0, padrão 10.0) define quanto grande uma discrepância (em por cento) é requerida entre as comparações de campos preditas e calculadas para reajustar o padrão. Use a opção show, se for preciso, para afinar adequadamente este percentual. A produção show e/ou depurar indicarão quais comparações foram anuladas. As comparações anuladas são denotadas com um asterisco, por exemplo, "in-pattern*".

Não fixe gthresh muito alto, pois pode criar comparações ruins. Qualquer coisa a mais de 10-15 começa a ser perigoso.

post (0-5, padrão 2) controles se e como Telecide executa o pós processamento para limpar os quadros que passam pela comparação do campo penteado:

- post=0: Use isto para desativar totalmente o pós processamento
- post=1: Use isto para habilitar o cálculo de métrico e exibir os valores vmetric mas não executar desentrelaçamento.
- post=2: Use isto para habilitar o desentrelaçamento. Note que deste modo, a comparação de campo acontece normalmente e o quadro mais bem comparado é desentrelaçado e entregue.
- post=3: Isto é igual a post=2 exceto que o mapa de movimento de desentrelaçamento é exibido em branco nos quadros desentrelaçados.
- post=4: Isto é igual a post=2 exceto que em vez de usar a melhor comparação de campo para o quadro, o original é desentrelaçado. Você usará isto para passar seqüências de vídeos quando tiver um clipe híbrido.
- post=5: Isto é igual a post=4 exceto que o mapa de movimento de desentrelaçamento é exibido em branco nos quadros desentrelaçados.

vthresh (0.0-255.0, padrão 50.0) fixa o percentual de detecção de quadro penteado para o pós processamento. Você pode aumentar este valor se muitos quadros bons estão sendo desentrelaçados, ou pode reduzir se alguns quadros pentes não são pegos. O padrão é um valor de propósito geral razoável. Note que este percentual determina se um quadro é considerado pente e precisa ser desentrelaçado; não é o percentual que você pode estar familiarizado com Smart Deinterlacer. Esse percentual é determinado por dthresh (abaixo); é o percentual para desentrelaçar os quadros detectados como pentes.

dthresh (0.0-255.0, padrão 7.0) fixa o percentual para quadros de desentrelaçamento detectados como pentes. Note que este percentual é o que você pode estar familiarizado em Smart Deinterlacer.

blend (true/false, padrão false) habilita mistura em vez de interpolação em áreas penteadas. Interpolar é mais rápido.

show (true/false, padrão false) habilita a exibição do métrico no quadro para ajudar no ajuste de percentuais. Também exibe a versão do software.

Parâmetros Avançados

chroma (true/false, padrão true) determina se o croma penteado está incluído na decisão feita durante o pós processamento sobre se um quadro é pente ou não. Se chroma=true, então o croma pente é incluído, caso contrário não é incluído. Note que croma sempre é desentrelaçado; este parâmetro só afeta a decisão sobre se um quadro é pente. É útil para clipes que têm uma grande interferência de luma/croma, como pode ser o resultado de um filtro pente pobre. A interferência pode afetar quadros que não são pentes para ser detectados como tais, quando chroma=true. Fixando chroma=false, pode ser eliminado o efeito da interferência.

back (0-2, padrão 0) seleciona o modo de comparação. Quando back=0, a comparação para trás nunca é testada. Isto significa que em cortes de edições ruins, um quadro progressivo pode não ser achado e o quadro resultante deve ser desentrelaçado pelo pós processamento. Quando back=1, se um quadro ainda é pente depois da comparação de campo (de acordo com um teste com 'bthresh' - veja abaixo), então a comparação para trás é experimentada. Isto requer post > 0 e permite achar um bom quadro progressivo em cortes de edições ruins. Quando back=2, a comparação para trás sempre é considerada. Alguns clipes, especialmente esses com muitos campos misturados, podem ser controlados melhor com back=2 que testa por comparação os quadros prévios, atuais e próximos. Mas use isto com precaução, porque pode fazer alguns clipes aos solavancos.

bthresh (0.0-255.0, padrão 50) fixa o percentual de detecção de penteação para comparação condicional para trás (back=1). A comparação para trás será considerada se o candidato à comparação tiver penteação maior que 'bthresh'. Tipicamente você fixa um alto 'vthresh' para pegar quadros pentes perdidos, junto com um 'bthresh' mais baixo para pegar edições ruins.

nt (inteiro, padrão 10) define o percentual de tolerância de ruído. Normalmente não se deve ajustar este parâmetro. Se você tem uma captura ruidosa e está tendo comparações fracassadas, você pode muito bem tentar aumentar isto.

y0 e y1 (inteiro, padrão 0) Define uma faixa de exclusão pela comparação de campo. Se y0 não é igual a y1 esta característica é habilitada. Linhas na imagem entre y0 e y1 (inclusive) são excluídas da consideração quando a comparação do campo é decidida. Esta característica é usada tipicamente para ignorar sub-título que poderia, em caso contrário, se livrar da comparação. y0 e y1 devem ser ambos inteiros positivos e y0 deve ser menos que ou igual a y1; se isto é violado uma exceção será lançada.

hints (true/false, padrão true) habilita Telecide() passar sugestões para Decimate().Decimate usa estas sugestões para otimizar seu comportamento nos modos 1 e 3.

ovr (string, padrão "") habilita a especificação de um anulador de arquivos (veja a seção acima "Cancelando Decisões de Decomb"). O arquivo deve estar no mesmo diretório do arquivo de escrito (o diretório atual do Avisynth) e o nome deve ser incluído em aspas, por exemplo, ovr="tango.tel".

debug (true/false, padrão false) habilita a informação de logging/debugging sobre as decisões do filtro a serem impressas por OutputDebugString(). Uma utilidade chamada DebugView está disponível para pegar essas strings.

## FieldDeinterlace(parameter_list)

full (true/false, padrão true) escolhe se processa todos os quadros ou apenas os que são detectados como pentes. Use full=true para processar todos eles.

threshold (0-255, padrão 20) fixa o percentual de detecção do quadro penteado. Ao rodar com full=false, você pode aumentar este valor se muitos quadros bons estão sendo desentrelaçado, ou reduzi-lo se pequenas áreas penteadas não são pegas. O padrão é um valor de propósito geral bom. Note que este percentual determina se um quadro é considerado penteado e precisa ser desentrelaçado; não é o percentual que você pode estar familiarizado com o Smart Deinterlacer. Esse percentual é determinado por dthreshold (abaixo); é o percentual para desentrelaçar os quadros detectados como penteados. Quando full=true, o percentual é ignorado, mas o percentual permanece funcional.

dthreshold (0-255, padrão 7) fixa o percentual para quadros de desentrelaçamento detectados como penteados. Note que este é o percentual que você pode estar familiarizado com o Smart Deinterlacer.

blend (true/false, padrão true) habilita mistura em vez de interpolar áreas penteadas.

map (true/false, padrão false) habilita exibição do mapa de detecção de penteação (mapa de movimento). Se full=true, o mapa é mostrado para todas os quadros. Se full=false, o mapa só é mostrado para quadros detectados como penteados; quadros não penteados são exibidos normalmente. O mapa mostra áreas penteadas em ciano luminoso; áreas não penteadas são copiadas do quadro fonte e misturado com cinza.

chroma (true/false, padrão false) determina se o croma penteado é incluído na decisão feita durante o pós processamento e se um quadro é penteados ou não. Se chroma=true, então o croma penteado é incluído, caso contrário não é incluído. Note que croma é sempre desentrelaçado; este parâmetro afeta só a decisão se um quadro é penteado. É útil para clipes que têm uma grande interferência de luma/croma, como pode ser o resultado de um filtro pente pobre. A interferência pode causar que quadros não penteados sejam detectados como penteados quando chroma=true. Fixando chroma=false, pode ser eliminado o efeito da interferência. Esta opção não tem nenhum efeito quando full=true porque todos os quadros são considerados penteados.

ovr (string, padrão "") habilita a especificação de um anulador de arquivo (veja a seção acima Anular chamar "Cancelando Decisões de Decomb"). O arquivo deve estar no mesmo diretório do arquivo de escrito (o diretório atual do Avisynth) e o nome deve ser incluído em aspas, por exemplo, ovr="tango.fd".

show (true/false, padrão false) habilita o métrico a ser exibido no quadro para ajudar o ajuste de percentuais. Também exibe a versão do software.

debug é igual ao descrito para Telecide.

## Decimate(parameter_list)

cycle (2-25, padrão 5) seleciona a relação de dizimação, quer dizer, dizima 1 quadro em cada ciclo de quadro.

mode (0-3, padrão 0) determina como Decimate() deve lidar com o quadro extra no ciclo.

Se mode=0, Decimate descarta o quadro no ciclo, determinado a ser muito semelhante ao seu antecessor.

Se mode=1, em vez de descartar o quadro mais semelhante, Decimate() o substituirá com um quadro interpolado entre o quadro atual (normalmente uma duplicata do quadro precedente) e o quadro seguinte, ou atravessará o quadro como está. A escolha entre estes dois depende de duas coisas: 1) se o ciclo de quadros é de material de pulldown 3:2 ou de puro vídeo e 2) o parâmetro de percentual que fixa e em como o quadro é diferente do seu precedente (veja abaixo). O primeiro requer guide=1 para Telecide (para declarar o padrão pulldown).

Decimate(mode=1) é útil para clipes híbridos que têm principalmente vídeo. Permite deixar a taxa de quadro em taxas de vídeo (para ter suaves sucessões de vídeos) mas também para melhorar o efeito de quadros duplicados que são emitidos por Telecide() para seqüências de filme (quadros que normalmente são removidos com mode=0).

Dirija-se ao APÊNDICE B para mais detalhes e um guia para processar material híbrido.

Se mode=2, Decimate() apaga um quadro da mais longa série de duplicatas. Este modo é o mais seguro com anime e outro material onde o movimento só pode acontecer em cada segundo, terceiro, ou quarto (etc.) quadros. Se você usa mode=0 em tal clipe, há um perigo em que dizimação incorreta pode acontecer, causando sacudidelas. Clipes como esses normalmente descritos derivam animação de 8 fps ou 12 fps, como também de 24 fps normal onde o movimento lento resulta em duplicatas repetidas. Mode=2 pode apagar as duplicatas certas em todos estes casos.

Se mode=3, em vez de descartar o quadro mais semelhante, Decimate() aplicará estratégias de dizimação diferentes para material de pulldown (filme) 3:2 e para ciclos de vídeo puro (não filme). Os ciclos do filme são dizimados em modo normal. Os ciclos do não filme são dizimados aplicando uma dizimação da mistura do quadro do ciclo de 5 quadros para 4 quadros. A taxa de quadro resultante é a taxa do filme (dizimado por 1/5).

Há dois fatores que afetam a decisão de como dizimar: 1) se o ciclo de quadros é de material de pulldown 3:2 ou de vídeo puro e 2) o parâmetro do percentual que fixa e na diferença métrica para o quadro mais semelhante. O primeiro requer guide=1 para Telecide (declarar o padrão de pulldown).

Decimate(mode=3) é útil para clipes híbridos que têm principalmente filme. Permite dizimar o clipe para taxas de filme e tratá-lo normalmente, fazendo uma dizimação da mistura das seqüências de vídeos para reter sua suavidade.

Dirija-se ao APÊNDICE B para mais detalhes e um guia para processar material híbrido.

threshold (decimal, padrão 0.0) Quando mode=1, os quadros determinados para ser o mais semelhante ao seu quadro precedente podem ser tratados de dois possíveis modos: 1) eles podem ser misturados como descrito acima, ou 2) podem ser passados se o parâmetro do percentual não é zero e a diferença métrica excede o percentual. Fixando um percentual apropriado, você pode ter duplicatas misturadas passando pelos quadros que têm novo conteúdo, ou seja., que diferem significativamente do quadro anterior. Isto permite que o clipe de filme híbrido ou não de filme seja negociado inteligentemente com: as porções de filme terão misturas e as porções não de filme não terão. O parâmetro do percentual não tem nenhum efeito quando mode=0. Use show=true (ou debug=true junto com a utilidade DebugView) para ver o métrico da diferença e assim determinar um percentual apropriado para seu clipe.

O parâmetro do percentual também afeta mode=3 de um modo semelhante. Consulte o APÊNDICE B para detalhes.

threshold2 (decimal, padrão 3.0) Quando mode=2, Decimate()apaga um quadro da mais longa série de duplicatas, como descrito acima. O parâmetro de threshold2 controla como dois quadros próximos devem ser considerados duplicatas. Se o threshold2 é elevado, uma diferença de quadro maior é tolerada apesar de ainda declarar como duplicatas. A colocação padrão trabalha bem para a maioria dos clipes. Use show=true (ou debug=true junto com a utilidade DebugView) para ver o métrico da diferença e assim determinar um percentual apropriado para o clipe.

quality (0-3, padrão 2) Esta opção permite ao usuário negociar entre a qualidade da detecção de diferença e a velocidade. A seguir as possibilidades:

- quality=0: Sub amostragem para velocidade e croma não considerado (mais rápido).
- quality=1: Sub amostragem para velocidade e croma considerado.
- quality=2: Amostragem e croma totais não considerados.
- quality=3: Amostragem e croma totais considerados (mais lento).

ovr (string, padrão "") habilita especificação de um anulador de arquivo (veja a seção sobre "Cancelando Decisões de Decomb"). O arquivo deve estar no mesmo diretório do arquivo do escrito (o diretório atual do Avisynth) e o nome deve ser incluído entre aspas, por exemplo, ovr="tango.dec".

show (true/false, padrão false) habilita o métrico a ser exibido no quadro para ajudar no ajuste dos percentuais. Também exibe a versão do software.

debug (true/false, padrão false) habilita a informação do log /debug sobre as decisões do filtro a serem impressas com OutputDebugString(). A utilidade DebugView está disponível para pegar estas strings. A informação exibida é igual à mostrada pela opção show acima.

## IsCombed(parameter_list)

Este filtro é projetado para o uso no ConditionalFilter ().Ele retorna um booleano para indicar se um quadro é penteado (entrelaçado).

threshold (0-255, padrão 20) fixa a quantia (percentual) de penteação exigida para declarar um quadro penteado. É análogo ao parâmetro threshold de FieldDeinterlace(). Você pode ter que mexer nisto para melhor desempenho com o seu material específico.

## APÊNDICE A. Telecide() Teoria da Operação

Eis o que Telecide faz por padrão. Quando recebe um pedido para um quadro, tem acesso ao próximo quadro e ao pedido (o quadro atual). E aqui o que ele vê (onde N=próximo, C=atual, t=campo do topo, b=campo inferior):

`Ct Nt
Cb Nb`

Telecide faz 2 combinações dos quadros dos campos disponíveis. Aqui as combinações:

`Nt
Cb
Ct
Cb`

Agora ambos os quadros são conferidos por penteação. O quadro menos penteado é o da produção (não assumindo nenhuma orientação de padrão). É isso apenas.

Se a orientação padrão está habilitada, a decisão descrita acima pode ser anulada por uma comparação predita baseada no padrão percebido em volta do quadro atual. A predição é ignorada se a diferença entre as comparações for muito grande, que insinua uma possível mudança de fase do padrão, para o qual Telecide() deve re-sincronizar.

Considere agora um ciclo de quadros de uma seqüência de pulldown 3:2 (primeiro campo de topo):

`a a b c d
a b c c d`

Telecide produzirá quadros comparados como a seguir:

`a b c c d
a b c c d`

Pode ser visto que um quadro duplicado foi produzido. Decimate remove o quadro duplicado achando e removendo o quadro mais semelhante ao seu antecessor. É fácil ver agora por que a função Telecide seguida por Decimate produz um telecine 3:2 inverso (IVTC).

## APÊNDICE B. Relacionamento com Clipes Híbridos

A maioria dos clipes da vida real em ambientes NTSC é mistura de material pulldown 3:2 (filme) e puro vídeo (não filme). Isto apresenta uma dificuldade na codificação porque nossos formatos requerem uma especificação de taxa de quadro como 29.97 fps ou 23.976 fps. Se escolhermos a taxa de vídeo, as seqüências vídeas estarão OK, mas as seqüências de filme não serão dizimadas e emitirão duplicatas e aparecendo aos saltos.

Por outro lado, se escolhermos a taxa de filme, as seqüências estarão OK, mas as seqüências de vídeos serão dizimadas e aparecendo aos saltos.

Decomb fornece dois modos de dizimação especiais para controlar melhor os clipes híbridos.

Principalmente Clipes de Filme (mode=3)

Primeiro consideremos o caso onde o clipe é principalmente filme. Neste caso, queremos dizimar as porções do filme normalmente assim eles serão suavizados. Para as porções não de filme, queremos reduzir sua taxa de quadro por mistura que dizima cada ciclo de 5 quadros para 4 quadros. As seqüência de vídeos assim renderizadas aparecem mais suaves do que quando dizimadas como filme.

Eis aqui um escrito típico para habilitar este modo de operação:

Telecide(guide=1)
Decimate(mode=3,threshold=1.0)

Há 2 fatores que habilitam Decimate a tratar adequadamente porções de filme e de não filme. Primeiro, quando Telecide declara guide=1, está apto a passar informação para Decimate sobre quais quadros são derivados de filme e quais de vídeo. Para este mecanismo trabalhar, Decimate tem que imediatamente seguir Telecide. Claramente, quanto melhor o trabalho que você faz fechando padrão em Telecide (ajustando parâmetros como exigido), melhor trabalho o Decimate pode fazer.

O segundo fator é o percentual. Se um ciclo de quadros é visto e não tem uma duplicata, então o ciclo é tratado como vídeo. O percentual determina qual a porcentagem da diferença de quadro é considerado uma duplicata. Note que threshold=0 desativa o segundo fator.

Maioria de Vídeo Clipes (mode=1)

Agora consideremos o caso onde o clipe é principalmente vídeo. Neste caso, queremos evitar dizimar as porções de vídeos suaves. Para as porções de filme, queremos deixá-los à taxa de vídeo, mas mudar o quadro duplicado a uma mistura de quadro, assim não fica tão óbvio.

Aqui um escrito típico para habilitar este modo de operação:

Telecide(guide=1)
Decimate(mode=1,threshold=1.0)

Há 2 fatores que habilitam Decimate a tratar as porções do filme e do não filme adequadamente. Primeiro, quando Telecide declarar guide=1, pode passar informação para Decimate sobre quais quadros são derivados de filme e quais de vídeo. Para este mecanismo trabalhar, Decimate tem que seguir Telecide imediatamente. Claramente, quanto melhor o trabalho que você faz fechando padrão em Telecide (ajustando parâmetros como exigido), melhor trabalho o Decimate pode fazer.

O segundo fator é o percentual. Se um ciclo de quadros é visto e não tem uma duplicata, então o ciclo é tratado como vídeo. O percentual determina qual a porcentagem da diferença de quadro é considerado uma duplicata. Note que threshold=0 desativa o segundo fator.

## Agradecimentos

Eu gostaria de agradecer a Thomas Daniel ('manono') pela sua valiosa ajuda durante o desenvolvimento deste software. Ele não só fez várias valiosas sugestões e apontou recursos úteis, mas executou testes exaustivos em fluxos muito difíceis e fez testes de testa-a-testa contra outro software Decomb disponível.

Darryl Andrews deu valiosa ajuda especificando e testando as novas características na Versão 4.00.

Klaus Post ('sh0dan') forneceu alguns códigos e idéias para otimização de baixo nível do código YV12.

Sócios do foro doom9.org deram muita ajuda e encorajamento.

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`