kai4562

たまに書いています

NVEncで溜まったTSファイルをよしなにやる

以前からPT3を使ってテレビ録画をやっているわけなんですが、録画アプリをTvRockからEDCBに変更しました。
番組表などがTvRockよりいい感じになり、結果として録画のペースが上がりTSにHDDを食いつぶされ始めているので、いい加減エンコードをやります。
エンコード需要の高まりとmadVRによる高画質再生に手を出した結果、GTX1060 3GBを購入してしまったので、今回はNVEncどんなもんかなというのを紹介します。

NVEnc

GTXなにがし等に付いているハードウェアエンコーダです。GTX900シリーズからHEVCに対応したので、高圧縮高画質な結果が期待できます。
NVEncを使うにはTMPGEncを使ったり、Aviutlにプラグインを入れたりと色々あるんですが、今回はFFmpegでやります。

やる

こちらの記事のバッチファイルを少し弄ったものを使わせていただいています。
たまったm2tsファイルをnvencでhevcなmp4に変換するバッチスクリプト – 俺様忘備録
変更しているのはフォルダ名やファイルの拡張子とFFmpegのオプションで、オプションは以下のようにしています。2016/09/16追記:この設定はたぶんよくない。現在いい感じの設定を模索中。

ffmpeg.exe -i "%%i" -s 1280x720 -preset slow -coder 1 -rc ll_2pass_quality -cmp chroma -threads 0 -vcodec nvenc_hevc -vf yadif=0:-1 "MP4\%%~ni.mp4"

速度など

これぐらい出ます。調子がいいときは3.5倍とかになるんですが、大体2.5から3.0ぐらいです。

ネットワークドライブ越しにエンコードするとよくて2倍、大体1.5倍に速度が落ちることが分かったので、一旦ローカルのSSDにおいてエンコードしています。バカっぽいですが仕方ないですね。
圧縮率としては大体元ファイルの1/8ぐらいになります。
GPUの負荷などはこんな感じです。Video Engine LoadってのがNVEncに使われているハードウェアエンコーダの負荷だと思うのですが、きっちり使い切ってはくれません。
2016/09/17追記:GPU使い切ってくれないのはyadif(デインターレース)の処理がCPUで入っているから。yadifを切れば5倍速ぐらいになりました。

IntelのCPUにはいつからかQSVという機能がついていて、それを使えば外部GPUなしにハードウェアエンコードできるのですが、QSVよりかは速いです。
あとQSVのHEVCエンコードは明らかに遅くて使い物にならなかった気がします。

画質

普通に眺める分には問題ないと思います。あまり気にしていません。
なぜかというと、TSをAmazonDriveにバックアップするつもりだからです。
画質を重視するならCPUでエンコードするほかないと思います。ただ私のパソコンはCPUにPentium G4400というシケた物を使っているので、非現実的です。
あとエンコードのためにわざわざGPUを買う必要もあまりなくて、この手の見れればいいや的需要はIntel QSVで解決すると思います。ただしQSVで現実的にエンコードできるのはH264です。
私の場合はmadVRによるアップスケーリングをやりたいというのもありGPUを載せたため、NVEncを使っています。

結論

対応GPU持ってるならいいと思いますが、無いならQSVでいいです。
もったいないのでゲームとかやろうかな?