FilterRange
説明 †
- 指定範囲にフィルタをかける関数。
- 以下のコードは、にーやんによる改造版です。
- minamina 氏によるオリジナル版は以下から入手可能:
- FilterRange改に関しては、お前らのショボイAvisynthスクリプト貼ってくださいpart2の 272 から 282 を参照。
- FilterRange改は、「値が0より小さいときも使えるように変更」したもの。
作者 †
- minamina(オリジナル)
- にーやん(改造版)
コード †
2010-05-08 版 †
# FilterRange 改造版 function FilterRange(clip clip, int "start", int "end", string "filter") { # 最終フレーム番号の取得 final_frame = clip.FrameCount() - 1 # デフォルト値の設定 start = default(start, 0) # 指定なしなら先頭フレーム end = default(end, final_frame) # 指定なしなら最終フレーム filter = default(filter, "") # あとで例外処理に使う # 例外処理 Assert(start <= final_frame, "'start' should be less than or equal to " + String(final_frame) + ".") Assert(end <= final_frame, "'end' should be less than or equal to " + String(final_frame) + ".") Assert((end >= start) || (end == 0), "'end' should be more than or equal to start or 0.") Assert(filter != "", "'filter' should be specified.") # start から end までを選択してフィルタを適用し c に代入 c = Eval("clip.trim(start, end)." + filter) # start が 0 ならそのまま c のみ、1 ならフレーム 0 と c を結合、それ以外は start より前の範囲と c を結合 c = (start == 0) ? c \ : (start == 1) ? clip.trim(0, -1) + c \ : clip.trim(0, start - 1) + c # end が 0 か最終フレームなら c のみ、end が -1 かつ start が最終フレームなら c のみ、 # end が -1 なら c と start より後ろの範囲を結合、さもなければ c と end より後ろの範囲を結合 c = ((end == 0) || (end == final_frame)) ? c \ : ((end == -1) && (start == final_frame)) ? c \ : (end == -1) ? c + clip.trim(start + 1, 0) \ : c + clip.trim(end + 1, 0) # c を返す return c }
2008-03-06 版 †
# FilterRange 改造版 function FilterRange(clip clip, int "start", int "end", string "filter") { # 最終フレーム番号の取得 final_frame = clip.FrameCount() - 1 # デフォルト値の設定 start = default(start, 0) # 指定なしなら先頭フレーム end = default(end, final_frame) # 指定なしなら最終フレーム filter = default(filter, "") # あとで例外処理に使う # 例外処理 Assert(end <= final_frame, "'end' should be less than or equal to " + String(final_frame) + ".") Assert(filter != "", "'filter' should be specified.") # start から end までを選択してフィルタを適用し c に代入 c = Eval("clip.trim(start, end)." + filter) # start が 0 ならそのまま c のみ、1 ならフレーム 0 と c を結合、それ以外は start より前の範囲と c を結合 c = (start == 0) ? c \ : (start == 1) ? clip.trim(0, -1) + c \ : clip.trim(0, start - 1) + c # end が 0 か最終フレームなら c のみ、さもなければ c と end より後ろの範囲を結合 c = ((end == 0) || (end == final_frame)) ? c \ : c + clip.trim(end + 1, 0) # c を返す return c }
シンタックス †
FilterRange(clip clip, int "start", int "end", string "filter")
- 引数
- clip: ビデオクリップ
- start: 開始フレーム
- end: 終了フレーム
- filter: 適用するフィルタ
使用例 †
- フレーム 100 から 199 までに適用
FilterRange(100, 199, "ColorYUV(cont_u=1,cont_v=1)")
- フィルタの引数に二重引用符が含まれる場合
FilterRange(100, 199, """Convolution3D(preset="movieHQ")""") # 外側の二重引用符を 3 つ重ねる
注意 †
- 上記の使用例にもあるように、適用したいフィルタの引数に二重引用符が含まれる場合は、外側(つまり FilterRange の filter パラメータの方)の二重引用符を 3 つ重ねます。nullinfoの「よくある質問」を参照。
更新履歴 †
- 2003/02/17 FilterRange 公開(minamina)
- 2003/08/24 FilterRange 利用時の注意点を記載(minamina)
- 2008-03-26 最終フレームまでを範囲に指定すると 1 フレーム水増しされる問題に対応(にーやん)。
- 2010-05-08(にーやん)
- end = -1 の場合に 1 フレームだけフィルタを適用できるようにした(開始フレームのみにフィルタを適用できない問題への対応)。
- start が end より小さい場合(end = 0 を除く)と start が最終フレームより大きい場合にエラーを吐くようにした。
リンク †
最終更新日時: 2014-03-11 (火) 03:47:49 (3927d)