LoginSignup
11
4

More than 3 years have passed since last update.

まさかのCPUでの動画デコードがボトルネックだった動画エンコードを爆速にした話

Posted at

NVDecを有効活用したかった

Core i7 4770ではもはや役者不足

筆者の環境を書くと、CPUはCore i7 4770、メモリはDDR3の16GB、GPUはGeForce 1050Tiです。これでAviUtlを使いFullHD、60Pの動画をNVEncでエンコードしようとしてもタスクマネージャのGPUのところのVideo Encodeが100%にならないのです。なんでかと思ってたら前段階の動画デコードにCPUを使用していて、それがずっと100%に張り付いていた。どうもここがボトルネックみたいだったのです。もう5年も6年も前のCPUで、いくらCore i7といえどもはや役者不足になっていたのでした。

試しにrigaya氏のNVEncCでデコードをGPUに任せてみる

CPUデコードではGPUのVideo Encodeが40%行かないくらいしか有効活用できなく、20分の動画エンコードにかかった時間がMUX合わせて10分かかりました。それがデコードもGPUに任せると、Video Decodeが50%程度になり、Video Encodeが100%にほぼ張り付き、総エンコード時間は約2分に短縮されました。コマンドとしては、
NVEncC64.exe --avhw --fps 60 -i file1.mp4 --audio-copy -o file2.mp4
です。--avhwがキモ。これでデコードをGPUに任せることができます。

2019-05-06.png

AviUtlでNVencを使った場合の、こんなしょぼいVideo Encodeの使い方ぶり、そしてVideo Decodeを使わない状況から、

2019-05-06 (3).png

このようにキッチリ回してくれます。CPUもさほど使わなくなります。

AviUtlで恩恵を受けることはできるか

できます。L-SMASH Works r935からNVDecを利用できるようになりました。AviUtlの「ファイル」→「環境設定」→「入力プラグインの設定」→「L-SMASH Works File Readerの設定」を選びます。
そうすると、
2019-05-06 (5).png

こんな画面がでますので「Preferred decoders」のところにh264_cuvid,hevc_cuvidと入力します。そうすることでGPUでデコードを処理できるようになります。このように。

2019-05-06 (6).png

思ったほど使ってはいませんが、CPUが100%べったり張り付きではないことはわかります。総エンコード時間は11分。あれ?

総括

無編集で良いのならばrigaya氏のNVEncCで5倍くらい速くできる。AviUtlで編集するのだとL-SMASH Worksで一応GPUデコードはできるものの、恩恵はあんまりない?という結果に。L-SMASH Works r935 Release2では「h264_nvdec」オプションができたものの利用できないです。なんででしょうね…。

参考にしたところ

NVEncC オプションリスト
L-SMASH Works r935 で何が変わったの?
L-SMASH Works r935 release2 の更新内容

11
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4