cufilters (Aviutl用 CUDAフィルタ集)
NVEncにはいろいろなGPUフィルタをつけたのだけど、多くのフィルタはAviutlのCPUフィルタからのGPU版への移植なので、パラメータの効果の確認とか調整とかはAviutl版のほうで確認すればいい。ただ、一部のフィルタはNVEncにしかない(knnとか)ので、そういうフィルタは、エンコードしてみないと結果がわからなくて、パラメータの調整がしにくいのが不便だった。
そこで、GPUフィルタをそのままGPUで動かせるAviutlのフィルタを作ってみた。これでパラメータの効き具合もわかるようになるかと。
概要
NVEncにあるGPUフィルタの一部をAviutlのフィルタから使えるようにした。使えるGPUフィルタはいまのところ6つ。
・リサイズ
・ノイズ除去(knn)
・ノイズ除去(pmd)
・unsharp
・エッジレベル調整
・バンディング低減
CUDA版自動フィールドシフトは、本当はつけてみたかったのだけど、ちょっとかなり複雑になるのでひとまず放置です…。
処理手順としては、こんな感じ。
1. 一度YC48からYUV444(16bit)に変換
2. CPUからGPUへ転送
3. 6つのフィルタのうち、有効なフィルタ処理をGPUで実行 (内部形式: YUV444(16bit))
4. GPUからCPUへ転送
5. YUV444(16bit)からYC48に戻す
処理の速さは、GPUを使っているので速い!と言いたいところだけど、残念ながらそうでもない。
というのも、やはりYUV444(16bit)とYC48の間の変換という余計な処理を挟んでいるし、さらにはとっても遅いCPU - GPU間のデータ転送を行っているので、どうしても時間がかかってしまう。
一応、複数のフィルタ処理をGPU上で一気に行えるので、フィルタをそれぞれ実行してCPU - GPU間のデータ転送を繰り返すのと比べれば、確実に速いはず。とはいえ、最近のCPUならきっとCPUのほうが速いかもで、やっぱりパラメータ調整用かなあ…。(具体的な速度はまだ測れてない)
GPUを使うとなると、CPU - GPU間のデータ転送が必要になるけど、CPUもGPUも年々どんどん速くなっているのにPCIeはいまいち速くならないから、どうしてもCPU - GPU間のデータ転送のせいで遅い、ということになりがち。まあ、計算させながら裏で転送する、というのが常識らしいのだけど、異常に面倒なコードになるので勘弁してほしい…。
設定画面
・フィルタが有効になると、一番上に使用されているデバイス名が表示されます。
・フィルタ名の横のチェックボックスをオンで有効になります。
・フィールド処理にチェックをすると、フィールドごとに処理を行います(インタレ維持モード)。

基本動作環境
Windows 7,8,8.1,10 (x86/x64)
Aviutl 0.99g4 以降
NVIDIA製 GPU GeForce Kepler以降 (GT/GTX 6xx 以降)
NVIDIA グラフィックドライバ 378.66以降
※NVEnc.auoの動作している環境なら動くはずです。
いつもの注意書き
無保証です。自己責任で使用してください。
cufiltersを使用したことによる、いかなる損害・トラブルについても責任を負いません。
ダウンロード>>
ダウンロード (ミラー) >>
OneDriveの調子がいまいちの時はミラー(GDrive)からどうぞ。同じものです。
ソースはこちら>>
そこで、GPUフィルタをそのままGPUで動かせるAviutlのフィルタを作ってみた。これでパラメータの効き具合もわかるようになるかと。
概要
NVEncにあるGPUフィルタの一部をAviutlのフィルタから使えるようにした。使えるGPUフィルタはいまのところ6つ。
・リサイズ
・ノイズ除去(knn)
・ノイズ除去(pmd)
・unsharp
・エッジレベル調整
・バンディング低減
CUDA版自動フィールドシフトは、本当はつけてみたかったのだけど、
処理手順としては、こんな感じ。
1. 一度YC48からYUV444(16bit)に変換
2. CPUからGPUへ転送
3. 6つのフィルタのうち、有効なフィルタ処理をGPUで実行 (内部形式: YUV444(16bit))
4. GPUからCPUへ転送
5. YUV444(16bit)からYC48に戻す
処理の速さは、GPUを使っているので速い!と言いたいところだけど、残念ながらそうでもない。
というのも、やはりYUV444(16bit)とYC48の間の変換という余計な処理を挟んでいるし、さらにはとっても遅いCPU - GPU間のデータ転送を行っているので、どうしても時間がかかってしまう。
一応、複数のフィルタ処理をGPU上で一気に行えるので、フィルタをそれぞれ実行してCPU - GPU間のデータ転送を繰り返すのと比べれば、確実に速いはず。とはいえ、最近のCPUならきっとCPUのほうが速いかもで、やっぱりパラメータ調整用かなあ…。(具体的な速度はまだ測れてない)
GPUを使うとなると、CPU - GPU間のデータ転送が必要になるけど、CPUもGPUも年々どんどん速くなっているのにPCIeはいまいち速くならないから、どうしてもCPU - GPU間のデータ転送のせいで遅い、ということになりがち。まあ、計算させながら裏で転送する、というのが常識らしいのだけど、異常に面倒なコードになるので勘弁してほしい…。
設定画面
・フィルタが有効になると、一番上に使用されているデバイス名が表示されます。
・フィルタ名の横のチェックボックスをオンで有効になります。
・フィールド処理にチェックをすると、フィールドごとに処理を行います(インタレ維持モード)。

基本動作環境
Windows 7,8,8.1,10 (x86/x64)
Aviutl 0.99g4 以降
NVIDIA製 GPU GeForce Kepler以降 (GT/GTX 6xx 以降)
NVIDIA グラフィックドライバ 378.66以降
※NVEnc.auoの動作している環境なら動くはずです。
いつもの注意書き
無保証です。自己責任で使用してください。
cufiltersを使用したことによる、いかなる損害・トラブルについても責任を負いません。
ダウンロード>>
ダウンロード (ミラー) >>
OneDriveの調子がいまいちの時はミラー(GDrive)からどうぞ。同じものです。
ソースはこちら>>
スポンサーサイト