読者です 読者をやめる 読者になる 読者になる

TECHLOGICS

HYLOGICS分室。作業メモやガジェットのレビューなど、主に技術系のエントリを取り扱います。

【Linux】ffmpeg + NVENC で HVEC/H.265エンコード

f:id:kirine:20170310131857p:plain サブ機にグラボ買い増しすることにしたので前々から気になってたNVENCの実験です。やっていきましょう。

環境

OS

  • CentOS Linux release 7.3.1611 (Core)
  • kernel 3.10.0-327.22.2.el7.x86_64

HW

(サブ機のVGAがまだ手元にないので今回はメイン機で検証してます)

セットアップ

GPU ドライバインストール

NVIDIA DRIVERS Linux x64 (AMD64/EM64T) Display Driver

最新版は367.35

ffmpeg インストール

Download FFmpeg

最新版はversion 3.2.4

snapshotをダウンロード後、解凍したら./configure --enable--nvenc

多分--enable--nvencしなくてもデフォルトで有効になってる気はする、というかそんなオプションがないような。あとは適当にPREFIXとか設定しておきましょう。

configure通ったらmake && make install

エンコードテスト

ffmpeg -i ${SOURCE_M2TS} -vcodec hevc_nvenc ${ENCODED_MP4}

素材:BS11 小林さんちのメイドラゴン 第9話(1920x1080, 29.97 fps, 29m56s 3.91GB )

f:id:kirine:20170310125619p:plain

libx264との比較

encoder libx264 nvenc_hvec
エンコード時間 14分 4分19秒
動画サイズ 978 MB( 24.4 % ) 473 MB( 11.8 % )

3倍早い上に容量も半分以下で素晴らしい。特に容量はエンコード前と比較すると1/8~1/9程度と非常にコンパクト。

気になる画質については普段FHDで見てることもあって個人的にはあんまり違いがわからない感じでした。

画質について [2017.03.11 追記]

基本的に問題ないと思っていたんだけど、やっぱり動きの激しいシーンでは結構気になるかもしれない。

今回特に気になったのがOPの以下のシーン

original

http://cdn-ak.f.st-hatena.com/images/fotolife/k/kirine/20170311/20170311065705_original.png?1489183591

libx264

http://cdn-ak.f.st-hatena.com/images/fotolife/k/kirine/20170311/20170311065619_original.png?1489183590

nvenc_hvec ( -preset slow )

http://cdn-ak.f.st-hatena.com/images/fotolife/k/kirine/20170311/20170311065512_original.png?1489183590

画質が気になったので-preset slow(hq 2 passes)にしてみたのだけど、結局-preset defaultと比較して時間が倍掛かるわりに画質は改善されてない気がする。

nvenc_hvecのpresetにはlosslessもあるので試してみたいのだけど今のところエラーが出て上手くいかないので試行錯誤中。

トラブルシュート

エンコード時にCannot load NvEncodeAPIGetMaxSupportedVersionのメッセージが出て失敗する場合はドライバが古いので更新しましょう。

余談

ところで小林さんちのメイドラゴン、面白いので見てない人は是非。そうそう、ED主題歌も発売中です。

f:id:kirine:20170310125928p:plain