Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- HW:ハードウェア
- SW:ソフトウェア
- VE:Video Encode
- ■AviUtlからNVEnc/QSVEnc等を使ってHWエンコードしたのに
- 思ったより速度が出ないし、GPU使用率(VE)もあまり上がらないよという人へ
- ※一言で言うと、AviUtlからHWエンコする場合は
- HWエンコーダの能力をフルに生かすことはできにくいよという話。
- ・HWエンコーダを使って極めて高速なエンコードを行うには、
- "入力ファイルのデコードから出力ファイルのエンコードまで"の
- 「処理の流れ全て」が高速で行われるようにする必要がある。
- どこかにボトルネックがあると、それにより速度が落ちてしまい、
- HWエンコーダをフルに使い切ることができないのでGPU使用率(VE)も上がらない。
- 理想的なのは全ての処理をHW(GPU)側で行うようにすること。
- ・GPUが持つHWエンコーダの能力自体は高いのだが、エンコーダへの入力までに
- ボトルネックが存在し、HWエンコーダの能力をフルに引き出せていないことが多い。
- 当然だがSW側でフィルタ処理等を行っていると、それがボトルネックになるし、
- デコードをSW処理で行っていると、そこもボトルネックになりやすい。
- ・AviUtlを使わずに、NVEncC/QSVEncC(CLI)を直接使って--avhwオプションを指定すると
- GPUのHWデコード機能を使うことになり、エンコード速度やGPU使用率(VE)が上がりやすくなる。
- つまりエンコード速度を突き詰めるなら、AviUtlを使わず、直接CLIを使うのが一番良い。
- (当然だが入力ファイルがHWデコードに対応した形式である必要がある)
- ・QSVEncをAviUtlから使う場合、AuoLinkフィルタを使うと
- QSVEncC(CLI)で--avhwを指定した場合と同様の処理になり、
- エンコード速度やGPU使用率(VE)が上がりやすくなる。
- ただしAuoLinkを使う場合、AviUtl側ではフィルタ処理等はできず、トリムくらいしかできない。
- (AuoLinkを使わない場合の処理の流れはNVEncと同様になるので下記参照)
- ・NVEnc/QSVEncをAviUtlから使う場合(QSVEncについてはAuoLinkを使わない場合)、
- AviUtlの入力プラグインがデコードを行い、受け取ったフレームを
- AviUtlの出力プラグインがNVEncC/QSVEncC(CLI)に渡すという流れになる。
- デコードがSW処理となり、更にフレームをCLI側に転送する処理等もあるので、
- それらがボトルネックとなり、HWエンコーダの能力をフルに生かすことができず、
- エンコード速度やGPU使用率(VE)が上がりにくい。
- 当然だがAviUtl側でフィルタ処理等もしているなら、それらもボトルネックとなる。
- ・AviUtlを使う場合、
- ・元ファイルの形式(TS/MP4等)
- ・使用する入力プラグインの種類(ファイル読み込み後に"その他→ファイルの情報"で確認可)
- も重要。TSファイルの場合、m2v.auiよりもlwinput.auiの方がデコードが速くなることもあるので
- 「入力プラグイン優先度の設定」を適切に調整して入力プラグインを変更してみると良い。
- ・ちなみに、HWデコードに対応したビルド(POP氏ビルド等)のL-SMASH Worksの設定で
- "Preferred decoders"にh264_cuvid、h264_qsv等を指定すると
- GPUのHWデコード機能を使うことができるが、これは
- 「GPU側でHWデコード処理を行って、得たフレームを一度AviUtl側(SW側)に戻す」
- という処理になってしまうので「処理の流れ全てをHW(GPU)側で行う」という形にはならず、
- 速度向上にはつながりにくい。むしろ逆に遅くなってしまうこともあるので注意。
- ・AviUtlのBenchmark pluginを使うと、
- 「AviUtlが出力プラグインにフレームを渡す速度」
- を計測することができる。
- Ch's barn: Benchmark plugin
- http://csbarn.blogspot.com/2012/05/benchmark-plugin.html
- AviUtlからの出力では、原理的にこれ以上の速度は出せないことになる。(※1)
- この数値が低すぎる場合、入力ファイルのデコード処理や
- フィルタ処理がボトルネックになっている可能性が高い。
- ※1:ただし「QSVEncでAuoLinkを使う場合」は出力プラグイン経由ではなく
- QSVEncC(CLI)が直接処理を行うので、この速度に制限されることはない。
- ・rigaya氏の場合、
- 環境: i9-7980XE(18C/36T)+GTX1060
- 使用ソフト: AviUtl+lwinput.aui+NVEnc
- 入力ファイル: 1920x1080p H.264
- 出力方式: H.264 CQP
- というAviUtl経由のNVEncエンコードで、270fps程度出ている模様。
- これはかなり良いCPUを使ってデコード等のボトルネックを少なくしたケースだが、
- それでもGPU使用率(VE)は55%程度。
- rigaya氏いわく「Aviutl経由では、VEの使用率は50%前後行けばよいほう」とのこと。
- 詳細:https://rigaya34589.blog.fc2.com/blog-entry-1078.html#comment5317
Add Comment
Please, Sign In to add comment