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 は、expressionN*1 を評価して、その結果を文字列に変換し、ファイルに書き出します。

「ランタイム」変数*2current_frame は、「式(expression)」の中で使えるように設定されます
(これは、ScriptClip の場合と同じように動作します。詳しい情報はヘルプで確認してください)。
current_frame は、スクリプトが読み込まれるときに -1 に設定され、スクリプトがクローズされるときに -2 に設定されます。

WriteFile はフレームごとに出力を生成し、 WriteFileIf は最初の式が true(真)の場合にのみ出力を生成します。スクリプトのオープン時またはクローズ時の出力はありません。
WriteFileStartWriteFileEnd は、スクリプトのオープン時とクローズ時にのみ出力を生成し、フレームごとのアクションはありません。

append = true のとき、結果は既存のファイルに追加されます。
flush = true のとき、ファイルは毎回実行後にクローズされ、再オープンされます。そのため、結果をすぐに見ることができます(遅くなるかもしれません)。
WriteFileStartWriteFileEnd では、 flush はつねに true です。
append のデフォルトは、 WriteFileStart (デフォルト false) を除き、つねに true です。

いくつかの簡単な例を使って最もうまく説明することができます:

filename = "c:\myprojects\output.txt"
# フレームを取得するためにテスト用のビデオを作成する
Version()

# 式は変数のみで、この変数は評価されファイルに書き出される
# 各行にフレーム番号の書かれたファイルが得られる
WriteFile(filename, "current_frame")

# この行はスクリプトがオープンされたときに書き込まれる
WriteFileStart(filename, """ "This is the header" """)

# こちらはスクリプトがクローズされるときに書き込まれる
WriteFileEnd(filename, """ "Now the script was closed" """)

どうすればトリプルクォート*3を使って文字列の中に文字列をタイプすることができるのか確かめてください!

式が評価できない場合は、代わりにエラーメッセージが書き込まれます。
WriteFileIf の if 式でこれが起こると、結果は true であると仮定されます。

# 「I don't know what "this" means」*4という結果に終わる
WriteFile(filename, "this is nonsense")

ファイル内に数字を書き込むより簡単な方法があります。しかし ...

この例では、「ランタイム関数」を FrameEvaluate と一緒に使用する方法を見ることができます。

# 異なるフレームを取得するためにテスト用のビデオを作成する
Version.FadeIn(50).ConvertToYV12

# フレーム番号、「:」(コロン)、および、そのフレームの輝度の平均値を書き込む
WriteFile("F:\text.log", "current_frame", "colon", "AverageLuma")

あるいは、実時間も出力したいと思うかもしれません:

# 異なるフレームを取得するためにテスト用のビデオを作成する
Version.FadeIn(50).ConvertToYV12

# フレーム番号、現在の時間、および、そのフレームの輝度の平均値を書き込む
# 文字列の内側に引用符を入れるためにトリプルクォートが必要
WriteFile(last, filename, "current_frame", """ time(" %H:%M:%S") """, "AverageLuma")

その他の使用例:

WriteFileIf では、1 番最初の式はブーリアン*5(true または false)であることが期待されています。
それが TRUE である場合にのみ、その他の式が評価され、その行が書き込まれます。
(覚えておいて下さい: && は「かつ」、|| は「または」、== は「等しい」、!= は「等しくない」です。)
そのようにファイルから完全に行を省くことができます。

# 異なるフレームを取得するためにテスト用のビデオを作成する
Version.FadeIn(50).ConvertToYV12

# AverageLuma が 30 から 60 までのフレームのみ、フレーム番号を書き込む
WriteFileIf(last, filename, "(AverageLuma>30) && (AverageLuma<60)", "current_frame", """ ":" """, "AverageLuma")

原文 Date: 2004/07/04 19:37:46
日本語訳 $Date: 2008/07/19 03:50:17 $