DVInfo lê o Timecode e a Informação da Data de Registro de um arquivo DV-AVI.
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
|
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
|
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.
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