WriteFile / WriteFileIf / WriteFileStart / WriteFileEnd

WriteFile (clip, string filename, string expression1, ... , string expression16, bool "append", bool "flush")
WriteFileIf (clip, string filename, string expression1, ... , string expression16, bool "append", bool "flush")
WriteFileStart (clip, string filename, string expression1, ... , string expression16, bool "append")
WriteFileEnd (clip, string filename, string expression1, ... , string expression16, bool "append")

WriteFile avalia expressionN, converte o resultado a uma string e põe o resultado num arquivo.

A variável "run-time" current_frame é fixada de forma a poder usar em uma "expression" (isto trabalha semelhante como com ScriptClip, olhe lá no doc. para mais infos).

current_frame é fixado a -1 quando o escrito estiver carregado e para -2 quando está fechado.

 

WriteFile gera saída a cada quadro, WriteFileIf só gera se a primeira expressão for true e nenhuma ao abrir ou fechar.
WriteFileStart e WriteFileEnd só gera saída em escrito que abre e fecha, não há nenhuma ação em cada quadro.

Quando append = true o resultado será juntado em qualquer arquivo existente.
Quando flush = true o arquivo é fechado e reaberto depois de cada operação, assim você pode ver o resultado imediatamente (isto pode ser mais lento).
Para WriteFileStart e WriteFileEnd flush  é sempre true.
O padrão para append é sempre true, com exceção de WriteFileStart (aqui é false).

Isto é melhor explicado com alguns exemplos simples:

filename = "c:\myprojects\output.txt"
# crie um vídeo de teste para ter quadros
Version()

# a expressão aqui é apenas uma variável que é avaliada e posta no arquivo
# você terá um arquivo com o número de quadro em cada linha
WriteFile(filename, "current_frame")

# esta linha é escrita quando o escrito é aberto
WriteFileStart(filename, """ "Este é o cabeçalho" """)

# e isto quando o escrito se fechar
WriteFileEnd(filename, """ "Agora o escrito está fechado" """)

Olhe como você pode usar aspas triplas para digitar uma string dentro de uma string!

Se a expressão não pode ser avaliada, a mensagem de erro é escrita em seu lugar.
No caso de acontecer isso com If-expression em WriteFileIf o resultado é assumido que é true.

# resultará em "eu não sei o que "isto" significa"
WriteFile(filename, "isto é tolice")

Há modos mais fáceis para escrever números em um arquivo, MAS:

... com este exemplo você pode ver como usar as "runtime functions" com FrameEvaluate:

# crie um vídeo de teste para obter quadros diferentes
Version.FadeIn(50).ConvertToYV12

# isto imprimirá o número do quadro, um ":" e a média luma desse quadro
colon = ": "
WriteFile("F:\text.log", "current_frame", "colon", "AverageLuma")

Ou talvez você quer a hora atual também impressa:

# crie um vídeo de teste para obter quadros diferentes
Version.FadeIn(50).ConvertToYV12

# isto imprimirá o número do quadro, a hora atual e a média luma desse quadro
# as aspas triplas são necessárias para inserir aspas dentro de uma string
WriteFile(last, filename, "current_frame", """ time(" %H:%M:%S") """, "AverageLuma")

Mais exemplos:

É esperado em WriteFileIf que a PRIMEIRA expressão seja boolean (true ou false).

As outras expressões só são avaliadas se é TRUE e então a linha é impressa.

(Lembre-se: && é AND, || é OR, == é EQUAL, != é NOT EQUAL)

Deste modo você pode omitir completamente as linhas do seu arquivo.

 

# crie um vídeo de teste para obter quadros diferentes
Version.FadeIn(50).ConvertToYV12

# isto imprimirá o número do quadro, mas só onde AverageLuma está entre 30 e 60
WriteFileIf(last, filename, "(AverageLuma>30) && (AverageLuma<60)", "current_frame", """ ":" """, "AverageLuma")

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