KTGMC - nekopanda/AviSynthCUDAFilters GitHub Wiki

KTGMCはQTGMCのCUDA移植版です。

インストール

動作には以下の3つのファイルとAviSynthNeoが必要です。

  • KTGMC.avsi
  • KTGMC.dll
  • KNNEDI3.dll

動作環境

compute capability 3.5以上のNVIDIA GPUで動作します。 お持ちのGPUの対応は https://developer.nvidia.com/cuda-gpus とかで確認してください。

使い方

OnCPUとOnCUDAで囲って使ってください。

SetMemoryMax(2048, type=DEV_TYPE_CUDA)
srcfile="..."
LWLibavVideoSource(srcfile)
OnCPU(2).KTGMC(SourceMatch=3, Lossless=2, tr0=1, tr1=1, tr2=1).OnCUDA(2)

OnCPUやOnCUDA、SetMemoryMaxの詳しい説明はAviSynthNeoを見てください。

メモリはデフォルトだと最大768MBになっていて、これでは足りないので、 SetMemoryMaxでCUDAメモリ2GBくらいにすると良いです。

GPUによってはそんなにメモリを搭載していないかもしれないので、 その場合は、Presetを上げて処理を簡単にするしかないです。 Preset="Fast"以上ならデフォルトの768MBでも性能低下は発生しないと思います。

関数

KTGMC(...)

QTGMCのCUDA版です。引数は基本的にQTGMCと同じです。対応状況は下の説明を見てください。入出力ともにCUDAフレームです。

追加引数

  • int useFlag = 0
    • 以下の値が使用可能
      • 0: 通常処理
      • 1: 前のフィールドのみを使って補間
      • 2: 後のフィールドのみを使って補間
    • DecombUCFで使用することを想定。通常は前後のフィールドを使って補間するので、前後に汚いフィールドがあると、汚いフィールドが混ざって出力されます。useFlagを1や2にすると、汚いフィールドを避けて補間フレームを生成することが可能です。
  • int dev = 0
    • 使用するGPU(0~)
  • int analyzeBatch = 4
    • KTGMC_MAnalyze1回の呼び出しで処理するフレーム数
    • 画像サイズやブロックサイズによっては、1フレームだけだと並列数が足りなくて、性能が落ちることがあるので、複数枚まとめて処理するようになってます。

KTGMC制限

今のところ、対応フォーマットはYV12(8bit)のみです。 縦横のピクセル数はどちらも4の倍数で入力してください。

未実装の機能が多くあります。 Presetは、他に何もパラメータを指定しなければ Slower~Faster に対応しています。 SourceMatchとLosslessにも対応しています。

対応していない機能を使おうとすると「Device unmatch」エラーが出ます。 パラメータを調整して対応している機能のみ使ってください。

対応してるTRは2までです。ノイズ除去まわりは対応していません。 動き検出のOverlapはBlocksizeの半分のサイズしか対応していません。 (つまりBlocksize=32のときは16、Blocksize=16のときは8のみ) Preset="Very Faster"以上はBlocksize=32でOverlap=8になるのでエラーになります。

EDIはNNEDI3にしか対応していません。Preset="Faster"でSourceMatchに1以上を指定すると 対応していないYadifを使おうとするので気をつけてください。

内部の処理は順方向にフレームが取得されるのに最適化されているので、 エディタで戻ったりする動作は遅いかもしれません。

KNNEDI3(...)

NNEDI3のCUDA版です。引数はNNEDI3と同じです。CPU処理にも対応しているので、CPU側で呼び出せばNNEDI3と同じ動作をします。

KNNEDI3制限

field=-2,dh=falseでしかテストしていないので他は多分動かないと思います。RGBやYUY2には対応していません。YUV planarなら動くと思いますが、YV12以外試していません。内部演算はint16/floatあるうちint16しか対応していないので16bitは確実に動きません。15bitまでなら動くかもしれません。fapprox&2指定がないとfloat演算になるので動きません。pscrnは2以上のみ対応です。optとthreadsオプションはCUDA動作では関係ありません。

KSMDegrain制限

以下の引数は以下の値のみ可能

  • tr: 1,2
  • pel: 1,2
  • blksize: 8,16,32