特定の範囲にフィルタをかける のバックアップの現在との差分(No.6)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
以下のような方法を使えば、特定の範囲のフレームだけにフィルタをかけることができます。

#contents

#br
**ApplyRangeフィルタ [#s2e58427]
* ApplyRangeフィルタ [#s2e58427]

AviSynth内蔵のApplyRangeフィルタを使用する方法です。AviSynth 2.5.1以降のバージョンで利用できます。

詳しくは、ApplyRangeのページを参考にしてください。[[Animate]]フィルタのページも参照。

**Trimフィルタを利用する [#y19cdc39]
* Trimフィルタを利用する [#y19cdc39]

Trimフィルタを利用して、特定の範囲のフレームにフィルタをかけることができます。以下のような手順で行います。

+Trimフィルタを使って、フィルタをかける範囲とかけない範囲に分割します
+フィルタをかけたい範囲にだけフィルタをかけます。
+演算子+(または[[Splice]])で、分割したクリップを結合しなおします。

-例1(300フレームあるクリップの100-199フレームにのみフィルタをかける)
 c1 = Trim(0, 99)
 c2 = Trim(100, 199).ColorYUV(cont_u=1,cont_v=1) #この範囲にフィルタをかける
 c3 = Trim(200, 299)
 c1 + c2 + c3

-例2(先頭から99フレームまでにのみフィルタをかける)
 c1 = Trim(0, 99).ColorYUV(cont_u=1,cont_v=1) #この範囲にフィルタをかける
 c2 = Trim(100, 299)
 c1 + c2

-例3(200フレームから最終フレームまでにのみフィルタをかける)
 c1 = Trim(0, 199)
 c2 = Trim(200, 299).ColorYUV(cont_u=1,cont_v=1) #この範囲にフィルタをかける
 c1 + c2

**FilterRange関数 [#mb84d501]
-"FilterRange -指定範囲にフィルターをかける関数"([[nullinfo:http://nullinfo.s21.xrea.com/]])
--http://nullinfo.s21.xrea.com/#script
* FilterRange関数 [#mb84d501]

-関数
 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
 }
ユーザー定義関数のFilterRangeを利用すれば、指定範囲にフィルタをかけることができるようになります。この関数は、上記の[[Trimフィルタを利用する>#y19cdc39]]で紹介した方法を、1つにまとめたものであると言うことができます。

-書式
 FilterRange(clip "clip", int "start", int "end", string "filter")
詳しくは、[[作者のサイト:http://nullinfo.s21.xrea.com/]]、および、当サイトの[[FilterRange]]のページを参照。

-引数
--clip: ビデオクリップ
--start: 開始フレーム
--end: 終了フレーム
--filter: 適用するフィルタ
-作者: minamina
-URL1: http://nullinfo.s21.xrea.com/#script
-URL2: [[FilterRange]]

-使用例
--1つのスクリプト内に記述する場合
 FilterRange(100, 199, "ColorYUV(cont_u=1,cont_v=1)")
 
 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
 }
--関数定義ファイルを[[Import]]する場合
 Import("FilterRange.avs")
 FilterRange(100, 199, "ColorYUV(cont_u=1,cont_v=1)")
* JDL_ApplyRange関数 [#zb4dacc1]

-使用上の注意
--[[nullinfo:http://nullinfo.s21.xrea.com/]]の"よくある質問"を参照。~
http://nullinfo.s21.xrea.com/#script
-作者: stickboy
-URL: http://www.avisynth.nl/stickboy/

**FilterRangeExプラグイン [#vc4fe447]
-"FilterRangeEx"([[Kiraru2002's Room:http://members.at.infoseek.co.jp/kiraru2002/]])
--http://members.at.infoseek.co.jp/kiraru2002/tutorial/tutorial2.html#arguments_4
JDL_ApplyRangeは、jdl-range.avsiの中に含まれています。jdl-range.avsiには、他にも、クリップ内のある範囲で動作する関数が含まれています。

**その他 [#b0347b47]
***JDL_ApplyRange関数ほか [#zb4dacc1]
-"JDL_ApplyRange"ほかjdl-range.avsiに含まれる関数(stickboy's AviSynth Stuff)
--http://www.avisynth.org/stickboy/

-使用例
 Import("jdl-range.avsi") #オートローディングしたときは不要
 Import("jdl-util.avsi") #オートローディングしたときは不要
 JDL_ApplyRange(123, 456, "ColorYUV(cont_u=1,cont_v=1)")

JDL_ApplyRangeでは、jdl-util.avsiに含まれる関数も使われています。そのため、jdl-range.avsiだけでなく、jdl-util.avsiも必要になります。((拡張子がavsiのファイルは、オートローディング用のpluginsフォルダに入れると、自動的に読み込まれます。オートローディングについては、[[外部プラグインを使う]]を参照。))

***FilterRangeEx関数 [#ze26b72a]
-"FilterRangeEx"([[Kiraru2002's Room:http://members.at.infoseek.co.jp/kiraru2002/]]): JavaScriptと[[warpsharpプラグイン>warpsharpパッケージ]]を使って、複数の範囲を指定できるFilterRange。
--http://members.at.infoseek.co.jp/kiraru2002/tutorial/tutorial2.html#arguments_5
* FilterRangeExプラグイン(ApplyRangeEx/FilterRangeEx) [#vc4fe447]

***FilterRangePlus関数 [#w62f904c]
-"FilterRangePlus"(niiyan): 再帰呼び出しを使って、複数の範囲を指定できるFilterRange
--http://niiyan.s8.xrea.com/blosxom/avisynth/function/20040510-2.htm
-説明: FilterRangeExプラグインには、ApplyRangeExとFilterRangeExという2つのフィルタが収録されています。これらのフィルタは、ApplyRangeとFilterRangeの機能を拡張したもので、複数の指定範囲にフィルタを適用することができます。また、「両者の違いは、フィルタの指定文字列に、パラメタ値と共に指定するか、別に指定するか」にあります。
-作者: kiraru2002
-URL: [[アーカイブ]]を参照。

* FilterRangeEx関数 [#ze26b72a]

-説明: FilterRangeの機能拡張版で、JavaScriptと[[warpsharpプラグイン>warpsharpパッケージ]]を使って、複数の指定範囲にフィルタをかけることができます。
-作者: kiraru2002
-URL: [[FilterRangeEx関数]]

* FilterRangePlus関数 [#w62f904c]

-説明: FilterRangeの機能拡張版で、再帰呼び出しを使って、複数の指定範囲にフィルタをかけることができます。
-作者: にーやん
-URL: http://d.hatena.ne.jp/niiyan/20040510/1084120941

* HowToApplyFilterToManySingleFrames [#qf7268a2]

ConditionalFilterとConditionalReaderを組み合わせて、たくさんのフレームや範囲にフィルタを適用する方法。[[HowToApplyFilterToManySingleFrames]]、および[[HowToApplyFilterToManySingleFrames - にーやんのブログ 2:http://d.hatena.ne.jp/niiyan/20050901/1125503607]]を参照。