【NVENC】A’s Video Converterのハードウェアエンコで最速fpsを叩き出す方法・設定を考えてみる【QSV】

2020年2月14日ソフト/アプリ

 この記事ではお手軽に動画のハードウェアエンコードができるBluesky氏のソフトA’s Video Converter」のハードウェアエンコで最速fpsを叩き出す方法・設定を考えてみます。
 ハードウェアエンコードはそもそも高速ですが、CPUやRAMなどのハードウェア、エンコードやデコードするソフトウェアがボトルネックとなって、本来のGPUの性能を最大限に引き出せない場合が多々あります。ハード面でのボトルネックの解消は高速化に大きな効果がありますが、今回はソフトウェア面の設定を調整して高速化を目指します。

コラム

 ハードウェアエンコに限らず、個人での動画編集ソフト+エンコーダーの組み合わせと言えば、「AviUtl+rigaya氏のエンコーダープラグイン」の組み合わせが有名です。AviUtlは高機能であり、rigaya氏のエンコーダープラグインにはQSV、NVENC、VCEに対応したものもあって私も重宝していますが、AviUtlの仕様上、GPUの性能を最大限に引き出すことは不可能です。
 そこでまずは利用するソフトウェアごと変更します。「HandBrake」など、無料のエンコードソフトは複数ありますが、私は「A’s Video Converter」というソフトに目を付けました。動画のエンコードに特化したアプリなので、優劣はつけ難く、目的に応じて使い分けましょう。とにかく、今回はこれを利用します。

 本題です。「A’s Video Converter」の設定を練りましょう。
 なお、dGPUを搭載している場合は、CPUがQSV対応でも強制的にdGPU内のデコーダにてデコードされてしまいます。デコーダーの設定方法を含めてdGPU搭載パソコンでQSVを有効にする方法は別の記事をご覧ください

高速化の基本

 全ての設定、動作はGUI上で行います。エンコードの速度はビットレート、解像度等、あらゆる設定項目で大きく変化します。それらの設定は今回は取り扱わないものとして、エンコーダーよりむしろデコーダー、厳密に言うとエンコーダーとデコーダーの組み合わせを吟味して速度を比較してみます。
 よってエンコードの設定値は同じ条件で、ベンチマークを取ってみます。エンコード環境と設定値は下記の通りです。

エンコード環境

OSWindows 10 Pro 64ビット バージョン1909
CPUIntel Core i5 8400(ターボブースト:オン)
GPUNVIDIA GeForce GTX 1660 Super(PCIe 3.0 x16動作)
RAM16GB(2800 MHZ)
ストレージIntel SSD 760p 256 GB(PCIe 3.0 x4動作。TLC)
ソフトA’s Video Converter
ビデオデコーダーLAV FiltersのLAV Video Decoder
元動画H.264。1280x720p
速度設定速度重視
レートコントロールCBR
ビットレート1000 kbps
Bフレーム数0
ハードウェアビデオプロセッサなし
(ハードウェアエンコーダー上でのリサイズやデインタレースなどはなし)
オーディオエンコードパススルー

実行結果

 早速実行結果を確認しましょう。赤マーカーの設定の組み合わせが最も速くなりました。
 表の「ソフト上でのHWデコードオン/オフ」とは、A’s Video Converterを開き一番上の[設定]→[トランスコード設定]→[デコード]タブの順にクリックしたウインドウ内の[ハードウェア デコードを有効にする]のチェックが入っているか否かです。

QSVでのH.264/AVCエンコード

ソフト上
でのHW
デコード
オン/オフ
LAV Video
Decoder上での
ハードウェア
デコーダの設定
最低fps最高fps
オフNone110125
オフIntel QuickSync616637
オフNVIDIA CUVID112128
オンNone114128
オンIntel QuickSync113128
オンNVIDIA CUVID113129

NVENCでのH.264/AVCエンコード

ソフト上
でのHW
デコード
オン/オフ
LAV Video
Decoder上での
ハードウェア
デコーダの設定
最低fps最高fps
オフNone14351464
オフIntel QuickSync500517
オフNVIDIA CUVID14411512
オンNone13611391
オンIntel QuickSync13551400
オンNVIDIA CUVID13831402

QSVでのH.265/HEVCエンコード

ソフト上
でのHW
デコード
オン/オフ
LAV Video
Decoder上での
ハードウェア
デコーダの設定
最低fps最高fps
オフNone111131
オフIntel QuickSync489502
オフNVIDIA CUVID114129
オンNone114130
オンIntel QuickSync112129
オンNVIDIA CUVID111129

NVENCでのH.265/HEVCエンコード

ソフト上
でのHW
デコード
オン/オフ
LAV Video
Decoder上での
ハードウェア
デコーダの設定
最低fps最高fps
オフNone15131543
オフIntel QuickSync508518
オフNVIDIA CUVID15521586
オンNone15061535
オンIntel QuickSync14981533
オンNVIDIA CUVID14981533

まとめ

 分かったことは下記の通りです。

最速fpsまとめ

  • エンコードとデコードは同一のデバイスを使用する。(QSVエンコならQSVデコード、NVENCならNVDECの組み合わせ)
  • A’s Video Converter上の「ハードウェア デコードを有効にする」の設定は必ずチェックを入れない

 おおよそ予想通りの結果となったと思われる。
 表を見ると、別のデコーダーを設定してもfpsの数値上では変わらない(正常に設定されていない)ように見えるが、タスクマネージャーを観察すると確かに指定したデコーダを利用していることが分かる。しかし、データの受け渡し等に時間がかかってしまい、結果的に同等のfpsの値となるようだ。この辺は、CPUやRAM、VRAMの高速化やPCIe 4.0の採用などで若干改善される可能性はある。
 なお、「LAV Video Decoder」の設定で「DXVA2」(DirectX Video Acceleration 2.0)や「D3D11」(Direct3D 11)を通してQSV、NVDECでデコードさせると更に高速になるようだが、仕様など詳しいことはさっぱりわからん。以上。