ScriptGrammar のバックアップソース(No.7)

*スクリプト文法 [#xab250fc]

すべてのAviSynthスクリプトのステートメントは、これらの形式のうちの1つをとります:

+変数名 = 式
+式
+return 式
+end

1つ目の場合、式は評価され、結果(つねにビデオクリップ)は変数名にアサイン((割り当てる、という意味。))されます。2つ目の場合、式は評価され、結果は特別な変数lastに割り当てられます。3つ目の場合、式は評価され、スクリプトの"戻り値" -- すなわち、AVSを開くアプリケーションによって描かれるビデオクリップとして使われます。4つ目の場合は、return lastに相当します。

式は、これらの形式のうちの1つをとることができます:

+数値定数か文字列定数
+変数名かクリップのプロパティ
+関数([[Args>#args]])
+式.関数([[Args>#args]])
+式1 演算子 式2
+bool式 ? 式1 : 式2

1つ目の場合、式の値は定数の値です。2つ目の場合、値は[[クリップのプロパティ>ClipProperties]]か[[スクリプト変数>ScriptVariables]](これは、前もって初期化されていなければなりません)に相当します。3つ目の場合、値はAVS関数の戻り値です(下記参照)。4つ目の場合は、関数(引数, 式)に相当する、("OOP表記法"と呼ばれる)代替シンタックスです。

最後の2つの場合は、三項演算子を使って条件付きでコードを実行するばかりではなく、int、float、val、boolに関して期待されるように、通常の計算や(C言語からの)[[論理演算子>LogicalOperators]]のすべてを使って、式を操作することができるということを示しています。文字列は'+'を使って連結することができます。また、以下の演算子は、ビデオクリップに関して、次のように定義されます:a + bは[[UnalignedSplice>Splice]](a, b)に相当し、a ++ bは[[AlignedSplice>Splice]](a, b)に相当する。

AviSynthのスクリプト言語における関数は、概して、ビデオフィルタです(あなた自身の[[スクリプト関数>ScriptFunctions]]を定義することもできます)。関数は60個までの引数をとることができ(それで十分足りることを望みます)、戻り値はつねにクリップです。関数は、つねに新しいビデオクリップを生成します。けっして存在するクリップを修正するのではありません。各内蔵フィルタ用の関数呼び出しのシンタックスを見るためには、FiltersByCategoryを見てください。

&aname(args);Argsは、コンマによって区切られた、関数の引数のリストです。引数リストは、空にすることもできます。各引数は、文字列、整数、浮動小数点数、またはビデオクリップ(すなわち、式)でなければなりません。フィルタ関数が1つ目の引数としてビデオクリップを期待していて、なおかつ、その引数が与えられないとしたら、そのときは、特別なlast変数の中のクリップが使われるでしょう。

AviSynthのフィルタは、名前付きの引数を取ることができます。名前付きの引数は、どんな順番でも、指定することができます。そしてフィルタは、使用するのをやめた引数に対しては、デフォルト値を選びます。たとえば、
 Subtitle("Hello, World!", 100, 200, 0, 999999, "Arial", 24, $00FF00)
の代わりに、
 Subtitle("Hello, World!", text_color=$00FF00, x=100, y=200)
と書くことができます。

また、あなたは、関数を、丸括弧なしで呼び出すこともできます。たとえば、以下のように。
 フィルタ名 引数1 引数2
このような書き方をする主な理由は、古いスクリプトとの互換性を維持するためです。しかし、混乱の可能性がないときに、丸括弧を使用しないことは、時には、便利です。

AviSynthは、#記号から行末までのあらゆるものを無視します。これは、スクリプトにコメントを付け加えるために利用されます。

AviSynthは、大文字と小文字の別を無視します: aViSouRCeは、AVISourceとまったく同じです。

複合的なAviSynthステートメントを一行に記述することは、以下のように、OOP表記法のコンテキストか、フィルタを別の関数のパラメータとして埋め込むことにおいてのみ可能です:

 AviSource("c:\video.avi").Trim(0, 499)

または

 AudioDub(AviSource("c:\video.avi"), WavSource("c:\audio.wav"))

AviSynthステートメントは、バックスラッシュ("\")を、拡張される行の最後の非スペース文字として、もしくは、次の行の最初の非スペース文字として配置することによって、複数行にまたがって分割することができます。

行分割の例(どちらも有効であり、かつ等しい):

 Subtitle("Hello, World!", 100, 200, 0, \
 999999, "Arial", 24, $00FF00)

または

 Subtitle("Hello, World!", 100, 200, 0,
 \ 999999, "Arial", 24, $00FF00)

''AviSynthManualに戻る''

#hr
註: このページは、http://www.avisynth.org/ScriptGrammarの日本語訳です。