Ubuntu22.04でintel製CPU内臓のGPUを利用して H.265ハードウェアエンコード

以前はffmpegをコンパイルしなおす必要があったのですが、最近はubuntuのaptで諸々入る様になり、セットアップもすぐに完了するようになりました。

前提条件

  • intel製のGPU内蔵型CPUを利用していること
  • CPUは以下の何れか(ないしはそれ以降)であること
    • skylake
    • Apollo Lake
    • Kaby Lake
    • Coffee Lake
    • Comet Lake
    • Gemini Lake
    • Ice Lake
    • Jasper Lake
    • Tiger Lake
    • Rocket Lake
    • Alder Lake
    • Raptor Lake

セットアップ

aptでインストールしただけですと、/dev/dri/renderD128のパーミッションが厳しく利用できない為、エンコードしたいユーザーはrenderグループに所属させる必要があります。

# パッケージ導入
sudo apt install libva-dev libmfx-dev intel-media-va-driver-non-free vainfo ffmpeg

# 現在ログイン中のユーザーをrenderグループに属させる
sudo adduser ${USER} render

# 再起動
sudo reboot

# renderD128デバイスがある事を確認
ls -l /dev/dri/render*

①h.265(HEVC VAAPI)エンコード

profileが指定できなかった為、それを除いています。

export FILENAME='input'
ffmpeg -threads 4 -vaapi_device /dev/dri/renderD128 \
    -hwaccel vaapi -hwaccel_output_format vaapi -i ${FILENAME}.ts \
    -c:v hevc_vaapi  -level 40 -qp 27 ${FILENAME}_hevc_vaapi.mp4

②h.265(qsv)エンコード

levelやqpを変更しても変化が無かったのですが、他と条件を合わせるために指定できるものは同じにして指定しました。

ffmpeg -threads 4 -vaapi_device /dev/dri/renderD128 \
    -hwaccel qsv -hwaccel_output_format hevc_qsv -i ${FILENAME}.ts \
    -c:v hevc_qsv -level 40 -qp 27 ${FILENAME}.mp4

③【ご参考】h.264(vaapi)エンコード

ffmpeg -threads 4 -vaapi_device /dev/dri/renderD128 \
    -hwaccel vaapi -hwaccel_output_format vaapi -i ${FILENAME}.ts \
    -c:v h264_vaapi -profile 100 -level 40 -qp 27 ${FILENAME}.mp4

エンコード速度、画質について

②は目に見えて画質劣化が激しく、ビットレートをへたに指定するとH.264の③よりもファイルサイズが大きくなった為、検討から外しました。

私の目が節穴なのか、HEVC(H.265)エンコードした①とH.264エンコードした③の差は同程度の画質に見受けられました。「H.265はH.264と同画質でファイル容量半分」と勝手に思い込んでいた為、エンコード後の容量が似たり寄ったりだったのは想定外でした。

Noエンコード方法速度画質容量
元ファイル2,303MB
h.265(HEVC VAAPI)エンコードx3.5前後324MB
h.265(qsv)エンコードx3.5前後×~△151MB
h.264(VAAPI)エンコードx5~6程度332MB

とはいえ、私の場合には夜中の3時ごろからCMカットスクリプトを動かした後にそのまま続けてエンコードしているだけですので、「朝までに終わっていれば問題ない」ので自己満足でエンコードバッチのコマンドを①の物に変更して観察してみる事としました。

最後に・・・

以前はファイルサーバ兼録画サーバをRyzenで作っていたのですが、intel CPUを使ってハードウェアエンコードをすると、CPU利用時に比べて3倍以上の速度でエンコード可能で、その間のCPU使用率も大して上昇しないことから消費電力も削減可能です。

ファイルサーバにGPUエンコードの為だけにビデオカードを積んでも消費電力やイニシャルコストが増えるだけの為、ファイルサーバ用途はintel製CPUが良さそうですね。

タグ , . ブックマークする パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください