Write

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(真)の場合にのみ出力を生成します。スクリプトのオープン時またはクローズ時の出力はありません。
WriteFileStart と WriteFileEnd は、スクリプトのオープン時とクローズ時にのみ出力を生成し、フレームごとのアクションはありません。

append = true のとき、結果は既存のファイルに追加されます。
flush = true のとき、ファイルは毎回実行後にクローズされ、再オープンされます。そのため、結果をすぐに見ることができます(遅くなるかもしれません)。
WriteFileStart と WriteFileEnd では、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(「this」が何を意味するのかわかりません)」 という結果に終わる
WriteFile(filename, "this is nonsense")

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

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

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

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

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

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

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

その他の使用例:

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

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

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

註: このページは、AviSynth 2.5.8 RC3 に同梱されている英語版ヘルプの日本語訳です。原文は、AviSynth をインストールしたフォルダ内の Docs/english/corefilters/write.htm にあります。なお、このページのテキストおよび画像のライセンスは、オリジナルのそれに準じます。詳しくは、AboutLicense を参照してください。


*1 訳者註: WriteFile の 第 3 引数以降の string 型の引数のこと。expression は式の意。N には 1 から 16 までの数字が入る。
*2 訳者註: ランタイムは「実行時」の意。フィルタの実行時にフレームごとに評価され、値が代入される特別な変数。同じくフレームごとに結果を返すランタイム関数もある。詳しくは、ConditionalFilterを参照。
*3 訳者註: 二重引用符(")を 3 つ続けて重ねた文字列(""")のこと。
*4 訳者註: true (真)または false (偽)のいずれかの値のみを返す式のこと。参考: ブーリアンとは 【boolean】 ─ 意味・解説 : IT用語辞典 e-Words

最終更新日時: 2014-03-11 (火) 03:49:49 (3693d)