Smart Decimate remove o telecine combinando campos de telecine e dizimando ao mesmo tempo, que é diferente da aproximação tradicional de igualar quadros de telecine e então removendo duplicatas. A mais recente versão do "Smart Decimate" pode ser achado em http://kevin.atkinson.dhs.org/tel/.
LoadPlugin("...\avisynth_c.dll") LoadCPlugin("...\SmartDecimate.dll") AssumeTFF() # ou AssumeBFF() SmartDecimate()Note que o segundo plugin é LoadCPlugin e não LoadPlugin. (Tem um C depois de Load)
É MUITO IMPORTANTE QUE A ORDEM DE CAMPO SEJA
CORRETA.
Guia para o Uso
Para este guia assumirei que seu material é
pulldown 3:2 com algum possível vídeo misturado dentro. Porém, SmartDecimate
pode controlar alguma relação de dizimação fixa.
Para usar este filtro, você tem que primeiro determinar a ordem de campo correta. Se a ordem de campo estiver errada, meu filtro não trabalhará corretamente. Para determinar a ordem de campo:
AviSource(...) AssumeTFF() Bob()Agora preveja o vídeo e procure movimento para trás. Se não ver, então você deve usar "assumetff()". Se vê algum, tente:
AviSource(...) AssumeBFF() Bob()E mais uma vez procure movimento para trás. Se não vê nenhum desta vez, você deve usar "assumebff()"
Agora é hora de montar meu filtro:
LoadPlugin("...\avisynth_c.dll") LoadCPlugin("...\smartdecimate.dll") # note o C em loadCplugin AviSource(...) AssumeTFF() # ou AssumeBFF() como determinado acima SmartDecimate()Se você estiver satisfeito com o resultado, então isso é tudo que é necessário. Se não, prossiga lendo.
Se seu material for anime com muitos quadros repetidos, então você deve tentar:
SmartDecimate(tel=0.60)Isto deve evitar qualquer subir e descer (tremer) em seqüências longas sem movimento.
O valor "tel" controla a agressividade do filtro ao comparar os campos. O valor padrão é 0.50.
Se você tiver um vídeo misturado com uma grande quantia de vídeo verdadeiro, então você pode abaixar "tel" para baixo tanto quanto 0.25. Isto arriscará o subir e descer (tremer) alguns quadros progressivos, mas não deve entrelaçar verdadeiros quadros de vídeo que podem deixar artefatos pentes.
Se você tem um vídeo de puro pulldown 3:2 com muitos poucos quadros de vídeo verdadeiro, então pode tentar aumentar "tel" para 0.75. Isto fará SmartDecimate ser realmente agressivo ao comparar campos progressivos. Porém, acabará deixando para trás sérios artefatos pentes se houver qualquer vídeo puro no clipe.
Se tiver um vídeo realmente ruidoso, então vai precisar elevar o fator de ruído como:
SmartDecimate(noise=0.80)O valor padrão é 0.50. Deixe em padrão a menos que seu clipe seja muito ruidoso. Valores mais altos de ruídos freqüentemente deixarão por trás mais artefatos pentes para quadros de vídeo puros.
Se você tem um clipe realmente limpo e nota alguns artefatos pentes em quadros de vídeo puros, então pode abaixar o fator de ruído. Mas cuidado: se for muito baixo, SmartDecimate não poderá comparar os campos progressivos e assim poderá tremê-los.
Finalmente, se você tem um vídeo híbrido (pulldown 3:2 misturado e verdadeiro vídeo), deve considerar substituir o estúpido "bob" com algo como DgBob ou SmoothDeinterlace. Para fazer isso, use a opção "bob". Por exemplo:
SmartDecimate(bob=DgBob(...))Isto melhorará grandemente a qualidade dos quadros de vídeo puros. Note que a fonte do "bob" só afeta os quadros renderizados. Não é usado para comparar campos. Nem é usado por qualquer outra parte de SmartDecimate.
O uso é:
SmartDecimate
([numr, denm], options)
As opções seguintes podem ser usadas para direcionar SmartDecimate:
bob
uma fonte alternativa de quadros desentrelaçados por "bob". O padrão é "Bob()" que é filtro "bob" interno bobo AviSynths. Para resultados melhores, use um "bob" inteligente como DgBob ou SmoothDeinterlace. As fontes "bob" sãos usadas sempre que SmartDecimate determina que um campo não é parte de um quadro progressivo.
weave
uma fonte alternativa de quadros entrelaçados.
O padrão é "DoubleWeave()".
tel
um número entre 0 e 1 que controla a
agressividade do filtro ao comparar campos. 0.50 (padrão) trabalhará bem com a
maioria dos clipes. Quanto mais alto o valor, maior o risco de deixar artefatos
pentes em material entrelaçado verdadeiro. Quanto baixo o valor, maior o risco
para tremer (ou em caso extremo saltar ou duplicar) quadros de Telecine.
Atualmente tel pina várias opções internas que dependem ao qual é fixado, mas há inversores para: 0.45, 0.55, 0.65 e 0.72.
noise
O fator de ruído. O valor padrão, 0.50, deve
trabalhar na maioria dos casos.
t_max
Um método alternado de fixar o fator de ruído.
Você precisa entender como meu filtro trabalha para usar.
cpu
Força a CPU a um tipo particular. Normalmente é
auto detectado. Para ver se é detectado corretamente "turn logging
on". A primeira linha da saída exibirá o tipo de CPU. Valores válidos
atuais para este valor são: 0 - Genérico, 2 - Inteiro SSE, 3 - SSE, 4 - SSE2.
unaligned
Permite leitura de dados não alinhados.
Normalmente SmartDecimate pode ignorar alguns píxeis no início ou fim de cada
linha, de forma que as leituras sejam bem alinhadas. Fixando este valor em true
previne isso.
As opções seguintes podem ser usadas para controlar a impressão de informação útil:
log_level
A verbosidade da informação imprimida. O padrão é 2.
log_file
Se fixo, toda a saída irá ao arquivo
especificado.
console
Se fixo em true, então uma janela de console
aparecerá e toda a saída será enviada a ela.
debug_print
Se fixo, então toda a produção que usa a
chamada de sistema OutputDebugString será impressa. Você pode ver essa saída
com um utilitário como DebugView.
O significado da informação imprimida é como segue:
As opções seguintes podem ser usadas para afinar parâmetros internos. Para entender o que eles fazem, você precisará olhar para a fonte. Eles podem ser mudados entre os lançamentos.
Outros filtros telecide geralmente removem telecine em um processo de dois passos. Os primeiros campos de telecine são comparados, mas a taxa de quadro não é mudada, então quadros duplicados são retirados. SmartDecimate não trabalha deste modo. SmartDecimate ao invés, combina campos de telecine e dizima a taxa de quadro ao mesmo tempo.
A mesma primeira coisa que SmartDecimate faz é usar "SeparateFields()", que dividirá o vídeo em campos individuais que também dobrarão a taxa de quadro. Então o campo número 9 realmente é o campo de fundo do quadro 4 (assume que o vídeo é TFF) antes de separá-lo em campos. Para simplicidade, eu vou me referir sempre deste modo aos campos do vídeo fonte.
SmartDecimate seleciona campos então em um padrão regular, tentando evitar selecionar campos duplicados. Mais precisamente, deixa N ser o número de quadro do destino e R ser a relação que para pulldown 3:2 será 24/60 = 2/5, então SmartDecimate escolhe entre floor(N/R de campo) e floor(N/R) + 1. Por exemplo, para quadro de destino número 5, usando pulldown 3:2 típico, SmartDecimate vai escolher o campo 12 ou 13. Qual escolhe é bem complicado e algo que eu não terei aqui.
Depois que um campo fonte for escolhido, precisa
decidir como renderizar. SmartDecimate escolhe entre: 1) comparando com o campo
prévio, 2) comparando com o próximo campo, ou 3) com desentrelaçamento bob.
Como escolher é baseado na semelhança com o campo prévio ou com o próximo
campo. Se o campo é igual ao prévio ou ao próximo campo, comparará com
aquele campo entrelaçando os dois campos. Se não puder achar um campo igual,
desentrelaça o campo atual com "bob". SmartDecimate realmente não
faz a renderização final. Ao invés usa o filtro "anther" do
AviSynth para fazer este trabalho. No caso de entrelaçar, usará DoubleWeave()
e no caso de "tremer", usará Bob() ou um filtro "bob"
inteligente se houver.
Afinando T_Max
Para descobrir quais campos são diferentes e
quais são iguais, SmartDecimate procura picos em diferença de string. São
determinados três valores que representam a diferença entre quatro campos
sucessivos A B C D, se AC (i.e. a diferença entre B e C) > AB e BC > CD e
AB e CD são próximos em valor com os campos A e B, provável que sejam os
mesmos, campos B e C provável que sejam diferentes e campos C e D provável que
sejam os mesmos.
Porém, este método não é perfeito e às vezes pode classificar cenas de grande movimento quando valores de diferença semelhantes entre quadros (que AB e CD são os semelhantes) como sendo o mesmo. Assim, para controlar isso, SmartDecimate simplesmente assume todos os campos com uma diferença maior que um percentual fixo não pode ser possivelmente o mesmo. Infelizmente não há nenhum ótimo valor por este percentual, assim é fixo um valor razoável que deve ser bom para a maioria dos clipes que não sejam extremamente ruidosos. Porém, este valor geralmente deixará alguns campos diferentes pelo qual conduzirá a artefatos pentes. Para evitar isto, o percentual "t_max", deve ser fixado o mais baixo possível.
Para descobrir qual o melhor valor para "t_max" para um clipe em particular, você precisará saber quais as diferenças entre os quadros. O modo mais fácil para fazer isto é fixar a opção "log_file " (com o nível de log em 2 ou mais alto) e rodar SmartDecimate em uma boa porção do clipe. Uma vez feito, você deve ver algo como o seguinte no arquivo log:
... Diff 827: 0 6.11586e-008 FRAME 331 = [828,827] Diff 828: 2 8.21554e-005 Diff 829: 0 3.69098e-008 Diff 830: 0 3.27322e-008 FRAME 332 = [830,831] Diff 831: 2 0.000124936 Diff 832: 0 6.48069e-008 FRAME 333 = [832,833] Diff 833: 2 0.000102379 Diff 834: 0 3.54472e-008 ...As linhas que você está interessado são as que começam com "Diff....". O primeiro número depois de Diff é o número do campo fonte. O segundo número é a classificação da diferença, com 0 significando o mesmo, 1 semelhante e 2 diferente. O número final é a diferença atual. O que você está interessado é a diferença de quadros classificada como a mesma. Você quer fixar t_max para ligeiramente acima do valor máximo de todas as diferenças classificadas como as mesmas. Para este clipe 7.0e-8 pode ser um bom valor. Mas desde que eu só olhei uma pequena porção do clipe, ele pode precisar ser mais alto, porque as diferenças podem variar a uma quantia grande. É melhor olhar o valor por várias áreas diferentes do clipe para ter um valor seguro. Assumindo que 7.0e-8 é um valor bom eu posso usar isto:
SmartDecimate(t_max=0.000000070)Eu escrevi 0.000000070 em vez de 7.0e-8 porque AviSynth parece não suportar notação científica. Para estar seguro que converteu o número corretamente, fixe o nível de log para 3 ou mais alto e procure uma linha assim:
t1_max = 7.00000e-008 t2_max = 2.10000e-007 max_last_set = 13O valor que você interessa é t1_max é 7e-8. Assim, converti o número corretamente. Os outros valores são para outros percentuais internos.
Uma vez que você pensa ter achado um bom valor para t_max, rode de novo seu clipe, apesar de SmartDecimate ter um log de nível fixo em 3 ou mais alto, para ter certeza que não o fixou muito baixo. Se você o fixa baixo, um número excessivo de quadros fica tremido (bobbed) e você verá mensagens como:
2001: T1 Maxed Out at 2.00000e-008Estas mensagens são normais para as verdadeiras partes do vídeo, mas não devem ser vistas nas partes de telecine do clipe. Se você os ver, significa que t_max é muito pequeno e precisa ser elevado. O valor exato pode ser descoberto olhando as diferenças dos quadros em volta. Por exemplo:
... Diff 1999: 2 3.08506e-008 Diff 2000: 1 4.03734e-008 Diff 2001: 2 8.89810e-006 Diff 2002: 1 2.93221e-008 ...indica que t_max deve ser pelo menos 4.04e-8, mas 4.5e-8 é um valor mais seguro.
Finalmente, note que "t_max" e "noise" controlam o mesmo parâmetro interno que é "t1_max". Eles apenas fazem isso de modo diferente. "t_max" fixa-o diretamente enquanto "noise" fixa indiretamente, baseado em uma fórmula exponencial. Como no SmartDecimate 0.21 esta fórmula é:
t1_max = exp(17.65*noise - 20.71)
A maioria dos desentrelaçadores trabalha sempre escolhendo o campo do topo (ou talvez do fundo) como o campo de domínio e seletivamente jogando a informação no outro campo e então interpolando ou misturando. Para 30 fps normal (ou 25 fps PAL) esta é a coisa correta a fazer. Porém, para a saída de SmartDecimate, isto não é correto porque o campo dominante não é sempre o mesmo. Dependerá em qual campo SmartDecimate escolhe originalmente do vídeo de fonte e pode ser o campo de topo ou de fundo. Assim, um desentrelaçador tradicional pode jogar o campo errado. Isto pode nem mesmo ser notado, mas você deve estar atento.
Autores de filtros desentrelaçadores podem
corrigir este problema prestando atenção à paridade do quadro. SmartDecimate
sempre informará a paridade do campo original escolhida como a paridade do
quadro final renderizado. Se a paridade for true, então o campo de topo deve
ser escolhido. Se é false, o campo de fundo. Também estarei disposto a passar
sugestões para o desentrelaçador indicar quais campos estão tremidos se alguém
me falar como.
Relacionamento com Movimentos Indesejáveis
Usando a opção weave, você pode
usar clipes diferentes para a entrada e saída. Isto é útil para lidar com
subtítulos ou outro movimento que você não quer considerar ao comparar
quadros. Por exemplo, ao aparar subtítulos você pode tentar.
b = Bob() w = DoubleWeave() CropBottom(64) SmartDecimate(bob = b, weave = w)Então, o vídeo produzido não será aparado, mas as últimas 64 linhas não serão vistas por SmartDecimate. Se você usar este método, a fonte "bob" também deve ser especificada. Se você não especificar, então tentará usar o clipe de entrada para "Bob()". Mas o clipe resultante não terá as mesmas dimensões como a fonte weave.
Se sua taxa de quadros designada for 24 fps, então a escolha fica baseada ao gosto pessoal, pois ambos, Smart Decimate e Decomb controlam a situação completamente diferente e com resultados muito diferentes.
Smart Decimate controlará o vídeo selecionando quadros de uma fonte tremida (duas vezes a taxa de quadro) em um padrão 3:2. Quer dizer, vai de 60 - > 24 fps. Isto conduz a movimento bastante suave sem ter que recorrer a toldar quadros juntos. Porém, o vídeo ainda é ligeiramente sacudido. Em minha experiência, o sacudido leve não é geralmente perceptível exceto quando há texto rolando. Por exemplo, ao dizimar rolando créditos, os resultados são terríveis. Desde que quadros tremidos são usados, você também terá alguns artefatos tremidos. Os resultados não serão muito bons a menos que um "bob" inteligente seja usado.
Por outro lado, Decomb tentará dizimar o vídeo verdadeiro indo de uma fonte 30 fps desentrelaçada para 24 fps. Faz de dois modos. A primeira coisa que pode fazer é tirar um de cada 5 quadros. Esta aproximação levará a resultados extremamente aos trancos. A outra coisa que pode fazer é misturar os quadros. Esta aproximação conduzirá a vídeo mais suave que a aproximação Smart Decimate, mas com artefatos indesejáveis. Áreas móveis da imagem geralmente serão borradas. Com muito movimento, pode aparecer imagens duplas que pode ser difícil seguir o movimento. Quadros borrados também afetam negativamente a compressão porque faz o movimento mais difícil.
Decomb por outro lado, vê vídeo entrelaçado e progressivo 30 fps como a mesma coisa e poderá assim velar quadros para suavizar movimentos. Se o clipe é principalmente vídeo progressivo 30 fps com um pulldown 3:2, Decomb também pode manter em 30 fps e misturar o material pulldown com melhores resultados.
Outras Coisas para Tentar como Smart Decimate
Aqui estão algumas outras coisas que você pode tentar com Smart Decimate, que não podem ser feitas com telecine tradicional como filtros Decomb.
SmartDecimate(1,1, tel=0.25, bob=DgBob(...))que conduzirá a melhores resultados que usando só DgBob (ou mais outros filtros "bob" inteligentes), desde que os quadros de telecine são duplicados em lugar de desentrelaçados tremidos. Isto pode fazer uma grande diferença com anime.
SmartDecimate advertirá sobre quaisquer píxeis
ignorados se o nível "logging" for fixo a nível 0 ou mais alto.
Compilando
Para compilar SmartDecimate você precisará
instalar Gcc e Nasm e talvez GNU Make. Eu usei MinGW
(2.0.0-3) com MSYS 1.09, Gcc 3.3.1, e Nasm
0.98.37. Com exceção de Nasm, todas as utilidades exigidas podem ser achadas
na página MinGW Download.
Outras configurações devem trabalhar, mas você vai precisar editar o
Makefile. Uma vez que todas as ferramentas adequadas estão instaladas e no
caminho, simplesmente digite:
makeda interface MSYS e isso é tudo o que é requerido.
0.23 (16 de Setembro de 2003)
0.22 (12 de Setembro de 2003)
0.21 (7 de Setembro de 2003)
0.20 (29 de Agosto de 2003)
0.12 (22 de Agosto de 2003)
0.11 (18 de Agosto de 2003)
0.10 (16 de Agosto de 2003)
$Date: 2006/03/26 18:11:54 $ Portuguese translation by RoLon