ユーザー定義関数 のバックアップソース(No.19)

#contents

*ユーザー定義関数とは? [#wa6e0225]

AviSynthでは、自分自身で関数を定義して、その関数をスクリプト内で呼び出すことができます。

詳しくは、[[ScriptFunctions#jeb5d893]]を参照。

*ユーザー定義関数の使い方 [#r0c763bb]

ユーザー定義関数を使用するための方法には、次の2つがあります。

**1.メインスクリプトの任意の位置に貼り付ける方法 [#uf89764f]

1つ目の方法は、1スクリプト内で、関数の定義と実行の両方を行う方法です。

以下の手順で行います。

+メインスクリプト((フロントエンドに渡すAVSファイルを指します。))内の任意の行に、使用したい関数の「function」から「}」(右中括弧)までの部分(以下、関数の定義部分と記載)を貼り付けます。
+その関数を使用したい行に、関数の実行(設定)行を記述します。

-例:
#code(){{
AviSource("hoge.avi") # ソースクリップ
FilterRange(100, 199, "TomsMoComp(1,5,1)") # 関数の実行行
return last

# 以下、関数の定義部分(他の位置に貼り付けてもよい)
function FilterRange(clip "clip", int "start", int "end", string "filter")
{
    c1 = start < 2 ? clip.trim(0, -1) : clip.trim(0, start - 1)
    c2 = Eval("clip.trim(start, end)." + filter)
    c3 = clip.trim(end + 1, 0)
    c = start == 0 ? c2 : c1 + c2
    c = end == 0 ? c : c + c3
    return c
}
}}

-註:~
関数の実行行は、関数の書式にしたがって記述されなければなりません。関数の書式は、関数の定義部分の「関数名(引数リスト)」から知ることができます。これは[[フィルタの書式]]と同様の形式です([[フィルタの書式]]を参照)。

**2.外部ファイル化して[[インポート>Import]]する方法 [#o7ded8e2]

もう1つの方法は、関数の定義部分を別の外部ファイル(以下、関数定義ファイルと記載)にして、メインのスクリプトにImportする方法です。

上で紹介した1スクリプト内に記述する方法では、複数の関数を利用する場合に、スクリプトが長くなり、見づらくなってしまいます。それに対し、こちらの方法では、関数の定義部分と実行行を分けるため、メインスクリプトが煩雑になるおそれはありません。

以下の手順で行います。

+関数の定義部分をメモ帳にコピー&ペーストします(複数の関数の貼り付けも可)。
+関数定義ファイルを、名前を付けて保存します。拡張子は、avsやavsiなどとしてください。
+メインスクリプト内に関数定義ファイルのImport行と関数の実行行を記述します。

-例:
--メインスクリプト
#code(){{
AviSource("hoge.avi") # ソースクリップ
Import("myFunctions.avs") # 関数定義ファイルのインポート
FilterRange(100, 199, "TomsMoComp(1,5,1)") # 関数の実行行
return last
}}

--関数定義ファイル(myFunctions.avs)
#code(){{
function FilterRange(clip "clip", int "start", int "end", string "filter")
{
    c1 = start < 2 ? clip.trim(0, -1) : clip.trim(0, start - 1)
    c2 = Eval("clip.trim(start, end)." + filter)
    c3 = clip.trim(end + 1, 0)
    c = start == 0 ? c2 : c1 + c2
    c = end == 0 ? c : c + c3
    return c
}
}}

