Skip to content

KFMDeint

Nekopanda edited this page Nov 24, 2018 · 13 revisions

KFMDeint(KFMDeint.avsi)はKFMとKTGMCを使ったインターレース解除フィルタ。

内部で逆テレシネQTGMCの補間シーンチェンジ周辺のフレーム置き換え(DecombUCF)、KTGMC、KSMDegrainを呼んでいる。

KFMDeint(clip src, int "mode", int "pass", string "preset", float "thswitch", bool "ucf", bool "nr", bool "svp", string "filepath", bool "cuda", int "dev", int "threads", bool "show")

  • clip src
    • ソースクリップ(インターレース)
  • int mode = 0
    • 処理モード。以下の値が使用可能
      • 0: VFR
      • 1: QTGMCによる60fps
      • 2: KFMによる24fps
      • 3: 24/30/60fpsの3クリップモード
      • 4: VFR(60fps出力)
    • mode=3は、24p,30p,60pの3クリップを返す。(正確には、引数にfpsを渡すと該当クリップを返す関数を返す。)
  • int pass = 0
    • マルチパス使用時のパス。以下の値が使用可能。
      • 0: マルチパス不使用。リアルタイムで処理する。mode=0,4は同じ処理となる(60fpsクリップが返る)。
      • 1: 逆テレシネパターン解析(mode=0,2,4で使用可能)
      • 2: タイムコード生成(pass=1の結果が必要。mode=0,4で使用可能)
      • 3: フレーム出力(mode=2ではpass=1の結果が必要。mode=0,4ではpass=2の結果が必要)
    • pass=1,2は、KFMDeintの出力クリップの最後までフレームを取得すると、解析結果がファイルに書き込まれる。そのファイルがその次のパスで必要となる。
    • マルチパスの利点
      • 精度が若干上がる
      • 逆テレシネのパターンがなるべく固定される
      • VFRタイムコードが出力できる
  • string preset = (Height(src) >= 720) ? "Faster" : "Slower"
    • Q(K)TGMCのpreset
  • float thswitch = 0.5
    • 24fps/30fpsと60fpsの切り替えしきい値
  • bool ucf = false
  • bool nr = false
    • KSMDegrainによるノイズリダクションを有効にするか
  • bool svp = false
    • SVPによるフレーム補間を有効にするか
    • Avisynth and Vapoursynth pluginsが必要
    • SVPをサポートするのはmode=2または4のみ。mode=2の場合、補完された60fpsクリップが返る
  • string filepath = "kfmdeint"
    • マルチパス使用時の中間ファイル出力パス。中間ファイル名は以下のようになる( kfmdeint の部分がfilepathで指定した名前に置き換わる。)
      • テレシネパターン解析結果(pass=1の出力): kfmdeint.result.dat
      • フレーム継続時間(pass=2の出力): kfmdeint.duration.txt
      • タイムコード(pass=2の出力): kfmdeint.timecode.txt
  • bool cuda = false
    • CUDAで処理するか
  • int dev = 0
    • CUDAで処理する場合のGPU番号
  • int threads = 6
    • CPUで処理する場合のスレッド数
  • bool show = false
    • 左上に情報を表示する

マルチパスによるVFR化の例

まず、pass=1を実行(以下のクリップを最後のフレームまで実行する)

LWLibavVideoSource("ソースパス").OnCPU(2)
KFMDeint(mode=0, pass=1, cuda=true)

これで、 kfmdeint.result.datが出力される。 次にpass=2を実行(以下のクリップを最後のフレームまで実行する)

LWLibavVideoSource("ソースパス").OnCPU(2)
KFMDeint(mode=0, pass=2, cuda=true)

これで、 kfmdeint.duration.txtと kfmdeint.timecode.txtが出力される。 次にpass=3でエンコード

LWLibavVideoSource("ソースパス").OnCPU(2)
KFMDeint(mode=0, pass=3, cuda=true)

エンコード結果に kfmdeint.timecode.txtを反映させればVFR化が完了。

mode=3の例

LWLibavVideoSource("ソースパス").OnCPU(2)
c = KFMDeint(mode=3, cuda=true)
c(24) # 24fpsクリップ
c(30) # 30fpsクリップ
c(60) # 60fpsクリップ