2014.04NVEncを使ってみたNVIDIAのKepler以降のGPUに載っているNVEncを使ってみるはなし。こんなかんじのログが出る。続きを読む続きを閉じる最近は、GPUに動画のハードウェアデコード・エンコード機能を載っけるのが流行っているらしく、IntelのQSV、AMDのVCE同様、NVIDIAのKepler以降のGPUにもNVEncと呼ばれるハードウェアエンコード機能がついている。GPUの有効活用、という点ではこういう機能もぜひ使っていきたいところ。↑あまり有効利用してないこいつを有効に活用するのだ...。これまでGeforceではこの機能がロックされていて、自由に使うことができなかった。(Tesla買えということですね、わかります)が、少し前、グラフィックドライバの更新によりやっとGeforceでも使えるようになった、ということを教えていただいたので、早速NVEncを使ってみることにした。いつもどおり、配布されているサンプルプログラムをAviutlの出力プラグインとして改造して、実験してみる。出力NVIDIAのハードウェアエンコーダ、NVEncによる出力プラグインです。62x等はFermi世代のリネームであるため非対応なものがあります。334.89以降がインストールされていること※XPではたぶん動作しません。気にしなくていいよね、XP。ダウンロードしたら解凍して出てくるauo_setupを実行してください。以下のものを必要なら自動でダウンロード・インストール・配置します。4.0系を使用します。Updateによりインストールされているはずです。いつもの注意事項など無保証です。自己責任で使用してください。maxQPの指定ができない問題。nvCuda.dllがない環境でAviutlを実行すると、「nvCuda.dllが存在しません」と出てAviutlを起動できない問題。(0.01で修正)...すみません、そのうち直します。GPUからの出力をファイルに書き出しとなる。ここでは2のフィルタは使わないとして考えてみる。したハードウェアエンコーダを使用する場合、速度は多くの場合CPUのデコード処理によって律速されてしまう。エンコードの速度はいかに速くデコードし、エンコーダにフレームを渡すかにかかっている。5:エンコード命令発行」を別のスレッドに分け、並列に実行することにより、メインスレッドがデコード~NV12変換に専念できるようにした。GPUへのフレーム転送は遅いようで、この工夫によってGPU転送のレイテンシを遮蔽し、そこそこ(10%程度)高速化できる。GPUへデータを転送する、というコードを書くだけならまったく簡単で問題ない。ところが、GPUへの転送を別スレッドにやらせるコードを書くにはやっぱりわりと面倒。GPUへの転送CPUメモリとGPUメモリがわかれていることのデメリットがこうした工夫をしなければならないことにあると思う。AMDの言うHSAのメリットというののひとつは、統一メモリによりこうした問題がなくなってコードが書きやすくなる、ということなんだと思う。(膨大な数の細かい独立したタスクがあって、その一部でGPUを使用するみたいな場合にはあまり気にしなくていい...つまり、やらせるタスクにもよるのだけど...)またいつもどおり、YUY2→NV12変換はSSE2~AVX2を使用して高速化している。fps)とだいたい1500kbps弱に合わせることができた。エンコード速度は大きな差がないけど、この動画ではデコードが遅いのが原因。高速にデコード出来る素材なら、ハードウェアエンコはもっと速くなると思う。(1721frame目)わかりにくい場合は別のタブで複数の画像を開いて、タブ切り替えで比べてみてください。1480kbpsう~ん、やや荒れ気味か。輪郭の崩れ、背景のテクスチャの潰れが気になる。1469kbps輪郭周りがやはり微妙。背景のテクスチャは結構よく残っている。1463kbpsさすが...というべきで、背景のテクスチャも潰れずよく再現出来ている。1480kbpsう~ん、わりと劣化が進んでしまっている。空(青)と髪(黒)の境界付近の破綻がひどい。1469kbpsまあまあ。1463kbpsここでは完璧に再現出来ているわけではないけれど、ごまかし方がうまい。いうわけで、NVEncは画質面ではすごくよい、というわけではない。いうよりまあ当たり前だけど、やっぱりx264の画質(圧縮率)は圧倒的で、ハードウェアエンコは遠く及ばない。それでも、そこそこの画質で高速にエンコードできるようなので、もしKepler/MaxwellなGPUが付いていて、興味を持ったら遊んでみてください。>>OneDriveの調子がいまいちの時はミラー(dropbox)からどうぞ。1.20QSVEncのみの更新。faw2aac使用時など、muxerのみで一発でmuxが可能な場合に、チャプターがmuxされない問題を修正。これに合わせてmux情報表示を改善。ご指摘ありがとうございました。>>OneDriveの調子がいまいちの時はミラー(dropbox)からどうぞ。SDKのソフトウェア用dllはfull版にのみ含めるようにしました。QSVEncBenchmark.zipはベンチマーク用です。(220MBと重いので注意)。lsmashsource.dll)。1.19QSVEncのほうはx264guiExに追加した機能の取り込み。QSVEncCのほうの変更はちょっとしたこと。qtaacencで可能。>>OneDriveの調子がいまいちの時はミラー(dropbox)からどうぞ。SDKのソフトウェア用dllはfull版にのみ含めるようにしました。QSVEncBenchmark.zipはベンチマーク用です。(220MBと重いので注意)。lsmashsource.dll)。0このページのトップへデスクトップ向けBroadwellがやっぱり出るようで?いろいろデスクトップ向けの新しい楽しみな情報が出ていて、いい感じ。Intel、“グリス問題”を解消した新しい第4世代Coreプロセッサ"解消"っていうけど、自分で新たにこさえた問題を取り除いてるだけなのがなんとも...。Intel、初のDDR4対応8コアプロセッサを2014年下半期に投入8コア、というのはやっぱりインパクトがある数字。あとはDDR4の値段と速度かなあ。DDR4-2133ぐらいだとDDR3でもDDR3-2133ぐらい普通だよ、ということに...。Channelに期待すればいいか。2014]Intel,第5世代Coreプロセッサ「Broadwell」や次期ハイエンドCPU「Haswell-E」などの概要を公開。Pentiumの20周年記念モデルもこれも嬉しいニュース。アンロック、言うことなし。QSVとかも新しくなるとなお嬉しいけど。2.06・音声エンコードディレイをカットで「映像追加」モードでの問題を修正。音声エンコードディレイカット「映像追加」の3重の組み合わせは使用できません。>>Skydriveの調子がいまいちの時はミラー(dropbox)からどうぞ。開発をVC++2012からVC++2013に移行しました。runtimeが必要です。msvcp120.dllをAviutlフォルダにコピーしてください。・auo_setup(簡易インストーラ)を使用する場合は問題ありません。(自動的にランタイムdllがコピーされます)続きを読む続きを閉じる音声エンコードディレイをカットできるように。(AAC-LC)では--no-delayオプションを使用。・neroaacenc/qaac/qtaacencでは、「音声の削除」「映像の追加」などにより相殺できる機能を追加した。neroaacenc等でエンコードを行うと、音声側に一定の遅延が発生してしまう。(エンコーダの制限)今回はこれを解消する機能を追加した。samplesのようだ。55ms程度なのでたいしたことはないのだけど、例えばSamplingRateが24kHzとか、あるいはHE-AACとかで遅延が大きくなってくいると音声が遅れているのが結構気になってくるかもしれない。最近のqaacのAAC-LCではエンコーダ側で対策してくれるようになっているので、今回からそのオプションを使うようにした(--no-delay)。muken様にコメントを頂きましたように、--no-delayを使用すると最初の1024sampleが無音でない場合に先頭にノイズが入る場合があり、注意が必要です。AACが音声フレーム(音声1フレーム=1024sample)をまたがって圧縮しており、本来であれば一つ前のフレームが存在するか、あるいは無音でないと正しくデコードできない事によるものです。2.05v2では、qaacのAAC-LCについても「音声カット」「映像追加」のどちらかによる補正を選択できるようにしました。映像を先頭に追加のどちらかにより音声の遅れを打ち消す機能を追加した。方法が異なるだけで、どちらの方法でも音声の遅れを解消できる。2~4フレーム程度映像が先頭に追加されるということ。これは(edts等のmp4コンテナの機能を使わずに)ディレイを修正する上で仕方ないと思う。60~120msがもともと無音であれば、(1)で問題ないだと思うのだけど、動画開始直後から音がある場合には(1)だとその音が消えてしまうため、(2)のほうを選んでくれたほうがいいかなと。検証方法まずそれぞれの設定でエンコード。オリジナルのwavをAviutlのwav出力から16bitモノラルで出力。エンコードしたmp4をlwinput.auiでAviutlに読み込み、同様にAviutlのwav出力から16bitモノラルで出力。このwavファイルをAudacityに放り込んで波形を確認した。-2624s」では波形が「オリジナル」と揃っていることがわかる。その他のケースでも補正によって音声の遅延を相殺できていると思う。...さて、問題はニコ動向けプロファイルとかでディレイカットをデフォルトにするかどうか...(いまは「補正なし」)。2.05v2、iniファイルの更新です。・qaacのAAC-LCについても--no-delayでなく、2112sample補正するか選べる形にした。※エンコードディレイカット機能の使用にはx264guiEx.iniの更新も必要です。>>Skydriveの調子がいまいちの時はミラー(dropbox)からどうぞ。x264guiExの導入>その他...1.いつの間にかこのブログのカウンタが100万いってます...。見に来てくれた皆さん、ありがとうございます。2.x264afs、r2409+873に更新しました。1.18更新連発してすみません。バグ修正と機能の追加。[共通]・1.16以降、ファイルが正常に出力されないことがあったのを修正。一時ファイルが0byteです。いうエラーが出るこれらの問題の修正です。ご指摘ありがとうございました。[QSVEnc]・ログ自動保存の保存場所を変更する機能を追加。x264/x265guiExからの移植。>>OneDriveの調子がいまいちの時はミラー(dropbox)からどうぞ。SDKのソフトウェア用dllはfull版にのみ含めるようにしました。ベンチマークを行ったソース動画も置いときました(220MBと重いので注意)。lsmashsource.dll)。1.17QSVEncCのほうを更新。Reader)をx64対応に。いままでx86のみだったので。・1.08以降、vpy読みでエンコードを中断するとクラッシュするのを修正。・ベンチマークモードの出力ファイルを調整。続きを読む続きを閉じるベンチマークについてふたつ。(相変わらずクロックは定格値)・使用メモリ量が、残りメモリ量になっていたのを修正。レイアウト調整というのは、フォーマットを見なおした、ということ。これは...完全にわたしの都合です...。いうのも、前回のフォーマットだとそのままブログに貼るとレイアウトが崩れてしまうため、SyntaxHighlighterをテキストモードで使うというちょっと面倒な事になっていた。今回の見直しで、そのままブログに貼っても崩れにくいように。7447もうひとつ、ベンチマークモードでは、表示される14回ではなく、15回エンコードしている。・ファイルをOSのファイルキャッシュにのせるということ。ファイルキャッシュは速度にある程度影響するので、初回の結果を捨てることでより平等な計測になればいいな、と。割り込みとかに左右されてる感じなので、細かくこだわってもしょうがない気もするのだけど。>>OneDriveの調子がいまいちの時はミラー(dropbox)からどうぞ。SDKのソフトウェア用dllはfull版にのみ含めるようにしました。ベンチマークを行ったソース動画も置いときました(220MBと重いので注意)。lsmashsource.dll)。dGPUでiGPUから出力していなくてもQSVエンコ出来る機能が使えなくなっていたのを修正。2014でビデオメモリモード周りのフラグの意味が変わっていたのに対応できていなかった。[QSVEncC]・ベンチマークモードを追加(--benchmark)。・1.12以降、エクスプローラから見えるバージョン情報がx86版でもx64と表示されていたのを修正。1~7でテストエンコードして、その速度を測定し、結果をファイルに出力。ディスクIOの影響を回避するため、動画のファイル出力は行わずにエンコードだけを行う。sample_movie_1080p.avsMPEG2+lsmashsourceを選んだのは、1080pでデコードが律速にならないようにということ。GPUは定格まあ、そんなもんかな、という結果。3と4のギャップが大きい。GPUは定格Ivyだと事実上、4段階しかないみたい。Boostがかからなくなってしまうため。ベンチマーク環境の情報を自動で取ってきて結果ファイルに出力してみようかな...と思ったのだけど、CPUの動作周波数は定格値しか出ないのが問題かなあ。あとメモリの速度もよくわからないので実はあとから入力してる。CPU/GPU/メモリの実動作周波数を取ってくるのって結構難しいみたいで、CPU-Zとかは凄いのだと実感。>>OneDriveの調子がいまいちの時はミラー(dropbox)からどうぞ。SDKのソフトウェア用dllはfull版にのみ含めるようにしました。ベンチマークを行ったソース動画も置いときました(220MBと重いので注意)。lsmashsource.dll)。1.15[共通]・1.12以降、LookaheadDepthが正しく反映されない問題を修正。指摘していただきありがとうございました。v1.6をサポートしない環境で、設定画面を開く際にフリーズする問題を解決...したつもり。v1.4以下では1.12で導入した処理を無効化しました。これでたぶん大丈夫なはずです...毎度すみませんが試せないので確信が持てません。[QSVEncC]・リダイレクトした場合でも進捗情報がすぐに読み取れるようflushするように。要望いただいたのですが、これで大丈夫でしょうか...。>>OneDriveの調子がいまいちの時はミラー(dropbox)からどうぞ。SDKのソフトウェア用dllはfull版にのみ含めるようにしました。0このページのトップへホームこのページのトップへプロフィールAuthor:rigayaアニメとか見たり、エンコードしたり。