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

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

ドライバは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

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

OBSには初期設定でVAAPIのエンコードが含まれているため、出力設定で配信と録画両方のエンコーダをFFMPEG VAAPIに変更します。

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

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

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

公開日:2021年09月23日
最新更新日:2021年09月23日

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

他の記事も見る

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