フィルタの書式 のバックアップの現在との差分(No.4)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
#contents

**AviSynthのマニュアル [#b5a3942a]
AviSynthのフィルタのマニュアルは、たいていの場合、以下のような順番で書かれています。
*フィルタの書式 [#ccbc90c4]

 書式
 
 説明
 
 使用例(ない場合もある)

まず、フィルタ(関数)の書式(フォーマット)、そして、そのフィルタの説明、最後にフィルタの使用例があります。フィルタによっては、使用例がない場合もあります。

たとえば、MessageClipフィルタのマニュアル((http://www.avisynth.org/MessageClipから転載。))を見てみると、次のように書かれています。

>MessageClip(string message, int width, int height, bool shrink, int text_color, int halo_color, int bg_color)~
~
MessageClip produces a clip containing a text message; used internally for error reporting. Arial font is used, size between 24 points and 9 points chosen to fit, if possible, in the width by height clip.~
~
If shrink is true, the clip resolution is then reduced, if necessary, to fit the text.~

1行目のMessageClip(string message, ...)までがMessageClipフィルタの書式です。それ以降は、同フィルタの説明です。MessageClipフィルタの場合、使用例はありません。

**フィルタの書式 [#ccbc90c4]
フィルタの書式は、
 フィルタ名(引数リスト)
という形で表されます。

たとえば、MessageClipフィルタの場合は、次のように記されていました。
 MessageClip(string message, int width, int height, bool shrink, int text_color, int halo_color, int bg_color)
このとき、MessageClipがフィルタ名、括弧の中に書かれているのが引数リストということになります。

これはMessageClipフィルタの書式です。

この場合、MessageClipがフィルタ名、括弧の中に書かれているのが引数リストということになります。

**引数リストについて [#a97d5c48]

 引数型 引数名
引数リストは、このように、引数型と引数名が、対の形で記述されています。((例外的に、clip型の引数clipがある場合に、一方を省略して、単にclipと書かれていることもあります。))引数型は、その引数がどのようなタイプのものであるかを示すものであり、引数名はその引数の名前を表します。
引数リストは、[[引数型]]と引数名が、対の形で記述されます。((例外的に、clip型の引数clipがある場合に、一方を省略して、単にclipと書かれていることもあります。))[[引数型]]は、その[[引数]]がどのようなタイプのものであるかを示すものであり、引数名はその[[引数]]の名前を表します([[引数型]]については「[[引数型]]」のページを参照)。

 string message
MessageClipの1つ目の引数の場合、stringが引数の型で、messageが引数の名前です。言い換えると、1つ目の引数は、messageという名前で、その引数型はstring型である、ということになります。
MessageClipの1つ目の[[引数]]の場合、stringが[[引数]]の型で、messageが[[引数]]の名前です。言い換えると、1つ目の[[引数]]は、messageという名前で、その[[引数型]]はstring型である、ということになります。

 フィルタ名(引数型1 引数名1, 引数型2 引数名2, 引数型3 引数名3, ...)

引数が複数ある場合は、コンマ区切りで、つづけて書きます。引数の数は、フィルタによって異なります。
[[引数]]が複数ある場合は、コンマ区切りで、右へつづけて書きます。[[引数]]の数は、フィルタによって異なります。

つまり、MessageClipフィルタの場合、message、width、height、shrink、text_color、halo_color、bg_colorという7つの引数があり、引数messageはstring型、引数shrinkはbool型で、それ以外の引数はint型であるというわけです。
つまり、MessageClipフィルタの場合、message、width、height、shrink、text_color、halo_color、bg_colorという7つの[[引数]]があり、[[引数]]messageはstring型、[[引数]]shrinkはbool型で、それ以外の[[引数]]はint型であるというわけです。

**引数型 [#y6f1ed10]
AviSynthで使用される引数型は、以下の通りです。
*フィルタの記述例 [#sfef351e]
実際にフィルタを記述する方法を紹介します。ここでは例として、MessageClipフィルタを使い、「Hello World!」というメッセージつきのビデオクリップを作成します。

|~clip型|クリップ。省略した場合、最後に処理したクリップ(last)が適用される。|
|~int型|整数。integer(整数)の略。フィルタによって指定できる範囲が異なる。頭に$を付けることで16進数で指定することも可能。(例)$ff = 255。|
|~float型|小数。floating-point number(浮動小数点数)の略。 フィルタによって指定できる範囲が異なる。|
|~bool型|論理型(boolean)。true(真)、または、false(偽)のいずれかを指定する。|
|~string型|文字列。二重引用符(")で囲む形で記述する。|
**すべての引数を指定する [#i56f9213]

#br
**フィルタの記述例 [#sfef351e]
実際にフィルタを記述する方法を紹介します。ここでは例として、MessageClipフィルタを使い、「Hello World!」というメッセージつきのビデオクリップを作成します。

***すべての引数を指定するとき [#i56f9213]
 MessageClip("Hello World!", 240, 135, true, $0000ff, $ff0000, $00ff00)
書式通りに、すべての引数を指定した場合の例です。
書式通りに、すべての[[引数]]を指定した場合の例です。

次の点に注意してください。

-1つ目のmessageはstring型であるため、二重引用符で囲んでいます。
-widthとheightはint型なので、整数で指定しています。
-4つ目の引数shrinkはbool型なので、trueまたはfalseのいずれかを指定します。
-残りの3つの引数は、widthやheightと同様のint型です。ここでは色指定しやすいように、HTMLのカラーコードなどで使われる16進数で指定しています((参考: [[とほほの色入門・色見本:http://tohoho.wakusei.ne.jp/wwwcolor.htm]]))。
-残りの3つの引数は、widthやheightと同様のint型です。ここでは色指定しやすいように、HTMLのカラーコードなどで使われる16進数で指定しています((参考: ColorPresets))。

&ref{hello007_bg_color.png};~
&ref(hello007_bg_color.png);~
上のスクリプトをプレビューすると、このような画像が表示されます。

***引数を省略するとき [#g2fbd023]
**引数を省略する [#g2fbd023]

 MessageClip("Hello World!")
message以外の引数は省略されています。引数が省略された場合は、デフォルト値が適用されます。~
message以降の[[引数]]は省略されています。[[引数]]が省略された場合は、デフォルト値が適用されます((フィルタにデフォルト値が設定されていない場合は、省略することができません。))。~
~
&ref{hello001_hello_world.png};~
&ref(hello001_hello_world.png);~
そのため、上のスクリプトをプレビューすると、このような画像が表示されます。

//***名前付き引数で指定したとき
// MessageClip("Hello World!", text_color=$0000ff, halo_color=$ff0000, bg_color=$00ff00)
 MessageClip("Hello World!", 240, 135)

widthとheightまで指定しました。

&ref(hello002_size_specified.png);~
すると、widthとheightには指定した値が適用され、text_color以降の[[引数]]にはデフォルト値が適用されます。

ただし、このように、ある[[引数]]以降をすべて省略する場合はいいのですが、単純に[[引数]]を省略できない場合もあります([[下記>#s505fa79]]参照)。

**名前付き引数で指定する [#s505fa79]

たとえば、あなたが、width、height、shrinkの3つの[[引数]]を省略したいと考えたとします。そのとき、次のように記述したとしたら、どうなるでしょうか。

 MessageClip("Hello World!", $0000ff, $ff0000, $00ff00)

width、height、shrinkの部分を、そのまま削除して、text_color以降を左にずらしたものです。実は、これをプレビューしようとすると、以下のようなエラーが発生します。

&ref(hello008_invalid_argument.png);~

 Script error: Invalid arguments to function "MessageClip"(スクリプトエラー: 関数"MessageClip"に不正な引数)

これは、[[引数]]の指定の仕方が誤っている場合に発生するエラーです(「[[エラーのタイプ]]」を参照)。この場合、4つ目の[[引数]]は、本来、bool型であるべきにもかかわらず、int型の$00ff00が渡されていることが原因です。

このような省略の仕方をしたい場合は、名前付き引数を使います。名前付き引数を使えば、自由な順番で、[[引数]]を指定することができるようになります。

名前付き引数は、

 引数名 = 値

という形で指定します。

 MessageClip("Hello World!", text_color=$0000ff, halo_color=$ff0000, bg_color=$00ff00)

さきほどのスクリプトを名前付き[[引数]]を使って書き換えると、このようになります。

&ref(hello009_argument_specified.png);~
プレビューすると、このような画像が表示されます。省略された[[引数]]には、デフォルト値が適用されています。