概要
指定フレームのみにフィルターを適用を適用したい場面ってありませんか?
もし特定のフレーム数(例えば8200~8299フレーム目だけ)にフィルターをかけたい場合、順当に処理するならば
AviSource("sample.avi")
Trim(0,8199) ++ Trim(8200,8299) ++ Trim(8300,0)
return last
という風に記載する必要があります。そんな複雑な記述でなないので毎回書いてもいいのだが、何度も使用するような場合には、やはり手間の防止や記述ミスを減らすためにユーザー定義関数を作って簡略化すると便利です。
制限
Trim 関数を使用しているので、クリップ情報(縦・横幅、色空間、等々)を変更するフィルターは使用できない。
使用例
Range_f ( filter = "ColorYUV ( gain_y = 50 )", fs = 200, fe = 997, mode = "A" )
// ColorYUV 関数を 200 フレームから、 997 フレームまで使用する。
引数
filter
使用したいフィルターを記入。
使用したいフィルターが string 形式 ⇒ """ で左右を囲むこと。
使用したいフィルターが string 形式以外 ⇒ " で左右を囲むこと。
fs, fe
フィルターを掛けたいフレームの指定。
fs : このフレームよりフィルター適用を開始する。
fe : このフレームで フィルター適用を終了する。
mode
フィルター適応方法(適用順番)の指定。
A : フィルター > クロップ > 結合
A以外 : クロップ > フィルター > 結合
関数
Function Range_F ( clip clip, string "filter", int "fs", int "fe", string "mode" ){
fs = default ( fs, 0 )
fe = default ( fe, 0 )
mode = default ( mode, "A" )
Clip_Filter = Eval ( "clip. " + filter )
Video_mode_A = ( fs == 0 )
\ ? ( fe == 0
\ ? Clip_Filter
\ : Clip_Filter.Trim(0,fe) ++ clip.Trim(fe+1,0) )
\ : ( fe == 0
\ ? clip.Trim(0,fs-1) ++ Clip_Filter.Trim(fs,0 )
\ : clip.Trim(0,fs-1) ++ Clip_Filter.Trim(fs,fe) ++ clip.Trim(fe+1,0) )
Video_mode_B = ( fs == 0 )
\ ? ( fe == 0
\ ? Eval( "clip." + filter )
\ : Eval( "clip.Trim(0,fe )." + filter + " ++ clip.Trim(fe+1,0)" ) )
\ : ( fe == 0
\ ? Eval( "clip.Trim(0,fs-1) ++ clip.Trim(fs,0 )." + filter )
\ : Eval( "clip.Trim(0,fs-1) ++ clip.Trim(fs,fe)." + filter + " ++ clip.Trim(fe+1,0)" ) )
mode == "A"
\ ? AudioDubEX ( Video_mode_A, clip )
\ : AudioDubEX ( Video_mode_B, clip )
return last
}
更新履歴
20200422
初公開
コメント