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 (3927d)