はじめに
グラフィックカードを GeForce に乗り換えた目的のひとつに NVEnc を使ってみたいというのがあった。
やっと試す時間が出来たので小一時間詰めて遊んでみた。
エンコーダー探し
この手の界隈で著名な rigaya 氏の作成した NVEncC64.exe
を使用することとした。
NVEncC64 のパラメータ弄り
この辺はもの凄く丁寧にドキュメント化されているの、よーく読んで引数を組み立てて行く。
「基本的なコマンドの表記」を参考にしてとりあえず実行出来ることを確認。
続いてオプションを追加しながら動きを見ていくような感じ。
結果として以下のような引数でテストすることにした。
NVEncC64.exe --codec av1 --avhw --qvbr 30 --preset quality --sar 4:3 --output-depth 10 --avs -i INPUT.avs -o OUTPUT.av1 --vmaf
入力には Avisynth のスクリプトが使えるので --avs
を付けて明示的に指定。
ソースの解像度は 1440x1080 として計算量を少なくさせているので、--sar 4:3
を付けて FullHD に伸ばす。
Avisynth でバンディング低減を 10bit 処理しているので、出力も合わせて --output-depth 10
として 10bit にしている。
動画のコーデックは AV1 を使ってみたいのでこれを指定。
固定品質モードでエンコードしたいから --qvbr n
としてこの n の数値を弄って画質調整をしてみた。
画質を客観的評価したいので --vmaf
を付けて計算してもらうようにした。これが凄く楽で良かった。
いろいろ弄った結果
筆者が普段エンコードしているのはコーデックに HEVC を用いた CPU エンコード。
パラメータは VMAF 97.2 ほど出せるように調整したパラメータとなっている。
先ずは任意のアニメソースを OP だけに Trim して普段通りエンコード。これを比較対象とした。
AV1 で –qvbr 25 とした時、VMAF が 96.9 を差して良い感じのラインを取れたと思った。
しかし、ファイルサイズをみると CPU エンコした 39.9MB に対して 64.6MB となった。
それならばと、今度はファイルサイズが近くなるように qvbr を増やし、30 としたところで 42.4MB 程度に収まったが、VMAF は 95.75 と結構下がった。
VMAF は 90 以上で高画質と言われるそうなのでそれでも十分な気もするけど、自分が昔に決めたラインを下回るのはなんだかなー と思った。
分かったこと
NVEnc に限らず GPU エンコードは必要以上にビットレートが盛られた感じでファイルサイズが大きくなりがちだということが分かった。
神経質に画質を求めつつファイルサイズも極力コンパクトにしたい場合には不向きである。
エンコード速度と画質を求めた場合のベストメソッドとして GPU エンコードはあるのだと思う。
それは動画配信や長時間の動画をエンコードするといった動画編集ソフトに当てはまるハズ。
つまり、アニメを保存用にエンコードしたい場合は CPU エンコード、配信は動画編集ソフトでは GPU エンコードというように使い分けをすればいいのだなと。
おわりに
今回、小一時間試した限りでは上述通りの認識になった。
NVEnc を常用という訳には行かなかったが、有名所の動画編集ソフトでは NVEnc をしっかり使ってくれるのでそれはそれでありがたく使用していこうと思う。
コメント
AV1でもBフレーム使えるので多少サイズダウン出来るかもしれません。
コメントありがとうございます!
今一度実行してみたら、デフォで B-frame は有効化されていました。
frame type IDR 9
frame type I 9, total size 0.48 MB
frame type P 540, total size 0.01 MB
frame type B 1609, total size 41.92 MB
デフォルトで入ってましたか(;・∀・)
ソフトエンコに比べてHWエンコはまだまだ改良の余地がありますね