AviSynthのぺーじ/引数リストの記述法

これは、かつて「にーやんのAviSynthのぺーじ」として公開されていたものを転載したものです。内容は古く、間違いも含まれている可能性があります。より正確で新しい情報を知りたい場合は、AviSynth 付属のヘルプや AviSynth 公式サイトを参考にすることをおすすめします。AviSynth WikiAviSynth入門なども活用してください。

省略可能な引数と省略不可能な引数

 引数を省略可能にするためには、引数リストの引数名を二重引用符("")で囲まなければなりません。

 まとめると、次のようになります。

(1)引数省略不可:

  • 記述方法: [データ型 引数名]
  • 記述例:
    function EasyClipping(clip clip, int top, int bottom, int left, int right )
    

(2)引数省略可:

  • 記述方法: [データ型 "引数名"]
  • 記述例:
    function EasyClipping(clip clip, int "top", int "bottom", int "left", int "right")
    

 EasyClipping関数の引数リストを、引数が省略できるように変更しました。

function EasyClipping(clip clip, int "top", int "bottom", int "left", int "right")
{
#//--- デフォルト値の設定 ---//
top = default(top, 0)
bottom = default(bottom, 0)
left = default(left, 8)
right = default(right, 8)
#//--- widthとheightを求める ---//
width = Width(clip) - (left + right)
height = Height(clip) - (top + bottom)
#//--- Cropフィルタ(書式1) ---//
clip = Crop(clip, left, top, width, height)
#//--- return文 ---//
return clip
}

 これで、引数を省略してもエラーは出なくなります。

引数clipの扱い

 ところで、引数リストを修正したEasyClipping関数では、clip型の引数clipだけが、そのまま省略不可の形になっています。これは、なぜか。

function EasyClipping(clip "clip", ...

 たとえば、引数clipを二重引用符で囲んで、省略可能な形にしてみます。

 しかし、この状態で次のスクリプトを実行しても、エラーが出てしまいます。

ColorBars(720, 480)
EasyClipping()

 引数clipも省略されているため、EasyClipping関数から見ると、受け取るべきクリップがわからない(クリップを受け取れない)状態になっているのです(下記のメモを参照)。

function EasyClipping(clip clip, ...

 一方、clipを二重引用符で囲まなかった場合。この場合は、引数を省略することができません。

 しかし、こちらは次のスクリプトが通ります。

ColorBars(720, 480)
EasyClipping()

 一見、引数clipが省略されているように見えます(スクリプト上は省略されています)。

 しかし、この場合のEasyClipping関数では、引数clipは省略することができません。必ず指定されていなければなりません。

 ですから、変数省略時に割り当てられる特別な変数lastが、自動的に使われるのです。

メモ: clip型引数のデフォルト値の設定

clip型の引数のデフォルト値を設定することも可能です。ただし、次回以降で紹介する予定のglobal変数が含まれてきますので、ここではスクリプトの例を紹介するにとどめておきます。

global c = ColorBars(720, 480)
EasyClipping()

function EasyClipping(clip clip, int "top", int "bottom", int "left", int "right")
{
#//--- デフォルト値の設定 ---//
clip = default(clip, c)
top = default(top, 0)
bottom = default(bottom, 0)
left = default(left, 8)
right = default(right, 8)
#//--- widthとheightを求める ---//
width = Width(clip) - (left + right)
height = Height(clip) - (top + bottom)
#//--- Cropフィルタ(書式1) ---//
clip = Crop(clip, left, top, width, height)
#//--- return文 ---//
return clip
}

最終更新日 2004年8月8日

最終更新日時: 2014-03-12 (水) 23:37:07 (1835d)