*ユーザー定義関数のリスト [#z517c84e]

ユーザー定義関数のサンプルです(A-Z順)。

|~ |~関数名|~作者|~説明|~備考|
|''A''|[[AddRange]]|2ちゃんねるDTV板「DivX & Avisynth を絶賛しよう 3」の236さん|VirtualDubの編集設定ファイル(vcfファイル)を利用して、選択範囲を指定するための関数。|[[選択範囲の指定方法]]|
|~|ApplyZone|Avisynthを絶賛ιょぅょ Part15の160さん|指定した矩形領域だけにフィルタを適用する関数。||
|~|ApplyZoneRange|Avisynthを絶賛ιょぅょ Part15の160さん|ApplyZoneにフレーム範囲指定機能を追加するためのメタ関数。|ApplyZoneとセットで使用する。|
|~|[[AspectCrop]]|2ちゃんねるDTV板「お前らのショボイAvisynthスクリプト貼ってください」の230さん|アスペクト比を狂わせずにクロップする関数。||
|~|[[AudioTrim]]|IanB|音声のみのクリップをカット編集するための関数。|AviSynth 2.5.7 以降で利用可能。|
|''B''|[[bbb]]|2ちゃんねるDTV板「Avisynthを絶賛ιょぅょ PART12」の642さん|[[warpsharpプラグイン>warpsharpパッケージ]]のAutoDeintフィルタを利用したBob(60fps化)関数。|[[warpsharpプラグイン>warpsharpパッケージ]]が必要。|
|~|BitrateCalc|qwerpoi|ビットレート計算用関数||
|''E''|[[EasyVFR]]|carpenter17|簡単にVFRするためにタイムコード出力等をする関数群||
|''F''|FadeIn2Ex|[[kiraru2002:http://members.at.infoseek.co.jp/kiraru2002/]]|[[FadeIn2>Fade]]の機能拡張版。|[[Kiraru2002's Room:http://members.at.infoseek.co.jp/kiraru2002/#script]]|
|~|FadeOut2Ex|[[kiraru2002:http://members.at.infoseek.co.jp/kiraru2002/]]|[[FadeOut2>Fade]]の機能拡張版。|[[Kiraru2002's Room:http://members.at.infoseek.co.jp/kiraru2002/#script]]|
|~|[[FilterRange]]|[[minamina:http://nullinfo.s21.xrea.com/]]|指定範囲にフィルタをかける関数。|http://nullinfo.s21.xrea.com/#script|
|''G''|[[GetScriptName]]|stickboy、mf|現在使用中の AVS ファイルの名前(フルパス)を取得する関数。|[[Get the current script filename - Doom9's Forum:http://forum.doom9.org/showthread.php?t=66627]] より。|
|''I''|[[info_modoki]]|[[Kiraru2002:http://members.at.infoseek.co.jp/kiraru2002/]]|ビデオクリップの情報を表示する関数。AviSynthのバージョンに関係なく使用可能。|AviSynth 2.5以降では、[[Info]]フィルタを利用することができる。|
|''M''|[[MCBob]]|Did&#x00e9;e|動き補償付き Bob 関数。||
|''S''|[[ShowTimeCode]]|niiyan, 253|ビデオクリップにタイムコードを追加する関数。|SubtitleEx 版の ShowTimeCodeEx も収録。|

* ユーザー定義関数の投稿方法 [#d2f71838]

「ユーザー定義関数投稿用テンプレート」を使って、より簡単にユーザー定義関数用のページを作成することが可能です。手順は以下のとおりです:

+ページ上部メニューの [新規ページの作成] リンクをクリック
+「ページ新規作成」欄にページ名(関数名など)を入力して、[編集] ボタンをクリック。
+「雛型とするページ」の一覧からこのページを選択して、[読込] ボタンをクリック。
+テンプレートが読み込まれますので、あとは必要な部分を書き換えて使用してください。

作成し終わったら、上の「ユーザー定義関数のリスト」に追加してください。

PukiWiki の使い方が分からない場合は、[[PukiWiki]] や [[Help]] を参照してください。

* 関連ページ [#q8611415]

-[[Shared functions - Avisynth:http://avisynth.org/mediawiki/Shared_functions]]
-[[お前らのショボイAvisynthスクリプト貼ってくださいpart2(2ちゃんねる):http://pc11.2ch.net/test/read.cgi/avi/1153487392/]]((2008-04-03 00:07:33 時点での現行スレッドです。))
--同スレッドの過去ログは、[[2ちゃんねる過去ログ]]にあります。
-[[にーやんのブログ:http://niiyan.s8.xrea.com/blosxom/avisynth/function/]](ユーザー定義関数)
-[[にーやんのアーカイブ:http://niiyan.s8.xrea.com/avisynth/]]
--内容的には古いですが、「AviSynthスクリプト入門」の「3.関数をつくろう」にユーザー定義関数に関する説明があります。