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

#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ファイル)を利用して、選択範囲を指定するための関数。|[[選択範囲の指定方法]]|
|~|[[AnimeIVTC]]|thetoof|アニメ向けの逆テレシネ関数。||
|~|[[ApplyZone]]|Avisynthを絶賛ιょぅょ Part15の160さん|指定した矩形領域だけにフィルタを適用する関数。||
|~|[[ApplyZoneRange]]|Avisynthを絶賛ιょぅょ Part15の160さん|ApplyZoneにフレーム範囲指定機能を追加するためのメタ関数。|ApplyZoneとセットで使用する。|
|~|[[AspectCrop]]|2ちゃんねるDTV板「お前らのショボイAvisynthスクリプト貼ってください」の230さん|アスペクト比を狂わせずにクロップする関数。||
|~|[[AU_LinearInterlacedResizeMT:http://zoome.jp/VFR_maniac/diary/80/]] / [[AU_LinearInterlacedResize2MT:http://zoome.jp/VFR_maniac/diary/80/]]|VFR maniac|AviUtl 用インターレース維持リサイズプラグイン/インターレース維持リサイズ2プラグインを使用した「線型補間インターレース維持リサイズ関数」。|インターレース維持リサイズプラグイン/インターレース維持リサイズ2プラグインについては、[[がらくたハウスのがらくた置き場:http://www.geocities.jp/flash3kyuu/]]を参照。|
|~|[[AudioTrim]]|IanB|音声のみのクリップをカット編集するための関数。|AviSynth 2.5.7 以降で利用可能。|
|''B''|[[bbb]]|2ちゃんねるDTV板「Avisynthを絶賛ιょぅょ PART12」の642さん|[[warpsharpプラグイン>warpsharpパッケージ]]のAutoDeintフィルタを利用したBob(60fps化)関数。|[[warpsharpプラグイン>warpsharpパッケージ]]が必要。|
|~|[[BCSInterlacedResize:http://zoome.jp/VFR_maniac/diary/81/]]|VFR maniac|インターレース維持リサイズ関数。||
|~|[[BitrateCalc]]|qwerpoi|ビットレート計算用関数||
|''C''|[[ChangePlaySpeed]]|2ちゃんねるDTV板「お前らのショボイAvisynthスクリプト貼ってくださいpart2」の 103 さん|再生速度を変更する||
|~|[[ChubbyRain2:http://forum.doom9.org/showthread.php?p=589885#post589885]]|Lothar|虹色ノイズ除去関数。|[[Mug Funky 氏作の ChubbyRain 関数:http://forum.doom9.org/showthread.php?p=589012#post589012]]を改良したもの。|
|~|[[CopyField]]|「Avisynthを絶賛ιょぅょ PART13」の住人|あるフィールドに別のフィールドをコピーする||
|''D''|[[DebugFields]]|niiyan|フィルタ適用前後のフィールドを並べて表示する関数。||
|~|[[defringe:http://forum.doom9.org/showthread.php?t=149071]]|PeaceAnt|ワイドコンバージョンレンズを使って記録されたクリップにおける色収差(カラーフリンジ; color fringe)を修正する関数。||
|~|&aname(DeHalo_alpha);[[DeHalo_alpha:http://avisynth.org/mediawiki/DeHalo_alpha]]|Did&#x00e9;e |ハロー除去関数。||
|~|[[Demosaic:http://forum.doom9.org/showthread.php?t=146088]]|Archimedes|ベイヤパターン(モザイク)状のノイズを除去するための関数。|動作には、nnedi2 プラグインが必要。|
|~|[[DFMDeRainbow:http://www.aquilinestudios.org/scripts/]]|Scintilla|虹色ノイズ除去関数。||
|~|[[dfttestMC:http://forum.doom9.org/showthread.php?p=1308269#post1308269]]|anon32(thewebchat)|dfttest によるノイズ除去に動き補償を追加しようとする試み。|リンク先は、2009-07 時点での最新版。dfttest については、[[ノイズ除去(2D+時間軸)]] を参照。|
|~|[[dr:http://zoome.jp/VFR_maniac/diary/73/]]|VFR maniac|矩形範囲内置換関数。||
|~|[[DwShift:http://zoome.jp/VFR_maniac/diary/79/]] / [[UnDwShift:http://zoome.jp/VFR_maniac/diary/79/]]|VFR maniac|片フィールドロゴ除去補助関数。||
|''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]] より。|
|~|GradFun2DBmod|LaTo|バンディング低減関数。||
|~|GradFunkMirror|MugFunky、Alain2、Soulhunter|GradFun2db プラグインのボーダーの処理を修正する関数。|GradFun2db に関しては[[ノイズ除去(その他)]]を参照。|
|~|GrainFactory3|Did&#x00e9;e|ノイズ生成関数。||
|''H''|[[HighPassSharpen:http://forum.doom9.org/showthread.php?t=147175]]|GilGalaad|Photoshop のハイパスフィルタ風のシャープ関数。||
|~|[[HybridFuPP:http://forum.doom9.org/showthread.php?t=146632]]|FuPP|リサイズ/フィルタリング関数。|AviSynth 2.58 以降でのみ動作((min/max 関数および spline64resize を使用するため。))。|
|''I''|[[info_modoki]]|[[Kiraru2002:http://members.at.infoseek.co.jp/kiraru2002/]]|ビデオクリップの情報を表示する関数。AviSynthのバージョンに関係なく使用可能。|AviSynth 2.5以降では、[[Info]]フィルタを利用することができる。|
|''L''|[[LimitedSharpen]] / [[LimitedSharpenFaster>LimitedSharpen]]|Did&#x00e9;e|シャープ関数。||
|~|[[LSFmod>LimitedSharpen]]|LaTo|上記 [[LimitedSharpenFaster>LimitedSharpen]] の改造版。|元々は [[MCTemporalDenoise]] 内で利用することを想定して作られたもの。|
|~|[[LUTDeCrawl:http://www.aquilinestudios.org/scripts/]]|Scintilla|ドット妨害除去関数。||
|~|[[LUTDeRainbow:http://www.aquilinestudios.org/scripts/]]|Scintilla|虹色ノイズ除去関数。||
|''M''|[[Masked_DHA:http://forum.doom9.org/showthread.php?t=148498]]|`Orum|ハロー除去関数の [[DeHalo_alpha>#DeHalo_alpha]] にマスク機能を追加したもの。||
|~|[[MCBob]]|Did&#x00e9;e|動き補償付き Bob 関数。改造版の [[MCBobmod]] もある。||
|~|[[MCBobmod]]|thetoof|上記 [[MCBob]] の改造版。||
|~|[[MC_Spuds]]|Spuds, Did&#x00e9;e|動き補償付きノイズ除去関数。|[[MC Spuds - Avisynth:http://avisynth.org/mediawiki/MC_Spuds]]|
|~|[[MCTemporalDenoise]]|LaTo|動き補償付き時間軸ノイズ除去関数。|旧 Udegrain|
|~|[[MVBob]] / [[MVBobMod>MVBob]] / [[MVBobFaster>MVBob]]|scharfis_brain ほか|動き補償付き Bob 関数。||
|''R''|[[RangeFPS:http://forum.doom9.org/showthread.php?t=148549]]|JohannesL|クリップの一部をスピードアップまたはスローダウンするために作られた関数。|動作には、stickboy 氏作の [[jdl-util.avsi:http://avisynth.org/stickboy/]] が必要。|
|''S''|[[ShowTimeCode]]|niiyan, 253|ビデオクリップにタイムコードを追加する関数。|SubtitleEx 版の ShowTimeCodeEx も収録。|
|~|[[SlitScan:http://forum.doom9.org/showthread.php?t=147660]]|boffy (Andrew McAllister)|ビデオの各ラインを 1 フレームずつそれより上(または下)のラインよりも多く遅延させる。アナログの「スリットスキャン((参考: [[CG&映像用語の基礎知識:http://www.asr.co.jp/user/nobo/bk/bk05.html]]))」ビデオ効果と同じ。|奇数でクロップするため、入力クリップを RGB32 に変換する。|
|~|[[SoftSharpen:http://forum.doom9.org/showthread.php?t=149395]]|leon1789|画像の異なる領域に異なる効果を適用することを主眼とする関数。静止した領域をシャープ化し、動きをぼかし、時間軸ノイズ除去および空間軸ノイズ除去を行う。この戦略により、ビデオの圧縮率を保持しようと試みる。リンギング除去、バンディング低減、ブロックノイズ除去も実装。|SoftSharpen と EstimSoftSharpen の 2 つの関数を収録。参考: [[AviSynth ニュース(AviSynth Blog rev.3): SoftSharpen 6.4 (シャープ関数):http://news.avisynth.info/article/131710192.html]]|
|~|[[SRestore:http://forum.doom9.org/showthread.php?t=95924]]|MOmonster|ブレンドされたフィールドを伴うテレシネソースをリストア(復元)するための関数。||
|''T''|[[tc2Scenes:http://forum.doom9.org/showthread.php?p=1317470#post1317470]]|fvisagie|DV AVI (Type-1/2)を読み込み、タイムコードの切れ目からシーンファイルを生成する。|リンク先のバージョンは 1.0。|
|~|[[TempGaussMC]]|Did&#x00e9;e|時間軸のガウスぼかしをベースとした、動き補償付きの Bob インターレース解除関数。||
|~|[[TemporalDegrain]]|Did&#x00e9;e, Sagekilla|非常に低速で多段式の時間軸グレインノイズ除去関数||
|''U''|[[UnboxB:http://forum.doom9.org/showthread.php?t=148230]]|*.mp4 guy|ドット妨害除去関数。|画像サイズが 704x480 に制限されている(2009-07-07 現在)。|

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

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

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

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

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

* 関連リンク [#q8611415]

-[[Shared functions - Avisynth:http://avisynth.org/mediawiki/Shared_functions]]
--AviSynth オフィシャルウェブサイト内の関数共有ページ。
-2ちゃんねる「お前らのショボイAvisynthスクリプト貼ってください」スレッド
--最新のスレッドは、[[2ちゃんねる検索:http://find.2ch.net/]]で見つけることができます。過去ログは、[[2ちゃんねる過去ログ]]にあります。
-[[AviSynth ニュース(AviSynth Blog rev.3): 関数:http://news.avisynth.info/category/7236237-1.html]]
--最新の関数に関する情報が見つかるかもしれません。
-[[[関数] - にーやんのブログ 2:http://d.hatena.ne.jp/niiyan/searchdiary?word=%2a%5b%b4%d8%bf%f4%5d]]
--管理人の個人ブログの関数カテゴリ。