AviSynthのぺーじ/プリセット2:プリセットを使った関数

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

関数化の方針

 プリセットを使った関数の例として、次のような関数を考えてみました。

[関数の概要]

  • 関数名
    • EasyResize
  • 関数の概要
    • リサイズ用関数。幅と高さを指定してリサイズする以外に、プリセットで規定された解像度から選択することも可能にする。
  • 関数化の方針
    • リサイズフィルタにはLanczosResizeを使用。
    • 引数はclip, width, heightとpresetとする。
    • preset省略時は、widthとheightで指定した値でリサイズ。
    • presetで、VCD、SVCDなど、よく使われるサイズを指定できるようにする。
    • 該当するpresetがない時は、エラーが出るようにする。

 以上のことをふまえて、まず、引数リストを考えます。

function EasyResize(clip clip, int "width", int "height", string "preset")
{
...
}

 widthheightは、直接、幅と高さを指定する時に使います。int型です。

 presetは、プリセット用の引数です。SelectByStringフィルタの引数s(search string)に代入しますので、string型とします。

プリセット案

 次に、SelectByStringの書式に従って、プリセット部分を考えていきます。

SelectByString(string s,
string key1, value1
[, string key2, value2 [, ...]]
[, "else"])

 SelectByStringの引数s(search string)には、上で述べたようにEasyResize関数の引数presetをあてはめます。

 次に、「string key1, value1[, string key2, value2 [, ...]]」の部分を考えます。

 keyNとvalueNは2つ1組で、埋め込みたいプリセットの分だけ設定します。keyNはプリセットの名前、valueNはフィルタの設定です。

 SelectByStringでは、presetとkey1が一致すればvalue1を返し、presetとkey2が一致すればvalue2を返し・・・というように機能するんでしたね。

NkeyNvalueN
1"default""LanczosResize(clip, width, height)"
2"VGA""LanczosResize(clip, 640, 480)"
3"QVGA""LanczosResize(clip, 320, 240)"
4"VCD""LanczosResize(clip, 352, 240)"
5"SVCD""LanczosResize(clip, 480, 480)"
6"HalfD1""LanczosResize(clip, 352, 480)"

 VGA、QVGA、VCD、SVCD、HalfD1の5つに、デフォルト(default)を加えた6つのプリセット案を考えました。

 defaultは、他の5つのプリセットを使わない時用の設定です。

 関数に次の一行を付け加えておくことで、preset省略時はpreset="default"を指定したのと同じになるようにすることができます。

preset = default(preset, "default")

 これで、presetを指定しなかった(省略した)場合に、preset="default"(key1)となり、widthとheightの値でリサイズ(value1)します。

 このプリセット案を、SelectByStringの書式にあてはめて記述すると、次のようになります。

s = SelectByString(preset,
\ "default", "LanczosResize(clip, width, height)",
\ "VGA", "LanczosResize(clip, 640, 480)",
\ "QVGA", "LanczosResize(clip, 320, 240)",
\ "VCD", "LanczosResize(clip, 352, 240)",
\ "SVCD", "LanczosResize(clip, 480, 480)",
\ "HalfD1", "LanczosResize(clip, 352, 480)",
\ else = "")

 最後のelseは、該当するプリセットがなかった場合に返す値の設定です(省略可)。

 ここでは、""を返すように設定しました。これを利用して、タイプミスがあった場合に、エラーを返すようにします。

最終更新日 2004年8月31日

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