UbuntuでRadeonのAMDGPUドライバでOBSでハードウェアエンコードする

今回、Ubuntu 20.04 がインストールされているDELLのスリムPC(Optiplex 790)用にロープロファイルのグラボ Radeon RX 550 を中古で購入したので、Radeon のビデオコーデック・エンジン(VCE)を使用して OBS でハードウェアエンコードするまでの作業をまとめました。

現在の amdgpu ドライバー 21.40.2dpkg 形式(debファイル)での提供となっていますが、21.40.2 を apt コマンドでインストールしても、vainfoコマンド(ハードウェアエンコーダーライブラリVA-API情報の確認コマンド)で以下のエラーとなってしまいました。

$ apt list amdgpu
一覧表示... 完了
amdgpu/focal 21.40.2.40502-1350682 amd64
$ vainfo
libva info: VA-API version 1.12.0
libva info: Trying to open /opt/amdgpu/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva info: va_openDriver() returns -1
vaInitialize failed with error code -1 (unknown libva error),exit

RADEONのハードウェアエンコーダーライブラリである radeonsi_drv_video.so ファイルが見つからないようです。

解決方法は、実は amdgpu ドライバーパッケージをインストールするだけではハードウェアエンコードなどのオプションのライブラリはインストールされず、amdgpu-install コマンドも実行する必要がありました。

$ amdgpu-install

これで vainfo コマンドが正常に実行できるようになりました。

$ vainfo
libva info: VA-API version 1.12.0
libva info: Trying to open /opt/amdgpu/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_8
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.12 (libva 2.13.0)
vainfo: Driver version: Mesa Gallium driver 21.3.0-devel for Radeon RX550/550 Series (POLARIS12, DRM 3.41.0, 5.13.0-27-generic, LLVM 12.0.1)
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Main              : VAEntrypointVLD
      VAProfileVC1Simple              : VAEntrypointVLD
      VAProfileVC1Main                : VAEntrypointVLD
      VAProfileVC1Advanced            : VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointEncSlice
      VAProfileH264High               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointEncSlice
      VAProfileHEVCMain               : VAEntrypointVLD
      VAProfileHEVCMain               : VAEntrypointEncSlice
      VAProfileHEVCMain10             : VAEntrypointVLD
      VAProfileJPEGBaseline           : VAEntrypointVLD
      VAProfileNone                   : VAEntrypointVideoProc

ちなみにamdgpu-installは/usr/bin配下に存在します。

$ which amdgpu-install
/usr/bin/amdgpu-install

続いてOBS側で、ハードウェアエンコードの設定を行います。

OBSには初期設定でVAAPIのエンコードに対応(もちろん vainfo コマンドが正常に実行出来る必要がある)しているため、出力設定で配信と録画両方のエンコーダをFFMPEG VAAPIに変更します。

ビットレートはどちらも初期設定で2500kbpsのため、録画に関しては5000kbpsに引き上げました。

Noteちなみに10000kbps(10Mbps)に引き上げると、映像がかくついてまともに録画できませんでした。RX 550 の限界でしょうか?

以上の手順で、Radeon のAMDGPUドライバでOBSでハードウェアエンコードする事ができました。

※以下は古い形式のAMDGPUドライバのインストール方法です。メモとして残しておきます。

ドライバはAMDのAMDGPUドライバをインストールしました。

しかしOBSでのハードウェアエンコード(VAAPI)がドライバに問題があるという内容で失敗します。

そこで vainfo を実行したところ、/usr/local/lib/dri/radeonsi_drv_video.so が見つからない旨のエラーが出力されています。

$ vainfo
libva info: VA-API version 1.12.0
libva info: Trying to open /usr/local/lib/dri/radeonsi_drv_video.so
libva info: va_openDriver() returns -1
vaInitialize failed with error code -1 (unknown libva error),exit

radeonsi_drv_video.so を探してみると、/opt/amdgpu/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so が見つかりました。

$ locate radeonsi_drv_video.so
/opt/amdgpu/lib/i386-linux-gnu/dri/radeonsi_drv_video.so
/opt/amdgpu/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
/usr/lib/i386-linux-gnu/dri/radeonsi_drv_video.so
/usr/lib/i386-linux-gnu/dri/radeonsi_drv_video.so~
/usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
/usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so~
/var/lib/flatpak/runtime/org.freedesktop.Platform.GL.default/x86_64/19.08/54eadc8792dbc1ab739e47cd22f7e97458ee6f419ea8d4564dafd71c54199ac7/files/lib/dri/radeonsi_drv_video.so

参考/opt/amdgpuはAMDのAMDGPUドライバのインストールディレクトリです。

radeonsi_drv_video.soへのパスを/opt/amdgpu/lib/x86_64-linux-gnu/driに変更する必要があるため、/etc/environmentファイルを開き、LIBVA_DRIVERS_PATH環境変数に/opt/amdgpu/lib/x86_64-linux-gnu/driを指定して、一旦OSを再起動します。

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
LIBVA_DRIVERS_PATH=/opt/amdgpu/lib/x86_64-linux-gnu/dri

再度vainfoの結果を見るとサポートされているプロファイルが正常に表示されました。

$ vainfo
libva info: VA-API version 1.12.0
libva info: Trying to open /opt/amdgpu/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_7
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.12 (libva 2.12.0)
vainfo: Driver version: Mesa Gallium driver 21.2.0-devel for Radeon RX550/550 Series (POLARIS12, DRM 3.42.0, 5.11.0-34-generic, LLVM 12.0.1)
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileNone                   :	VAEntrypointVideoProc

公開日:2021年09月23日
最終更新日:2022年05月11日

記事 > Linux > UbuntuでRadeonのAMDGPUドライバでOBSでハードウェアエンコードする

他の記事も見る

このページのトップに戻る