NVIDIAのKepler以降のGPUに載っているNVEncを使ってみるはなし。
こんなかんじのログが出る。
最近は、GPUに動画のハードウェアデコード・エンコード機能を載っけるのが流行っているらしく、IntelのQSV、AMDのVCE同様、NVIDIAのKepler以降のGPUにもNVEncと呼ばれるハードウェアエンコード機能がついている。GPUの有効活用、という点ではこういう機能もぜひ使っていきたいところ。
↑あまり有効利用してないこいつを有効に活用するのだ…。
しかし、これまでGeforceではこの機能がロックされていて、自由に使うことができなかった。(Tesla買えということですね、わかります)
が、少し前、グラフィックドライバの更新によりやっとGeforceでも使えるようになった、ということを教えていただいたので、早速NVEncを使ってみることにした。
いつもどおり、配布されているサンプルプログラムをAviutlの出力プラグインとして改造して、実験してみる。
拡張 NVEnc 出力 NVIDIAのハードウェアエンコーダ、NVEncによる出力プラグインです。
必須動作環境 Windows Vista,7,8,8.1 (x86/x64)
Aviutl 0.99g4 以降
NVEncが載ったハードウェア
NVIDIA製 GPU GeForce Kepler世代以降 (GT/GTX 6xx 以降)
※GT 63x, 62x等はFermi世代のリネームであるため非対応なものがあります。
GPU-Zでみて、GPU: GK1xx ならば問題ないはずです。
※NVIDIA グラフィックドライバ 334.89以降がインストールされていること ※XPではたぶん動作しません。 まあ、もう気にしなくていいよね、XP。余命あとすこしだし。
使用可能かは設定画面で確認できます。
←使用可能
←使用不可
使用方法 ダウンロードしたら解凍して出てくるauo_setupを実行してください。
以下のものを必要なら自動でダウンロード・インストール・配置します。
・.NET Framework 4.0 Client Profile
・neroaacenc
・L-SMASH
・msvcr120.dll
・msvcp120.dll
NVEncは.NET 4.0系を使用します。 ただ、通常はWindows Updateによりインストールされているはずです。
いつもの注意事項など 無保証です。自己責任で使用してください。拡張 NVEnc 出力 (NVEnc.auo)を使用したことによる、いかなる損害・トラブルについても責任を負いません。 機能・特徴等 ・NVEncによる高速エンコード
・CQP / CBR / VBR モード
・インタレ保持(PAFF)エンコード
・色空間情報の指定 (H.264 VUI Info)
・自動フィールドシフト対応
・高速化
- 色空間変換のSIMD対応 (SSE2~AVX2)
- 入力バッファによるGPUへの転送レイテンシの遮蔽
・設定ファイルの保存
・QSVEncと同様に、各種音声エンコーダに対応
・音声同時変換
・エンコード一時停止
・残り時間・経過時間表示
・ログ自動保存
[非対応 & 対応予定なし機能]
・Aviutlのコピーフレーム
・Aviutlのキーフレーム
・オーディオディレイカットの「映像追加」モード
解決できていない問題 [未実装] minQP / maxQPの指定ができない問題。
[バグ] nvCuda.dllがない環境でAviutlを実行すると、「nvCuda.dllが存在しません」と出てAviutlを起動できない問題。 (0.01で修正)
…すみません、そのうち直します。
エンコードのさらなる高速化 ~GPUへのデータ転送時間の遮蔽とか~
NVEncでの処理は、順に
1. Aviutlでのデコード
2. Aviutlのフィルタチェーン
3. AviutlからYUY2で受け取りNV12に変換
4. cuMemcpyHtoDにより、フレームをGPUに転送
5. GPUにエンコード命令を発行
6. GPUからの出力をファイルに書き出し
となる。で、ここでは2のフィルタは使わないとして考えてみる。
こうしたハードウェアエンコーダを使用する場合、速度は多くの場合CPUのデコード処理によって律速されてしまう。つまりエンコードの速度はいかに速くデコードし、エンコーダにフレームを渡すかにかかっている。
そこで、「4:GPUへの転送 + 5:エンコード命令発行」を別のスレッドに分け、並列に実行することにより、メインスレッドがデコード~NV12変換に専念できるようにした。やはりGPUへのフレーム転送は遅いようで、この工夫によってGPU転送のレイテンシを遮蔽し、そこそこ(10%程度)高速化できる。
GPUへデータを転送する、というコードを書くだけならまったく簡単で問題ない。ところが、GPUへの転送を別スレッドにやらせるコードを書くにはやっぱりわりと面倒。GPUへの転送CPUメモリとGPUメモリがわかれていることのデメリットがこうした工夫をしなければならないことにあると思う。AMDの言うHSAのメリットというののひとつは、統一メモリによりこうした問題がなくなってコードが書きやすくなる、ということなんだと思う。
(膨大な数の細かい独立したタスクがあって、その一部でGPUを使用するみたいな場合にはあまり気にしなくていい…つまり、やらせるタスクにもよるのだけど…)
またいつもどおり、YUY2→NV12変換はSSE2~AVX2を使用して高速化している。
設定画面 スクリーンショット 検証環境 Win7 x64
Intel Core i7 4770K @ 4.4GHz
Asrock Z87 Extreme4
GeForce GTX 660
DDR3-2600, 16GB RAM, 10-12-12-31-2
NVIDIA グラフィックドライバ 335.23
Aviutl 1.00
NVEnc 0.00 (335.23ドライバ)
QSVEnc 1.20 (3412ドライバ)
x264guiEx 2.06
x264 8bit, x64 rev2409 POP氏ビルド
ソース この大空に、翼をひろげて FLIGHT DIARY オープニングムービー(Downloadできるやつ)
VC-1, 1280x720p, 30.00fps, 3140frmaes, 約1分45秒, 70.5MB
エンコード設定 NVEnc
CQP 28:32:35
QSVEnc
CQP 25:28:33
x264
--crf 27.3 --preset slow --psy-rd 1.0:0.2 --aq-strength 0.5
この設定で映像ビットレートとエンコード速度は
NVEnc 1480kbps (104.08 fps)
QSVEnc 1469kbps (99.46 fps)
x264 1463kbps (64.04 fps)
とだいたい1500kbps弱に合わせることができた。 エンコード速度は大きな差がないけど、この動画ではデコードが遅いのが原因。もっと高速にデコード出来る素材なら、ハードウェアエンコはもっと速くなると思う。
画質比較 (1721frame目) わかりにくい場合は別のタブで複数の画像を開いて、タブ切り替えで比べてみてください。
オリジナル NVEnc 1480kbps
う~ん、やや荒れ気味か。輪郭の崩れ、背景のテクスチャの潰れが気になる。
QSVEnc 1469kbps
輪郭周りがやはり微妙。背景のテクスチャは結構よく残っている。
x264 1463kbps
さすが…というべきで、背景のテクスチャも潰れずよく再現出来ている。
画質比較 (2127frame目) オリジナル NVEnc 1480kbps
う~ん、わりと劣化が進んでしまっている。空(青)と髪(黒)の境界付近の破綻がひどい。
QSVEnc 1469kbps
まあまあ。それなりではある。
x264 1463kbps
ここでは完璧に再現出来ているわけではないけれど、ごまかし方がうまい。
というわけで、NVEncは画質面ではすごくよい、というわけではない。というよりまあ当たり前だけど、やっぱりx264の画質(圧縮率)は圧倒的で、ハードウェアエンコは遠く及ばない。
それでも、そこそこの画質で高速にエンコードできるようなので、もしKepler/MaxwellなGPUが付いていて、興味を持ったら遊んでみてください。
ダウンロード>> ダウンロード (ミラー) >> OneDriveの調子がいまいちの時はミラー(dropbox)からどうぞ。同じものです。
スポンサーサイト
無理なお願い聞いて頂いて本当に有難うございます(>_<)
早速試してみたいと思います!!
かなり突貫工事だったので、他の環境でも無事動くと良いのですが。
大丈夫だとは思いつつ…
i7-3610QM+GTX660M(NVIDIA Optimus)でのNVEncを確認しました。
フルHDのMP4をMP4 File Reader(lwinput.auiではデコードがボトルネックになるため)で読ませ、そのままノンフィルタで出力しました。
私の環境では54fpsでしたが、恐らくEU数の問題では無いかと思います(GTX660MのEU数は…たったの2)。
にしても、流石にI:21・P:23・B:25程度まで上げると、十分見れる画質になりましたね。
かなりビットレートが上がってしまうので、勿論ニコニコ向けにはなりませんし、容量を気にする人には向きませんが、Youtube向けや容量をさほど気にしない人にとっては結構使えるものになると思います。
…まぁ、私のPCでも使えることが分かったってだけでも十分でしたけどね。
無事動いたようでよかったです。
たしかにNVEncの速度がなにによって決まるのか、気になりますね。GPU-Zを見る限りだとGPU Loadはほとんど増えないのでGPUの演算力はあまり関係ないのかな、と勝手に思っていましたが、そうでもないのでしょうか…。
こちらでもx264・QSV・NVEncの比較をしてみました。
やはりというか何というか、AviUtl側のデコードが遅いせいで、設定をかなり重めにしてもさほどエンコ速度が変わりませんでしたね…
私が使ったソースは、1280x720かつ、WMVのように重くないソース…ということで、
「Magical Charming!」のOPの、ダウンロードできるもののうち、MP4(100MB)の方を使ってみました。
また、そのうち、検証に使用したのは、実利用も考慮し、映像が明確に出る、頭から3040フレームまでとしました。
H.264 1280x720p 30.00fps 3040frames 約1分41秒
検証環境
Win7 x64 SP1
Intel Core i7-3610QM 2.3GHz→TB 3.3GHz(4コア時平均3.1GHz)
Intel HM76 Express
GeForce GTX 660M(NVIDIA Optimus)
DDR3-1600 4GBx2
Intel GPUドライバ 15.33.14.64.3412(更新してないです、スミマセン)
NVIDIA GPUドライバ 335.23
Aviutl 1.00
NVEnc 0.00(335.23ドライバ)
QSVEnc 1.20(3412ドライバ)
x264guiEx 2.06
x264 8bit x64 rev2409 POP氏ビルド
フィルタ関連は全てOFF。
尚、今回は…
・MP4 File Reader Ver1.5
・L-SMASH File Reader r694
でのデコード比較もしてみました。
エンコ設定
x264
・以下「medium」設定と称するもの
--crf 29.5 --qcomp 0.7 --vbv-bufsize -1 --vbv-maxrate -1 --aq-strength 0.3 --psy-rd 0.3:0 --keyint -1 --bframes 2 --b-adapt 2 --no-deblock --direct auto --ref 2 --weightp 1 --no-fast-pskip --no-dct-decimate --trellis 2 --colormatrix auto
・以下「ultrafast」設定と称するもの
--preset ultrafast --profile baseline --crf 36 --scenecut 40 --b-pyramid none
QSV
共通設定
CQP、GOP長自動、連続Bフレーム数2、シーンチェンジ検出ON、OpenGOP OFF、歪みレート最適化 All Frames、スライス数自動、colormatrix auto
NVEnc
共通設定
CQP、GOP長自動、Bフレーム数2、動き探索精度full-pel、動き予測方式auto、参照距離2、AdaptiveTransform auto、スライス数1、CABAC ON、colormatrix auto
参照距離とBフレームを2に統一したのは、QSVと条件を揃えるためです。
QSVとNVEncに関しては、各エンコで若干品質指定値が違うので、結果の方に載せます。
一応、1500kbps前後になるように調整したつもりですが、誤差は全体で100kbps近く出てしまったので、画質に関してはあまり比較する意味が無いかもしれません…
結果
x264
・medium
51.39fps・1491kbps(L-SMASH)
55.95fps・1474kbps(MP4 Reader)
・ultrafast
82.85fps・1487kbps(L-SMASH)
93.72fps・1474kbps(MP4 Reader)
QSV
・1-BestQuality
89.51fps・1492kbps(I28・P32・B36・L-SMASH)
95.17fps・1484kbps(I27・P32・B36・MP4 Reader)
・7-Fastest
89.55fps・1520kbps(I28・P33・B36・L-SMASH)
95.21fps・1503kbps(I28・P33・B36・MP4 Reader)
NVEnc
92.75fps・1482kbps(I30・P35・B38・L-SMASH)
99.2fps・1545kbps(I31・P34・B38・MP4 Reader)
…どう考えても明らかにCPUがボトルネックですね^^;
試しにTBを切って上限を2.3GHzにしてやってみたところ、QSVやNVEncでも70fps前後しか出ませんでした。
CPUがボトルネックになるため、厳密な比較はできませんが、恐らく、Kepler世代間では搭載されているハードエンコーダは全く同一のもので、GPUを上位種にしたところでエンコ速度は大差無いものと思われます。
書かれているEU数は、GPUのCUDAユニット(?)の数を示しているだけだと思われます。
にしても、読み込みプラグインの違いがここまで顕著(平均7%、最大13%)に出るとは想定外でした。
L-SMASHを最新版に更新していないのも悪いのですが、ここまで差が出るとなると…
まぁ、MP4 Readerはエラーが多いのであまり使いたくはないのですが…
で、気になるx264の最速設定(?)との比較ですが、これに関してはultrafastの完敗(速度も画質も)です。
よって、高速プリセットを使うくらいならQSVやNVEncを利用した方が良い結果が出るかもしれません。
まぁ、プリセット自体極端なくらいに速度よりなので、これがfastやfasterレベルならもう少し変わってくるかもしれません。
…で、ここまで言及してこなかったQSVとNVEncの比較ですが、NVEncのが若干速いものの、その差は有意とは言えません。
というか、恐らくCPUリソースの使用率の差になっていると思います。
画質の方では、QSVの方がまだましかなぁ…といったところでした。NVEncだと、シーンチェンジ時のノイズやエッジの汚さが気になりました。
Ivy世代のHD4000でさえこの状況ですので、既にQSVが使用可能な環境であれば、無理にNVEncを導入する必要はないかもしれません。
ただ、QSVにも弱点があり、QSV中にブラウザスクロールするだけで顕著にフレームレートが低下してしまうほど、他リソースのメモリアクセスには弱いようです。これではバックグラウンド処理なんて任せられません(たんにCPUスペックが足りてないだけかもですが)。
まだ詳しくは検証していませんが、そういった場合にはNVEncは活用出来るかもしれませんね。
とりあえず当方の環境では、CPUが遅い上に、尚且つTBオフで常用していたことが多かったこともあり。リサイズフィルタを併用しただけで1920x1080のMP4ソースのエンコがQSVでも15fps程度に落ちてしまったりと、AviUtlではあまりハードエンコの恩恵を受けられては居ませんが、活用出来そうな場面があったら積極的に活用していきたいと思います。
…とてつもない長文、大変失礼しましたm(__)m
このコメントは管理人のみ閲覧できます
動画にアンチエイリアスとか使えたら面白そうなのにねw
非常に詳細な報告、ありがとうございました!
まあ、画質はどうしてもQSVのほうがやや上なような気がしますね。ただ、NVEncの動き探索精度は「full-pel(1画素精度)」でなく「Q-pel(1/4画素精度)」にしてあげたほうがよいかもしれません。(QSVも1/4画素精度だと思いますので)
NVEncは良い点としては、QSVと違いGPUをあまり使わないので、消費電力が少なめな気はしますが、それがそんなに大きい差なのか、と言われると…
やっぱりAviutl経由だとデコードがボトルネックになりやすいですよね。i7-4770Kの4.4GHzでもボトルネックになるので…。このあたりは難しい問題です。
物凄くいまさらですが…この動画はオープニングではなくプレビュームービー(はて何のことか)だと思います(OPは200MBある)
で、VCEEnc0.02v2で同じ動画を使ってテストしてみました
設定はプロファイルの画質重視、CQPで30/34、1486.91Kbps
環境はAMD FX-8350+R9 270(VCE1?)
変換速度は平均105.24FPSでした(意外と早い)
1721F目
http://i.imgur.com/Tek4WSE.png
2127F目
http://i.imgur.com/h73UF69.png
うーん、画質は昔あったAVIVO Converterからあんまり進歩してないような…画質的にはNVEncとQSVの中間な感じですかね
VCEでも比べていただきありがとうございます!
おっしゃるように、QSV/NVEnc/VCEを比べると画質ではQSVが一番ですよね。
Aviutlの出力プラグインで使用させていただいているのですが
複数枚グラボを乗せているとどれか1つに処理が偏ってしまい
これを均等に処理させるようなことはできないでしょうか?
複数のエンコードを同時に実行する場合でしたら、可能かもしれませんが、ひとつのエンコードを分散させることはNVEncでは難しいようです。
初めまして
最近「NVIDIA GeForce GTX 750 Ti」のグラフィックカードに付け替えまして、色々探していたところこちらのHPに辿り着きました。
普段「aviutl + x264」にてエンコードしております。
「拡張NVEnc」の存在を最近知り、本日インストールしてみましたが、「動画エンコード」の画面でマークがグレーのままでどうも使用不可のようです。
「GPU-Z」の表示では「GPU:GM107」と表示されております。
こちらのカードには対応してないという認識で宜しいでしょうか。
もし宜しければご返信頂ければ幸いです。
兎にも角にも素晴らしいソフトウェアのご提供感謝しております。
マークがグレーのままですと、使用できないということになってしまいます。
一度GPUのドライバを確認していただけないでしょうか。(GPU-Zにも表示されていると思います)
NVEncには、347.09以降のドライバが必要です。
rigayaさん
ご返信頂きまして誠に有り難う御座います。
当方「TMPGEnc Authoring Works 5」を使用しており、最新ドライバーでは「CUDA」を使用出来ないとの事でした。
サポート曰く
---
CUDAエンコーダーをご利用いただく際には、「340.52 WHQL」、「340.43
BETA」より以前のバージョンのNVIDIA グラフィックドライバーをご利用
いただく必要がございますが、現在ご利用のバージョンはいくつになります
でしょうか。
もし、「340.52 WHQL」、「340.43 BETA」以降のバージョンをご利用の
場合はNVIDIA社様のウェブサイトにて「337.88」以前のドライバーを
ダウンロードしインストールいただければと存じます。
---
という事でしたので、現在「337.88-desktop-win8-win7-winvista-32bit-international-whql.exe」をインストールしております。
が・・・CUDAを使った方が逆に遅くなってまして今は使用してない次第です。
ぶっちゃけ「TMPGEnc Authoring Works 5」でCUDAを使用すると非常に遅くなりますので、これなら「NVEncを試す為に」ドライバーの入れ替えをとも考えております。
なかなか知らない世界ですので難しいですね。一度最新の物を入れて試させて頂きますね。
ご返信有り難う御座いました。
gtx750tiを使用しているのですがこちらのNvencが使用できません。
nvenc [error]: nvEncodeAPI.dllがシステムに存在しませんと表示されます
ドライバは最新で、aviutlも最新です。
お騒がせしました。バージョンの問題でした。
改善しませんでした。gtx750tiでは、動作しないのですかね
gtx750tiでも動作するはずです。ドライバのクリーンインストールで改善するかもしれません。
お返事ありがとうございます。
試してみます。
すみません。NVEncのバージョン1.00以降を利用するには、347.09以降のドライバが必要ですよね?
できれば、少し前のドライバでも動くようになっては欲しいんですが。
理由は、自分はAviutl以外でCUDAを利用しますが、最新のドライバーだと、バグが確認されて、ほとんどのプログラムでCUDAが使えないからです。
また、複数のGPUで変換できる「マルチGPGPU」機能も搭載して欲しいとは思っているんですが、たぶん無理ですよね。
出来る範囲でお願いします。
NVEncのベースとなっているNVENC SDKが347.09ドライバ以降となっており、NVEnc 1.xxでの対応は難しいです。NVEnc 0.xx系ならベースとなっているNVENC SDKが古いので、もう少し前のドライバから動きます。
「マルチGPUによる変換」は、2つの異なる動画を同時にエンコードするといった用途でしょうか? それでしたら、GPUの選択機能をつければよいかもしれません。
一方、2枚のGPUを使い、1つの動画を高速にエンコードするといった用途に使用することは残念ながらできません…
GPGPUのH264エンコーダーを探してココにたどり着きました。
H264が元々整数演算だよりだったのかな、とおもうと浮動小数点演算でどう、処理されてるのか気になります。
「エクセルでミスが出る」と ある場所で読んだ限りでは
01のコンピューターの世界では10進数が通じないとかが ちょっとした目からうろこでした。
現実に際した用途としては コンピューターをストレスなく使いながらも
大量の動画を一気に再圧縮したいなど コンピューターの負荷分散的 その結果としてのシステムの安定性などところにメリットが有るのかなと思いました。
ニコニコ動画では最近1920x1080の60FPSなんて動画も見かけるようになりましたが さすがにWinタブレットでこれを再生すると熱は持つし、バッテリーがすぐ死んでしまいます。
こういうのをFPS&解像度調整&ベースライン再エンコ
などで無理なく再生しようとしてたのですが
大量にある動画を圧縮するとPCが使えない状態が続きそうなのでずっと作業が止まってました。
この用途なら、画質の低下はある程度容認できますし、GPUもP0(最大クロック状態)の3~6%使ってますので十分使っているとは思います。
(重いと言われる某ゲームでもP0状態で動くことはそうはない)
ソレニシテモ、ボトルネックというのはどこでも出てくるモンスターです
私がずっと悩まされているのは数百Mの光回線で数十Mしか出ないという事情のボトルネックです(笑
公式のCUDAに対応しているGPUに9600GTがあるのですが、NVEncではできませんでした。また別のを使わないといけないということでしょうか?
9600GTではNVEncは使用できません。
動作条件は以下の通りです。
Windows 7,8,8.1,10 (x86/x64)
Aviutl 0.99g4 以降
NVEncが載ったハードウェア
NVIDIA製 GPU GeForce Kepler世代以降 (GT/GTX 6xx 以降)
※GT 63x, 62x等はFermi世代のリネームであるため非対応なものがあります。
NVEnc 1.xx NVIDIA グラフィックドライバ 347.09以降
NVEnc 2.xx NVIDIA グラフィックドライバ 358 以降
使用するAviutl.exeのあるフォルダを指定し、
「次へ」をクリックしてください。
以下のもののインストールを行います。
・NVEnc
・qaac
・L-SMASH (remuxer, muxer等)をセットアップしようと指定フォルダのフォルダー参照でデスクトップのみしか表示されずローカル関係のハードが表示されなく指定できませんでした以前はOS7の64ビット版仕様してたのですが7はうまくハード指定できました、OSの10にしたら指定できなくorzあとh264もい同じ不具合がおきもしかしたらウインドウズ10にはあんまり対応してないんすかね?説明文少しややこしいのですが不具合の調査もしできたらお願いします。
こんばんは。
NVEnc_2.07をインストールしようとauo_setup.exeを起動すると”サポートされていない16ビットのアプリケーション”とでてきてインストールができません。
Windows7 64bit
Visual C++ はインストールしてあります。
Win7環境がないのでこちらでは試していないですが、Win8.1では問題なく動作しており、該当メッセージの出る原因はよくわかりません。16bitプログラムのはずはないので、なにかを誤認識しているのだと思います。
うまくいかない場合は、auoフォルダにあるものをAviutlフォルダにコピーし、設定画面から音声エンコーダとl-smashの場所を指定して使用してください。
すこし調べていたところ、VC2015 runtimeがインストールされていない環境で発生することが分かりましたので、NVEnc 2.07v2で修正しました。
http://rigaya34589.blog135.fc2.com/blog-entry-796.html
報告いただきありがとうございました。
NVEncの爆速に感動!
以前のノートPC(今では考えられないほど低スペック)で3時間かかっていたエンコード処理が1分半でできるようになりました。実に1/120。本当に有難うございました。
こんにちは。
最近こちらのNvencを使わせてもらっているのですが、何故かGPUが読み込まれないです…
GPUの部分がunknownと表記されます
GPUはGTX980です
>>GPUが読み込まれないです
とのことですが、GPUが正しく認識されず、エンコードが開始されないということでしょうか?
GTX980はNVENCが使用できるはずですので、もしかするとドライバのバージョンなどの問題も考えられます。その際のエラーメッセージなどありましたら、教えていただけないでしょうか?
こんにちは、せっかくだから変えたばっかりのグラボでエンコしてみようと思い、使わせていただいたのですが、
GPU使用率が10%前後を行き来してちょっと30%まで行った程度しか使われてないみたいなんです......
一応今見れる値を書き込んでおくと
Frame Buffer 4%
Video Engine 45%
Bus Interface 7%
Memory 13%
(どれも最大値)
でした。
こんなものですかね......?
GPUはPalitのSuper Jet Stream GTX1080です
CPUはi7-4790Kです
ドライバは最新の安定板でした(βではない)
既出でしたらすみません。
Aviutlから使用する場合は、どうしてもそこで遅くなってしまって、十分な速度が出ない場合があります。こちらでも(GTX1060ですが)Video Engineのところは50%~60%前後です。
NVEncCだと、Video Engineのところが90%近くまで行くようです。
普段から使わせてもらってます
GTX980tiで使用しているのですがある日突然設定画面のマークがグレーになり使えなくなりました。
エンコードをすると
cuCtxCreate error:0x3e7
Cudaの初期化に失敗しました。
と表示されます
グラボのドライバーのバージョンは378.66です。
このバージョンでは使用できないということでしょうか?
CUDA関係のエラーに見えますが、よくわかりません。突然ということですが、ドライバの更新などをされた後ということでしょうか。
こちらではWin10 x64 + 376.53で動作しています。
返信ありがとうございます
OSはwin10 x64です。
最後に使えた時から変わったのはグラボのドライバーが変わっただけだと思います。特にaviutlの設定などもいじってません。
グラボのドライバを変えたのは重要だと思いますが…。
すこしでも合わせようと思い、こちらも378.66にしてみましたが、Win10 + GTX1060では問題なく動作しており、残念ながらよくわかりません。Maxwell世代(GTX9xx)は持っていないので検証できず、申し訳ありません。
こちら側でいろいろ試しましたがやはりだめでした
別ソフトのxmediarecodeの方もNVEncが使えなくなってたのでドライバーとグラボの相性が悪いんでしょうかね
ここはじたばたせずにドライバーの更新を待つことにします。
わざわざ試していただきありがとうございました
上記のyuki様が質問されている症状だったのですが、グラフィックドライバを378.66に変更することで使用できるようになりました。
AviUtl:Ver1.00
このプラグイン:Ver3.06
グラフィックドライバ:Ver378.66です。
グラボはGTX980Tiです。
しかし、使用はできるのですが、タスクマネージャ、GPUZを合わせてみてみるとCPU使用率が100%、GPU使用率が5%と明らかにCPUでエンコードしているようなのですが、GPUを使用するように変更するための設定などがあるのでしょうか?
コメントに誤植がありました。
グラフィックドライバのバージョンが378.66ではなく376.33の間違いです。
GPUを使うための設定は特にありませんので、エンコードできていればHWエンコになっているはずです。
NVEnc利用時には、GPU使用率はほとんど上がらないです。GPU-Zで言うと"Video Engine Load"が上がっているか確認してください。
NVEncが遅い場合には、Aviutl側がボトルネックとなっている場合がありますので、まずは短い動画でフィルタなどをすべて除いてエンコードしてみてください。
[未実装] minQP / maxQPの指定ができない問題。
上記を実装する予定はありませんか。
すみません、ちょっと今NVEncのコードはいろいろいじくり回しているので難しいです。後ほど検討したいと思います。
エンコードソフト色々使わせてもらってます。 大変に重宝しています。 有難うございます。 1つ質問ですけど。。。 NVEncでエンコード中タスクマネージャーを開くと Nvidiaのソフトが動いてないですがそれは正常でしょうか? お手数ですが教えてもらえますか。 宜しく御願いします。
「Nvidiaのソフト」とおっしゃるのが具体的にどういったものかよくわかりませんが、他のソフトを起動したりはしないかと思います。
NVEncのアイコンが灰色なのですが GTX 1060 対応していないのでしょうか?
>GTX 1060 対応していないのでしょうか? そんなことはないと思いますけど…。 ドライバのバージョン等の問題ではないでしょうか。
お疲れ様です。 この度新しく、サブでノートパソコンを増やしましたが、Geforceのmx150は非対応なのでしょうか?バージョンは388.71を使用しております。設定画面では色が入ってなく、このまま出力すると nvEncodeAPI.dllがシステムに存在しません。 と出ます。
GeForce GTX650Ti(Kepler)ではなくて GTX650ですが、AviUtlでNVEncを導入してみたところ快適に動作しました。設定画面でも緑色のNVEncのロゴが表示されました。 GPU-ZではGPU=GK107となっています。(ちなみにGTX650TiではGPU=GK106になるようです) システム環境はDesktopPC Intel Corei7 860 Windows7です。 GeForce GTX650のドライバーはVersion 381.65(2017/04/06リリース版)です。 ありがとうございます。
返信ありがとうございます。 mx150の者です。 年末のお買い物は大爆死により終了し、素晴らしい年明けが迎えられました。このシリーズが対応する事を、ちんたら出力させながお待ちしております...詳しくお調べ頂いてありがとうございました!
エンコードのfpsが9前後しかでないのですが、なぜでしょう?。 使用PCは、CPU i7-3770、GPU GTX1050ti で、 動画サイズは1920x1080、60fps(長さは2分くらい)です。 標準で付いているプロファイルを使用してもやはり9fpsしかでません・・・。 別記事のコメント欄に、Aviutl側のフィルタが、というのがあったのでAviutlを確認しましたが、フィルタは一切使用していませんでした。
9fpsとなると、x264のほうが速そうですね…。
速度が出ない場合は、読み込み/フィルタ/エンコード/書き出しのどこかしらに原因があることになりますが、原因が多岐にわたるため、申し訳ないのですがこちらでは原因の把握が難しいです。
x264のほうが速かったりすると、まず読み込みやフィルタ、書き出しなどは問題なさそうですが…。
あとはCPU/GPU間の接続の問題もあり得ますが、いただいた構成からさすがにPCIex1の接続、ということはないでしょうし…。
お返事ありがとうございます。 CPUでも早くて11fpsしかでませんね・・・。 接続など確認してみて、それでも無理そうならPCの新調も考えてみます。 ありがとうございました。
再度失礼します。 エンコード速度で100fpsや200fpsが出た!というわけではないのですが、なんとか60fpsまで出せましたので報告に来ました。 方法は、システム→設定の、画像処理スレッド数が「0」になっていたのを「8」にすることでした。
1060 6GBです。 NVEncを導入したのですが、アイコンがグレーのままなのですがどうすれば有効になるのでしょうか... ↓環境↓ Aviutl 1.00 NVEnc 4.15 GeForce ドライバー ver399.24 Windows10 Home 64bit Aviutlを再インストールしたりグラボのドライバーを最新にしましたがそれでもダメでした。 どうかよろしくおねがいします。
… Loaded nvEncodeAPI.dll. InitCuda: device #0. … OS Version Windows 7 x64 (7601) CPU Intel Core i5-4590 @ 3.30GHz [TB: 3.60GHz] (4C/4T) Failed to find required function "cuvidGetDecoderCaps" in nvcuvid.dll Failed to find required function "cuvidGetDecoderCaps" in nvcuvid.dll No GPU found suitable for NVEnc Encoding. Failed to initialize CUDA. No NVEnc support. …とbatから出力されましたが、GPUの不適合ということなのでしょうか。動作要件を見る限りすべてクリアしているようなのですが、再起動後も同様のエラーが出るため原因が分かりませんでした。よろしければご教示いただけると幸いです。
あまり見たことのないエラーなのですが、デコードで必要になるドライバ付属のモジュールをロードしている箇所なので、もしドライバを更新していなければ、更新すると改善するかもしれません。 ドライバが更新済みですと、ちょっと原因がわかりません。 もっともWin7ではテストできていないので、そのあたりの問題なのかもしれませんが…。
当記事で載せておられた NVEncの設定SS通りに設定したのですが どうしても速度をかんじられません。 エンコード中のプログラム文(?)を コピペしますので、 何か悪いところがあれば 指摘をお願いします。 以下コピペ [E:\全動画データ保管ファイル\3FcF 完成動画\零 紅い蝶 2.mp4] ------------------------------------------------------------------------------------------------------------------------------ auo [info]: converting YUY2 -> nv12p, using AVX AVX2 auo [info]: NVEncC options... -c h264 --cqp 26:29:32 --qp-init 20:23:25 --gop-len 300 -o "E:\全動画データ保管ファイル\3FcF 完成動画\零 紅い蝶 2.264" --y4m -i - NVEncC (x64) 4.18 (r857) by rigaya, Sep 27 2018 21:15:57 (VC 1900/Win/avx2) OS Version Windows 10 x64 (17134) CPU Intel Core i5-8400 @ 2.80GHz [TB: 3.78GHz] (6C/6T) GPU #0: GeForce GTX 1050 (640 cores, 1455 MHz)[417.35] NVENC / CUDA NVENC API 8.1, CUDA 10.0, schedule mode: auto Input Buffers CUDA, 36 frames Input Info y4m(nv12)->nv12 [AVX2], 1980x1080, 60/1 fps Vpp Filters copyHtoD Output Info H.264/AVC high @ Level auto 1980x1080p 1:1 60.000fps (60/1fps) Encoder Preset default Rate Control CQP I:26 P:29 B:32 Lookahead off GOP length 300 frames B frames 3 frames Ref frames 3 frames, LTR: off AQ off Others mv:auto cabac deblock adapt-transform:auto bdirect:auto
速度を感じられないとのことですが、具体的にどのぐらいの速度でしょうか…? NVEncの場合、エンコード側の設定で速度があまり変わらないことが多く、どちらかというとNVENCによるエンコード以外のAviutlの処理(ファイルの読み込み・デコード・フィルタなど)で速度が決まることが多いです。この部分が、下記のログの「Aviutl 平均フレーム取得時間」にあたります。 下のログでは、Aviutl側の処理が重い時の例です。「Aviutl 平均フレーム取得時間」が12.586msとなっていますので、エンコードを除いても1000/12.586=79.45fpsは越えられない状況で、そのため74.02fpsというエンコード速度になっています。 なお、「Aviutl 平均フレーム取得時間」を表示できるのはNVEnc 4.26からとなります。お使いのNVEncは4.18のようですので、更新の上、確認してみていただけないでしょうか。 auo [info]: converting YUY2 -> nv12p, using AVX AVX2 auo [info]: NVEncC options... -c h264 --cqp 20:23:25 --qp-init 20:23:25 --gop-len auto -o "F:\test.264" --y4m -i - NVEncC (x64) 4.29 (r977) by rigaya, Dec 17 2018 20:25:56 (VC 1900/Win/avx2) OS Version Windows 10 x64 (17134) CPU Intel Core i9-7980XE @ 2.60GHz [TB: 4.11GHz] (18C/36T) GPU #0: GeForce RTX 2070 (4608 cores, 1710 MHz)[PCIe3x16][417.22] NVENC / CUDA NVENC API 8.1, CUDA 10.0, schedule mode: auto Input Buffers CUDA, 36 frames Input Info y4m(nv12)->nv12 [AVX2], 1920x1080, 24000/1001 fps Vpp Filters copyHtoD Output Info H.264/AVC high @ Level auto 1920x1080p 1:1 23.976fps (24000/1001fps) Encoder Preset default Rate Control CQP I:20 P:23 B:25 Lookahead off GOP length 240 frames B frames 3 frames Ref frames 3 frames, LTR: off AQ off Others mv:auto cabac deblock adapt-transform:auto bdirect:auto encoded 11053 frames, 74.02 fps, 583.02 kbps, 32.04 MB encode time 0:02:29, CPU: 0.4, GPU: 2.9, VE: 15.6, GPUClock: 1410MHz, VEClock: 1305MHz frame type IDR 47 frame type I 47, total size 3.01 MB frame type P 2763, total size 16.20 MB frame type B 8243, total size 12.84 MB auo [info]: CPU使用率: Aviutl: 13.09% / NVEnc: 0.60% auo [info]: Aviutl 平均フレーム取得時間: 12.586 ms auo [info]: NVEncエンコード時間 : 0時間 2分33.4秒
Aviutl 1.10 GPUはGTX960、ドライバー445.87 NVEnc 5.01 の環境でNVEncを使用したところ、平均フレーム取得時間が132ミリ秒でx246エンコードの方が早い状態です。よく見るとAviutl本体のCPU使用率が80%を超えているのですが、原因が全くわかりません。何とか改善できないでしょうか。
平均フレーム取得時間が132ミリ秒だと、おっしゃる通りAviutl側のっ処理が重すぎて、NVEncを使用してもあまり速度は変わらないと思います。 Aviutl側の処理についてはフィルタや編集次第ですので、そのあたりを多用されているとどうしても時間がかかってしまうかと思います。