enctac

AviUtlでHWエンコしても速度やGPU使用率が上がらないという人へ

Sep 29th, 2019
878
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. HW:ハードウェア
  2. SW:ソフトウェア
  3. VE:Video Encode
  4.  
  5. ■AviUtlからNVEnc/QSVEnc等を使ってHWエンコードしたのに
  6.  思ったより速度が出ないし、GPU使用率(VE)もあまり上がらないよという人へ
  7.  
  8.  
  9.  ※一言で言うと、AviUtlからHWエンコする場合は
  10.   HWエンコーダの能力をフルに生かすことはできにくいよという話。
  11.  
  12.  
  13. ・HWエンコーダを使って極めて高速なエンコードを行うには、
  14.  "入力ファイルのデコードから出力ファイルのエンコードまで"の
  15.  「処理の流れ全て」が高速で行われるようにする必要がある。
  16.  どこかにボトルネックがあると、それにより速度が落ちてしまい、
  17.  HWエンコーダをフルに使い切ることができないのでGPU使用率(VE)も上がらない。
  18.  理想的なのは全ての処理をHW(GPU)側で行うようにすること。
  19.  
  20. ・GPUが持つHWエンコーダの能力自体は高いのだが、エンコーダへの入力までに
  21.  ボトルネックが存在し、HWエンコーダの能力をフルに引き出せていないことが多い。
  22.  当然だがSW側でフィルタ処理等を行っていると、それがボトルネックになるし、
  23.  デコードをSW処理で行っていると、そこもボトルネックになりやすい。
  24.  
  25. ・AviUtlを使わずに、NVEncC/QSVEncC(CLI)を直接使って--avhwオプションを指定すると
  26.  GPUのHWデコード機能を使うことになり、エンコード速度やGPU使用率(VE)が上がりやすくなる。
  27.  つまりエンコード速度を突き詰めるなら、AviUtlを使わず、直接CLIを使うのが一番良い。
  28.  (当然だが入力ファイルがHWデコードに対応した形式である必要がある)
  29.  
  30. ・QSVEncをAviUtlから使う場合、AuoLinkフィルタを使うと
  31.  QSVEncC(CLI)で--avhwを指定した場合と同様の処理になり、
  32.  エンコード速度やGPU使用率(VE)が上がりやすくなる。
  33.  ただしAuoLinkを使う場合、AviUtl側ではフィルタ処理等はできず、トリムくらいしかできない。
  34.  (AuoLinkを使わない場合の処理の流れはNVEncと同様になるので下記参照)
  35.  
  36. ・NVEnc/QSVEncをAviUtlから使う場合(QSVEncについてはAuoLinkを使わない場合)、
  37.  AviUtlの入力プラグインがデコードを行い、受け取ったフレームを
  38.  AviUtlの出力プラグインがNVEncC/QSVEncC(CLI)に渡すという流れになる。
  39.  デコードがSW処理となり、更にフレームをCLI側に転送する処理等もあるので、
  40.  それらがボトルネックとなり、HWエンコーダの能力をフルに生かすことができず、
  41.  エンコード速度やGPU使用率(VE)が上がりにくい。
  42.  当然だがAviUtl側でフィルタ処理等もしているなら、それらもボトルネックとなる。
  43.  
  44. ・AviUtlを使う場合、
  45.   ・元ファイルの形式(TS/MP4等)
  46.   ・使用する入力プラグインの種類(ファイル読み込み後に"その他→ファイルの情報"で確認可)
  47.  も重要。TSファイルの場合、m2v.auiよりもlwinput.auiの方がデコードが速くなることもあるので
  48.  「入力プラグイン優先度の設定」を適切に調整して入力プラグインを変更してみると良い。
  49.  
  50. ・ちなみに、HWデコードに対応したビルド(POP氏ビルド等)のL-SMASH Worksの設定で
  51.  "Preferred decoders"にh264_cuvid、h264_qsv等を指定すると
  52.  GPUのHWデコード機能を使うことができるが、これは
  53.   「GPU側でHWデコード処理を行って、得たフレームを一度AviUtl側(SW側)に戻す」
  54.  という処理になってしまうので「処理の流れ全てをHW(GPU)側で行う」という形にはならず、
  55.  速度向上にはつながりにくい。むしろ逆に遅くなってしまうこともあるので注意。
  56.  
  57. ・AviUtlのBenchmark pluginを使うと、
  58.   「AviUtlが出力プラグインにフレームを渡す速度」
  59.  を計測することができる。
  60.  
  61.    Ch's barn: Benchmark plugin
  62.    http://csbarn.blogspot.com/2012/05/benchmark-plugin.html
  63.  
  64.  AviUtlからの出力では、原理的にこれ以上の速度は出せないことになる。(※1)
  65.  この数値が低すぎる場合、入力ファイルのデコード処理や
  66.  フィルタ処理がボトルネックになっている可能性が高い。
  67.  
  68.  ※1:ただし「QSVEncでAuoLinkを使う場合」は出力プラグイン経由ではなく
  69.     QSVEncC(CLI)が直接処理を行うので、この速度に制限されることはない。
  70.  
  71.  
  72. ・rigaya氏の場合、
  73.  
  74.    環境: i9-7980XE(18C/36T)+GTX1060
  75.    使用ソフト: AviUtl+lwinput.aui+NVEnc
  76.    入力ファイル: 1920x1080p H.264
  77.    出力方式: H.264 CQP
  78.  
  79.  というAviUtl経由のNVEncエンコードで、270fps程度出ている模様。
  80.  これはかなり良いCPUを使ってデコード等のボトルネックを少なくしたケースだが、
  81.  それでもGPU使用率(VE)は55%程度。
  82.  rigaya氏いわく「Aviutl経由では、VEの使用率は50%前後行けばよいほう」とのこと。
  83.  
  84.  詳細:https://rigaya34589.blog.fc2.com/blog-entry-1078.html#comment5317
  85.  
  86.  
  87.  
RAW Paste Data Copied