Inverse Telecine Filters - nekopanda/AviSynthCUDAFilters GitHub Wiki
KFM(KFM.dll)の逆テレシネ関連フィルタ
解析用にpaddingしたクリップ(KFMSuper等の入力に必要)
- CUDA対応: Yes
- clip
- ソースクリップ
フィールドマッチング解析クリップ(KPreCycleAnalyze等の入力に必要)
- CUDA対応: Yes
- clip
- ソースクリップ
- clip
- ソースクリップをKFMPadしたクリップ
KFMSuperから動きのない部分の縞を削除する
- CUDA対応: Yes
- clip
- KFMSuperクリップ
- int thY = 10
- 縞を消すY成分の動きしきい値
- int thC = 8
- 縞を消すChroma成分の動きしきい値
フレームごとのフィールドマッチング値を計算(旧バージョンのKFMFrameAnalyzeに相当するフィルタ)
- CUDA対応: Yes
- clip
- KFMSuperクリップ
- int threshMY = 20
- Y成分の動きしきい値
- int threshSY = 12
- Y成分の縞しきい値
- int threshMC = 24
- Chroma成分の動きしきい値
- int threshSC = 16
- Chroma成分の縞しきい値
KFMSuperの可視化デバッグ用フィルタ。計算はKPreCycleAnalyzeと同じだが、可視化されたクリップを出力する。
- CUDA対応: No
- 引数はKPreCycleAnalyzeと同じなので説明は省略
KPreCycleAnalyzeの結果をファイル出力。最後のフレームを出力するとファイル出力が完了する。
- CUDA対応: No
- clip
- KPreCycleAnalyzeクリップ
- string filepath = "kfm.txt"
- 出力ファイルパス
出力はテキストファイルで以下の形式
#shima,large shima,move
<shima>,<large shima>,<move>
<shima>,<large shima>,<move>
...
N行目(最初のコメント行は除く)のshimaとlarge shimaは、ソースをDoubleWeave()したクリップのN番目のフレームの縞の数。large shimaの方はしきい値がshimaの3倍で判定された大きな(=よりはっきりした)縞の数。 N行目のmoveは、ソースをSeparateFields()したクリップのN番目のフレームとN+2番目のフレームの差分。
使用例
LWLibavVideoSource(srcpath,dominance=1,repeat=True).OnCPU(4)
KFMSuper(KFMPad()).KCleanSuper().KPreCycleAnalyze().OnCUDA(4).KFMDumpFM("kfm_dump.txt")
KFMCycleAnalyze(clip, clip, int "mode", float "lscale", float "costth", float "adj2224", float "adj30", int "range", float "thresh", int "past", float "th60", float "th24", float "rel24", string "filepath", int "debug")
KPreCycleAnalyzeの結果から、プルダウンパターンをサイクルごとに判定
- CUDA対応: No
- clip
- KPreCycleAnalyzeクリップ
- clip
- ソースクリップ
- int mode = 0
- 0: 通常(リアルタイム最良)
- 1: マルチパスの1パス目(出力はリアルタイム最良)
- マルチパスは前後のパターンからの推定を使ってパターンを安定化させる効果がある。1パス目は判定結果を蓄積して、2パス目で前後のパターンも考慮した結果を出力する。1パス目は最後のフレームまで出力する必要がある。
- 2: マルチパスの2パス目(前後のパターンも考慮した結果を出力)
- デフォルト: 0
- float lscale = 5.0
- 大きい縞(KFMFrameAnalyzeで縞しきい値の3倍以上ある縞)を加味するときの係数。大きいほど「大きい縞」を重要視する。
- float costth = 1.5
- 24p判定コスト閾値。大きいと判定が厳しくなり、コストの数値が大きくなる
- float adj2224 = 0.5
- 縞なし24fpsの重み付け(数値を大きくすると縞なし24fpsパターンが選ばれにくくなり、小さいと選ばれやすくなる)
- float adj30 = 1.5
- 30fpsの重み付け(数値を大きくすると30fpsパターンが選ばれにくくなり、小さいと選ばれやすくなる) 以下、マルチパス用のパラメータです。
- int range = 5
- float thresh = 1.0
- この2つはパターン切り替え判定のパラメータです。パターン切り替えは、(現在のサイクルを含む過去range個のサイクルのコストの和) > (thresh * range)のときに発生する。1サイクルは30fpsで5フレーム分です。
- 縞なし24fpsと30fpsが適切に切り替わるには
adj2224 < thresh < adj30
にする必要がある。
- int past = 180
- パターン切替時に、過去のパターンも、切り替え後のパターンが最良パターンと同じなら、変更する。このときに遡って適用するサイクル数です。
- float th60 = 3.0
- float th24 = 0.1
- float rel24 = 0.2
- この3つは、60fps判定用のパラメータです。以下のように判定する。
- コストがth60以上なら60fps
- コストがth24以下かつ非信頼度がrel24以下なら24fps
- それ以外は前後から推定
- この3つは、60fps判定用のパラメータです。以下のように判定する。
- string filepath = "kfm_cycle.dat"
- マルチパスでは、1パス目の結果をファイル出力して、2パス目でそのファイルを読む。ファイル出力するファイル名です。
- int debug = 0
- デバッグ&パラメータ調整用です。1にすると、1パス目の判定途中データを"(filepath).debug"に、最終判定結果を"(filepath).pattern"に出力する。
KFMCycleAnalyzeの結果から、ソースクリップを逆テレシネ変換する。
- CUDA対応: Yes
- clip
- ソースクリップ
- clip
- KFMCycleAnalyzeクリップ
- bool show = false
- 左上に判定結果を表示
KFMCycleAnalyzeの結果から、KFMSuperクリップを逆テレシネ変換する。
- CUDA対応: Yes
- clip
- KFMSuperクリップ
- clip
- KFMCycleAnalyzeクリップ
KTelecineクリップで縞が残った部分をbobクリップから貼り付けるためのフラグを作成
- CUDA対応: Yes
- clip
- KTelecineSuperクリップ
- float thY = 60
- Y成分の縞閾値(大きいと縞判定部分が小さくなり、小さいと大きくなる)
- float thC = 80
- UV成分の縞閾値(大きいと縞判定部分が小さくなり、小さいと大きくなる)
KSwitchFlagクリップでbobクリップから貼り付ける部分があるかどうかを返すクリップ
- CUDA対応: Yes
- clip
- KSwitchFlagクリップ
KSwitchFlagをマスク化するフィルタ
- CUDA対応: Yes
- clip
- ソースクリップ(画面サイズなどの情報だけ取得するのに使う)
- clip
- KSwitchFlagクリップ
しきい値以上の縞部分をブレンドにより縞除去する
- CUDA対応: Yes
- clip
- KFMPadした24pクリップ
- clip
- KTelecineSuperクリップ(縞判定に使う)
- float thY= 6
- Y成分の縞判定しきい値。この値が小さいと、より広範囲を縞ありと判定し、除去する。
- float thC= 6
- UV成分の縞判定しきい値。この値が小さいと、より広範囲を縞ありと判定し、除去する。
KTelecineクリップの縞部分をbobクリップに置き換え
- CUDA対応: Yes
- clip
- 24pクリップ
- clip
- 60pクリップ
- clip
- KFMCycleAnalyzeクリップ
- clip
- KCombeMaskクリップ
- clip
- KContainsCombeクリップ
KFMSwitch(clip, clip, clip, clip, clip, clip "ucfclip", float "thresh", int "mode", string "filepath", bool "show", bool "showflag")
60pフレームと30pフレームと24pフレームを切り替える。出力は60p固定。
- CUDA対応: Yes
- clip
- 60pクリップ
- clip
- KFMCycleAnalyzeクリップ
- clip
- 24pクリップ
- clip
- 24pのKCombeMaskクリップ
- clip
- 24pのKContainsCombeクリップ
- clip
- 30pクリップ
- clip
- 30pのKCombeMaskクリップ
- clip
- 30pのKContainsCombeクリップ
- clip
- KDecombUCF60クリップ
- float thswitch = 3.0
- 60pと24p/30pを切り替えるしきい値。KFMCycleAnalyzeが出力する24p/30pコスト(大きいほど24p/30pでない可能性が高い)を元に、しきい値を超えるサイクルは60pフレーム、しきい値以下のサイクルは24p/30pフレームを出力する。
- int mode = 0
- 0: 通常出力
- 1: フレームにフレーム継続時間を付加して出力(VFR用)
- 2: フレーム継続時間のみ出力(VFR用)
- デフォルト: 0
- string filepath = "kfmswitch"
- VFR情報出力ファイルパス
- タイムコードは filepath + "timecode.txt" に、フレーム継続時間は filepath + "duration.txt" に出力される。
- VFR情報出力ファイルパス
- bool show = false
- 判定結果を左上に表示する
- bool showflag = false
- 24p/30p判定されたフレームで、60pフレームから取得される部分を青く表示する。(CUDA非対応)
フレーム継続時間を元に60pクリップから有効フレームのみ抽出。
- CUDA対応: Yes
- clip
- 60pクリップ
- string filepath = "kfmswitch"
- KFMSwitchの出力したVFR情報ファイルのパス
- VFR情報のうちフレーム継続時間(filepath + "duration.txt")を読む
- KFMSwitchの出力したVFR情報ファイルのパス