ConditionalReader
ConditionalReader (clip, string filename, string variablename, bool "show")
ConditionalReader は、各フレーム、もしくは、ある範囲のフレームに関する異なった値を含むテキストファイルから、情報をインポートすることを可能にします。
パラメータ †
パラメータ | 説明 | デフォルト |
---|---|---|
clip | 制御されるクリップ。show=true を指定しない限り、影響を受けない。 | 必須 |
filename | 設定したい変数を含むファイル。 | 必須 |
variablename | 情報を挿入させたい変数の名前。 | 必須 |
show | true に設定すると、このフレームに与えられた値が画像の上にオーバーレイされる。 | false |
ファイルフォーマット †
ファイルは、プレーンテキスト*1です。区切りはすべて半角スペースによって行われ、改行は新しいデータセットを表します。大文字と小文字の区別はありません!
TYPE (int|float|bool)
各ファイルの中には、1 つの型のデータのみ含めることができます。現在のところ、float、int または bool の値を持つことが可能です。TYPE というキーワードを使用することによって型を指定します。このキーワードが見つかるまでは何も保存されないので、つねにデータの型を指定することから始めるべきです。一度設定された型は変更することができません!
DEFAULT <値>
すべてのフレームのデフォルト値を指定します。すべての定義されたフレームを上書きするため、型を指定した直後にこれを指定すべきです。この設定を省略するすることも可能ですが、その場合は、必ずすべてのフレームに関する設定を指定しなければなりません。さもなければ、予期せぬ結果につながるでしょう。
<フレーム番号> <値>
<フレーム番号> のフレームに対してのみ値を設定します。
R <開始フレーム> <終了フレーム> <値>
ある範囲のフレームに値を適用します。開始フレームおよび終了フレームがともに含まれるということに注意すべきです。
I <開始フレーム> <終了フレーム> <開始値> <終了値>
ある範囲のフレームにわたって 2 つの値の間を補間します。int と float の値に関してのみ動作します。開始フレームおよび終了フレーム がともに含まれるということに注意すべきです。
型 †
前述のとおり、指定可能な型は float、int または bool のいずれかです。
int は整数で、オプションで、ある記号*2から開始することも可能です。
float は小数点を含む小数で、オプションで、ある記号から開始したり、e または E と小数をあとに続けることが可能です。有効な入力は、-732.103 または 7.12e4 です。
bool は、true (T、yes)または false (F、no)のいずれかです。
使用例 †
基本的な使用法
File.txt:
Type float Default 3.45567 R 45 300 76.5654 2 -671.454 72 -671.454
上記のファイルは、float 値を返します。デフォルトでは 3.45567 を返します。しかし、フレーム 45 からフレーム 300 までは 76.5654 を返します。さらに、フレーム 2 とフレーム 72 は、-671.454 を返します。
お気づきのように、後で行われた変更が、ファイルの中で先に行われた設定を無効にします。このことは、フレーム「72」によって説明されます。たとえそれが 45 から 300 の範囲の中にあったとしても、より後方で設定された値が返却されます。反対に、その範囲が「72 -671.454」の後に指定されたなら、76.5654 を返します。
このファイルを呼び出すスクリプトは、以下のようになります:
colorbars(512,512) trim(0,500) ScriptClip("subtitle(string(myvar))") ConditionalReader("file.txt", "myvar", false)
このスクリプトは、「myvar」という名前の変数に値を代入します。この変数は、Subtitle によって使用され、条件に応じた値を表示するために ScriptClip によって呼び出されます。
注意! ConditionalReader() 行は、スクリプトの中で「myvar」を使用した後に来ます。
Overlay の調整
AviSynth スクリプト:
colorbars(512,256) a1 = trim(0,600) a2 = MessageClip("Text clip") overlay(a1,a2, y = 100, x = 110, mode="subtract", opacity=0, pc_range=true) ConditionalReader("opacity.txt", "ol_opacity_offset", false) ConditionalReader("xoffset.txt", "ol_x_offset", false)
xoffset.txt:
Type int Default -50 I 25 50 -50 100 R 50 250 100 I 250 275 100 250
opacity.txt:
Type float Default 0.0 I 25 50 0.0 1.0 R 50 250 1.0 I 250 275 1.0 0.0
基本的には、x のオフセットと不透明度に関するキーフレームを定義しています。フレーム 25 から 50 にかけて、不透明度は 0.0 から 1.0 に拡大され、テキストは左から右へ移動しています。次に、テキストはフレーム 50 から 250 まで固定され、その後、フェードアウトしながら、さらに右へ移動します。
何を行っているのかを完璧に説明するよりも、上のクリップを見た方が簡単です。
複雑な ApplyRange
すでにお気づきかもしれませんが、スクリプトの中でたくさんの ApplyRange() を呼び出すと、リソース問題を引き起こすおそれがあります。ConditionalFilter とあわせて ConditionalReader を使用すれば、効率的な解決につながります。
File.txt:
Type Bool Default False 2 True R 45 60 True 72 True R 200 220 True 210 False 315 True
上記のファイルは、ブール値*3を返します。デフォルトでは false を返します。しかし、フレーム 2、フレーム 45 からフレーム 60 まで、フレーム 72、フレーム 200 からフレーム 220 まで、フレーム 315 は、フレーム 210 を除いて true を返します。お気づきのように、後で行われた変更が、ファイルの中で先に行われた設定を無効にします。このことは、フレーム「210」によって説明されます。たとえ 200 から 220 の範囲にあっても、後で設定された値(false)が返却されます。
このファイルを利用するスクリプトは、以下のようになります:
colorbars(512,512) trim(0,500) A=Last FlipHorizontal() # 複雑なフィルタチェインを追加 B=Last ConditionalFilter(A, B, "MyVar", "==", "False", false) ConditionalReader("File.txt", "MyVar", false)
このスクリプトは、「MyVar」という名前の変数に値を代入します。この変数は、未処理のバージョンのソースと反転されたバージョンのソースから選択するために ConditionalFilter によって使用されます。
注意! ConditionalReader() 行は、スクリプトの中で「MyVar」を使用した後に来ます。
註: このページは、AviSynth 2.5.8 RC3 に同梱されている英語版ヘルプの日本語訳です。原文は、AviSynth をインストールしたフォルダ内の Docs/english/corefilters/conditionalreader.htm にあります。なお、このページのテキストおよび画像のライセンスは、オリジナルのそれに準じます。詳しくは、AboutLicense を参照してください。
*1 訳者註: 参考: テキスト形式とは 【プレーンテキスト】 - 意味・解説 : IT用語辞典
*2 訳者註: ここでは、16 進数を指定する際に使用される接頭辞の $ を指しているものと思われます。
*3 訳者註: true または false。