ffmpegでIntelのGPUをVA-APIを使ってh264エンコードしたメモ

ArchLinuxで、タイトルの操作を行った時のメモです。

まずは、必要ソフトウェアのインストールとDRIデバイスファイルへのアクセス権付与


# pacman -S ffmpeg libva libvdpau vdpauinfo libva-intel-driver
# usermod -aG video [ユーザー名]

あとはffmpegにオプションを付けて実行


$ ffmpeg -y -vaapi_device /dev/dri/renderD128 -hwaccel vaapi \
-hwaccel_output_format vaapi -i in.mkv \
-vf ‘format=nv12|vaapi,hwupload’ \
-c:v h264_vaapi -b 8M -g 50 \
-qcomp 0.7 -qmin 10 -qmax 51 -qdiff 4 -subq 7 \
-me_range 16 -i_qfactor 0.714286 -acodec copy \
out.mp4

CPU使用率がCPUエンコードに比べてほぼ0になり処理時間も再生時間の0.9倍から4.5倍程度にスピードアップ(ボトルネックはNFSのIO)になった。
試しにtmpfs上で実行してみたら、処理時間は8倍に大幅アップ。vmstatやnmonで見るとGPUの処理待ちはIOWaitとして表示されるみたいです。
ファイルサイズは、ビットレートが8Mbpsなので単純計算で1時間で3.6GB、音声も含めると4GBちょい。