ConditionalReader

ConditionalReader (clip, string filename, string variablename, bool "show")

ConditionalReader は、各フレーム、もしくは、ある範囲のフレームに関する異なった値を含むテキストファイルから、情報をインポートすることを可能にします。

パラメータ

パラメータ説明デフォルト
clip制御されるクリップ。show=true を指定しない限り、影響を受けない。必須
filename設定したい変数を含むファイル。必須
variablename情報を挿入させたい変数の名前。必須
showtrue に設定すると、このフレームに与えられた値が画像の上にオーバーレイされる。false

ファイルフォーマット

ファイルは、プレーンテキスト*1です。区切りはすべて半角スペースによって行われ、改行は新しいデータセットを表します。大文字と小文字の区別はありません!

TYPE (int|float|bool)

各ファイルの中には、1 つの型のデータのみ含めることができます。現在のところ、floatint または bool の値を持つことが可能です。TYPE というキーワードを使用することによって型を指定します。このキーワードが見つかるまでは何も保存されないので、つねにデータの型を指定することから始めるべきです。一度設定された型は変更することができません!

DEFAULT <値>

すべてのフレームのデフォルト値を指定します。すべての定義されたフレームを上書きするため、型を指定した直後にこれを指定すべきです。この設定を省略するすることも可能ですが、その場合は、必ずすべてのフレームに関する設定を指定しなければなりません。さもなければ、予期せぬ結果につながるでしょう。

<フレーム番号> <値>

<フレーム番号> のフレームに対してのみ値を設定します。

R <開始フレーム> <終了フレーム> <値>

ある範囲のフレームに値を適用します。開始フレームおよび終了フレームがともに含まれるということに注意すべきです。

I <開始フレーム> <終了フレーム> <開始値> <終了値>

ある範囲のフレームにわたって 2 つの値の間を補間します。int と float の値に関してのみ動作します。開始フレームおよび終了フレーム がともに含まれるということに注意すべきです。

前述のとおり、指定可能な型は floatint または bool のいずれかです。

int は整数で、オプションで、ある記号*2から開始することも可能です。

float は小数点を含む小数で、オプションで、ある記号から開始したり、e または E と小数をあとに続けることが可能です。有効な入力は、-732.103 または 7.12e4 です。

bool は、trueTyes)または falseFno)のいずれかです。

使用例

基本的な使用法

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。

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