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