UbuntuでRadeonのAMDGPUドライバでOBSでハードウェアエンコードする
今回、Ubuntu 20.04 がインストールされているDELLのスリムPC(Optiplex 790)用にロープロファイルのグラボ Radeon RX 550 を中古で購入したので、Radeon のビデオコーデック・エンジン(VCE)を使用して OBS でハードウェアエンコードするまでの作業をまとめました。
現在の amdgpu ドライバー 21.40.2 は dpkg 形式(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日