FilterRangeEx関数
説明 †
FilterRangeの機能拡張版で、JavaScriptとwarpsharpプラグインを使って、複数の指定範囲にフィルタをかけることができます。
作者 †
kiraru2002
コード †
test.avs †
LoadPlugin("warpsharp.dll")
AVISource("foo.avi")
ws = WScript("test.js", "JAVAScript")
ws.WSInvoke("FilterRangeEx", last, "ColorYUV(off_u=255)", 10, 19, 30, 39, 50, 59)
return last
test.js †
//************************************************************************************
//** FilterRangeEx(clip clip, string filter, int s1, int e1, int s2, int s2, ...) **
//** ( must be 0 <= s1 <= e1 < s2 <= e2 < s3 <= e3 <... ) **
//************************************************************************************
function FilterRangeEx(clip, filter, avs_args)
{
var start = new Array(), end = new Array();
var parm_err = false;
for (var i=2; i < FilterRangeEx.arguments.length; i+=2)
{
if (i+1 > FilterRangeEx.arguments.length
|| isNaN(FilterRangeEx.arguments[i])
|| isNaN(FilterRangeEx.arguments[i+1])
|| FilterRangeEx.arguments[i] > FilterRangeEx.arguments[i+1] )
{
parm_err = true; break;
}
else
{
start[start.length] = FilterRangeEx.arguments[i];
end[end.length] = FilterRangeEx.arguments[i+1];
}
}
for(i=1; i<start.length; i++)
{
if(start[i] <= end[i-1]) { parm_err=true; break; }
}
return parm_err ? AVS.MessageClip("parameter error") : FilterRange_exec(clip, filter, start, end);
}
function FilterRange_exec(clip, filter, start, end)
{
AVS.last = clip;
AVS.Eval("framecount = last.framecount()");
var framecount = AVS.framecount;
var range_first = (start[0]==0) ? "" : "Trim(0," + String(start[0]-1) + ") + ";
for(var i=0; i<start.length; i++)
{
var range_in = "Trim(" + String(start[i]) + "," + String(end[i]) + ")." + filter;
AVS.work = (i==0) ? AVS.Eval(range_first + range_in) : AVS.Eval("work + " + range_in);
if(i+1<start.length)
{
if(end[i]+1 < start[i+1])
{
AVS.range_out = AVS.trim(clip, end[i]+1, start[i+1]-1);
AVS.work = AVS.Eval("work + range_out");
}
}
}
if(end[end.length-1]+1 < framecount)
{
AVS.work = AVS.Eval("work + trim(" + String(end[end.length-1]+1) + ", last.framecount()-1)" );
}
return AVS.work;
}
動作に必要なプラグイン †
- warpsharp(WScript)
- warpsharpパッケージを参照。
使用例 †
上の「コード」を参照。
関連ページ †
最終更新日時: 2014-03-11 (火) 03:47:50 (4355d)