DVInfo

Abstrato

autor: WarpEnterprises
versão:  
download: http://www.avisynth.org/warpenterprises/
categoria: Miscelânea de Plugins
requisitos:  

Descrição

DVInfo lê o Timecode e a Informação da Data de Registro de um arquivo DV-AVI.

Sintaxe

DVInfo (clip, string "filename", string "output", int "x", int "y", string "font", int "size", int "text_color", int "halo_color", string "rec_format", 
string "tc_format", bool "show_error", float "threshold", int "autoframes"
)

DVInfo abre um arquivo DV-AVI (legado Tipo-1 e Tipo-2, e openDML > 4 Gb suportado) e lê o timecode e o registro de data passados pelo quadro. Atenção: não carrega o conteúdo do vídeo ou áudio do AVI, isto tem que ser feito DIRETAMENTE ANTES com AviSource!

O timecode e data de registro são então impressos no quadro conforme você usa o Subtitle() e os parâmetros x, y, fonte, tamanho, text_color, halo_color que são passados ao Subtitle.

As variáveis "run-time", "current_frame", tc_time ", rec_time " são fixadas de forma que você as pode usar em uma expressão na "produção" (isto trabalha semelhante ao ScriptClip, olhe o documento para mais infos).

Você pode fixar o formato de tempo gerado com os parâmetros rec_format e tc_format.

Com "threshold">0 a produção é trocada se houver uma diferença da data de registro entre o quadro atual e o último que são maiores que os segundos "percentuais". Depois que "autoframes" formam os quadros a produção é trocada. Deste modo você tem a data de registro só em scenechanges (mudanças de cenas).
Atenção: o último quadro processed é usado, o qual não é o prévio quando você buscar no clipe (só trabalha em playback linear).
Com por exemplo threshold=0.5 e autoframes=2 você pode imprimir isto cada segundo e por 2 quadros.

Isto é explicado melhor com um exemplo:

LoadPlugin("c:\myprojects\dvinfo\release\dvinfo.dll")

file = "c:\myprojects\type2.avi" # assim você não precisa digitar o filename duas vezes

Avisource(file)          # abra o conteúdo vídeo

DVInfo(file, "rec_time") # leia a data de registro
                         # imprima-o com o formato padrão na variável "rec_time"
                         # avalie esta expressão (que consiste só na única variável)
                         # exiba o resultado com os parâmetros Subtitle padrões

Você pode omitir "rec_time", desde que seja o valor padrão da "produção".

DVInfo(file)   # faça igual ao acima


Isto não trabalhará (mais de um arquivo):

LoadPlugin("c:\myprojects\dvinfo\release\dvinfo.dll")

file1 = "c:\myprojects\type2a.avi"
file2 = "c:\myprojects\type2b.avi"

Avisource(file1)+Avisource(file2)  # isto está bem OK

DVInfo(file1, "rec_time")  # mas agora DVInfo tenta ler em file1 os números dos quadros do file2!
DVInfo(file2, "rec_time")  # e vice-versa

Em vez, escreva deste modo:

LoadPlugin("c:\myprojects\dvinfo\release\dvinfo.dll")

file1 = "c:\myprojects\type2a.avi"
file2 = "c:\myprojects\type2b.avi"

Avisource(file1).DVInfo(file1, "rec_time") + Avisource(file2).DVInfo(file2, "rec_time")
# agora cada DVInfo lê seu próprio arquivo

Isto não trabalhará (usando Trim):

LoadPlugin("c:\myprojects\dvinfo\release\dvinfo.dll")

file1 = "c:\myprojects\type2a.avi"

Avisource(file1)
Trim(1000,2000)
DVInfo(file1, "rec_time")  # agora DVInfo pega os números dos quadros errados

Em vez, escreva deste modo:

LoadPlugin("c:\myprojects\dvinfo\release\dvinfo.dll")

file1 = "c:\myprojects\type2a.avi"
file2 = "c:\myprojects\type2b.avi"

Avisource(file1).DVInfo(file1, "rec_time") + Avisource(file2).DVInfo(file2, "rec_time")
# agora cada DVInfo lê seu próprio arquivo


Mais exemplos

Você pode modificar o formato de hora (veja AviSynth Doc>> Sintaxe>> função Time para todos os detalhes):

DVInfo(file, "rec_time", rec_format="%H:%M:%S") # imprima só a hora sem data

ou

DVInfo(file, "rec_time", rec_format="%A, %H:%M:%S") # imprima o nome do dia de semana completo mais a hora

O tc_time ocupa a posição na fita em horas, minutos, segundos e quadros.
Eu pus os quadros na posição dia-do-mês, isto está um pouco sujo mas você pode exibir o número de quadros facilmente usando o símbolo "month" de formato de mês:

DVInfo(file, "tc_time", tc_format="%d") # imprima só o número do quadro

Você pode pôr uma expressão mais complexa na "produção":

DVInfo(file, "tc_time + chr(32) + rec_time + chr(32) + current_frane")
# exiba o timecode, hora do registro e o número do quadro separados por espaços

Se você quer incluir outro texto:

text = "ALÔ MUNDO"
DVInfo(file, "text + rec_time") # exiba "ALÔ MUNDO" e a hora do registro.

Você tem que fazer isto deste jeito, porque não é possível colocar aspas numa string.

Como você vê, pode usar cada variável de escrito na "produção".

Imprimindo a data do registro só em scenechanges:

DVInfo(file, threshold=1)   # imprima por 25 quadros se a diferença for >1 segundo

Manipulação de Erro 

Se o framenumber (nº quadro) pedido é maior que o framecount (cont. quadro, isto não deve acontecer) uma mensagem de erro é posta em rec_time e tc_time.
Se nenhum timecode ou timestamp do registro podem ser encontrados, ou se houver algum outro erro de leitura, uma mensagem de erro é posta em rec_time e tc_time.

Estas mensagens de erro são suprimidas se você usar show_error = false.

Se o AVI não pode ser aberto, ou o resultado da "produção" não é uma string, um erro do AviSynth é emitido.


Nota Técnica 

Para ler os dados AVI eu usei o código de kino por Arne Schirmacher.
Eu o modifiquei, assim trabalhará com openDML - arquivos > 2 Gb, compilado em Win32 e tirado de todas as outras funções de leitura.

Ernst Peché, 16 de dezembro de 2003

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