CentOS7 VAAPIでHWエンコード

リポジトリの追加

# yum -y install yum-utils epel-release
# yum-config-manager --disable epel-release
# yum-config-manager --add-repo=http://negativo17.org/repos/epel-multimedia.repo
# yum-config-manager --disable epel-multimedia

・インストール

# yum --enablerepo=epel,epel-multimedia install libva libva-devel libva-intel-driver libva-utils

# vainfo
※利用可能なプロファイル一覧が表示されればOK

ffmpegのインストール
https://trac.ffmpeg.org/wiki/CompilationGuide/Centos

ffmpegで動作確認

※vaapi_device で指定するHWエンコードバイスは ls -n /dev/dri で確認

# ffmpeg -vaapi_device /dev/dri/card0 \
  -hwaccel vaapi \
  -hwaccel_output_format vaapi \
  -i input.mp4 \
  -c:v h264_vaapi  -profile:v 100 -level 40 -qp 22 \
  -c:a copy \
  output.mp4

・TSのエンコード

# ffmpeg \
  -vaapi_device /dev/dri/card0 \
  -hwaccel vaapi \
  -hwaccel_output_format vaapi \
  -i input.ts \
  -analyzeduration 30M -probesize 30M \
  -vf 'format=nv12|vaapi,hwupload,scale_vaapi=w=720:h=480' \
  -c:v h264_vaapi -profile:v 77 -level 31 -qp 22 -quality 0 -aspect 16:9 \
  -c:a libfdk_aac  -ac 2 -ab 96k -ar 48000 \
  output.mp4

hwaccel vaapi
 → HWデコードする
hwaccel_output_format vaapi
 → HWデコード結果をそのままHWエンコーダに渡す
   ※ソフトウェアフィルタを使う場合はyuv420p等を指定する
analyzeduration、probesize
 → TSなどのフォーマットでは読み込みのために動画ストリームの解析が必要
   デフォルトの解析時間・解析サイズでは動画を読み込めない場合があるため、長めに修正する
   analyzeduration:デフォルト 5秒(5Mマイクロ秒)
   probesize:デフォルト 5Mバイト
scale_vaapi
 → HWエンコーダでリサイズ
profile:v
 → h.264のプロファイル
   High:100 Main:77 Baseline:66
level 
 → h.264のレベル
   4.0 → 40 3.1 → 31 1.3 → 13
qp
 → 画質
   デフォルト20
   数値が低いほど高画質、高ビットレート
quality
 → 品質
   デフォルト0
   数値が低いほど高画質、低速

・VAAPIの情報
https://wiki.libav.org/Hardware/vaapi
https://gist.github.com/Brainiarc7/95c9338a737aa36d9bb2931bed379219
https://trac.ffmpeg.org/wiki/Hardware/VAAPI