Tom’s PCparts Blog With Other Games

主に自作PCと惑星WTのネタをぶち込むブログ

CUIエンコーダのNVencのつかいかた

皆様こんにちは。TOM1192です。

いつぞやに、

 

tomspcparts.hatenablog.com

 NVEncのコマンドを内包したHDRエンコードのバッチファイルを作ってるわけなんですが、実際どういう作り方をすればいいのかというお話です。

 

まず、NVencとは

rigaya34589.blog.fc2.com

rigayaさんが作ってる、NVIDA CUDA Samplesなどをベースに設計されたNvidiaGPUでハードウェアエンコードをしてくれるAviUtl用プラグインスタンドアロンソフトです。

 

 

AviUtlではGUIで設定を作成できるのですが、スタンドアロンで動かす場合は、各種オプションを手動で有効化させたバッチファイルを作成し、そこに動画のファイルをドラッグアンドドロップすることでエンコードを行います。

同様の手段をとるエンコードソフトとしては「ffmpeg」が有名ですが、こちらはNvidiaGPU専用になったかわりに同じ設定でもffmpegよりなんかスループットが良いという特徴があります。

なお、同様にAMDのVCEを使う「VCEEnc」とIntelのQSVを使う「QSVEnc」もあります。おおよそのオプション設定は同じですが、一部はGPU側が使えるコマンドが同じでないが故に使えないものもあります。

 

さて、本題ですがオプション設定は

github.com

こちらにあります。

実際の書き方は、

「NVenc.exe -i "%~1" -o "%~1encorded.mp4" --avhw -c hevc -u quality --cqp 20:23:25 --gop-len 24 -b 0 --profile main10 --output-depth 8」

のように書きます

私が今回使っていたオプションで常に使うべきオプションは、

-i "%~1"(ファイル入力名設定)・・・これはドラッグアンドドロップで使う場合は記載必須。「"%~1"」は入力ファイル名を同じ名前として取り扱うという表記。

 

-o "%~1encorded.mp4"(ファイル出力名設定)・・・こちらは出力先の名前の設定。「%~1」だとエンコード完了後上書きしてしまうので、別途後ろに文字列を追加してファイル名を変更させておくこと。

 

--avhw、--avsw(デコード設定)・・・avhwはハードウェアデコード、avswはソフトウェアデコード。前者は高速だが、読めないコーデックがあるため万能ではない。avswは基本的にどんなやつも読める代わりにCPUでデコードを行う。そのため、CPUがボトルネックになる可能性がある。

 

-c(コーデック設定)・・・h264とhevcとav1を指定可能。hevcはH.265で、こちらのほうが高画質、高圧縮にできるので悩みがなければこちらを推奨。

なお、H.265はGTX1000番台以降じゃないと使用できないためグラボの型番は要確認。

また、RTX4000番台以降だとAV1も指定が可能になる、が当方は4000番台もグラボを持っていないため未検証。

 

-u(クオリティ設定)・・・P1~P7 or Performance、default、Qualityから指定する。悩んだならP7もしくはQualityを選んでおけば画質は良くなる。ただし画質が高いほどエンコード時間が伸びる(正確にはGPU負荷が凄まじくなるがゆえに伸びる)という点には注意すること。

 

--cqp、--cbr、--vbr(エンコードモードの指定)・・・固定量子化量(cqp)、固定ビットレート(cbr)、可変ビットレート(vbr)を設定できる。

後者2つはビットレートを基準にエンコードをするのに対し、最初の固定量子化量はフレームの比率を設定することでエンコードする。

圧縮率はcqpだとほぼ一定。逆に後者2つはビットレート基準なせいで、大きく変動する。

悩んだらcqpが一番安牌。 

 

--gop-len(GOP長の設定)・・・エンコードにおけるI・P・Bフレームの基準単位。大きくするとエンコード時間が早くなるが、品質が低下する。12~36くらいで適当にしておくとよさげ。

 

-b (連続Bフレーム数)・・・多いと圧縮率が上がるが画質低下の可能性あり。悩んだ場合0を指定しておくとよい。

 

--profile(エンコーダのプロファイル設定)・・・後述のビット深度に応じて変更する。HDRならmain10もしくはmain444が推奨。普通の動画ならmainでOK。

 

--outputdepth(出力動画のビット深度設定)・・・8 or 10を指定。基本的な動画においては8を推奨。10bit出力はHDR出力を行う場合にのみ使用する。設定が入っていない場合は8bitで行われる。なお、前述のプロファイル設定がmainの場合は10bit深度が使えないので書かないほうがよい。

 

 

他のオプションはもありますが、ココまで書くことができればエンコードドラッグアンドドロップで行えるようになります。

ただし、この表記の場合はNVEnc.exeをバッチファイルと同じフォルダにおいておく必要がある点だけは注意が必要です。 

 

気が向いたらx264とかも考えます。

 

今回はここまで。今年初の普通な記事です。

今後もよろしくおねがいします。