VAAAPIの使用をIntel謹製のMedia Driverに切り替えてQSVエンコードをUbuntuで実現する
これまで、Ubuntu(Linux)でエンコードをする際には、標準で存在しているVAAPI用のドライバ(i965-va-driver)を使用していたのだが、Intelより公式に配布されているVAAPI用のドライバ(Intel Media Driver for VAAPI)を用いることも出来る。今回はこのIntel公式のドライバへと入れかえていくこととしたい。
なお、入れ替えを行ったあとにffmpegをインストールすることで、ffmpegでよりオプションを多く利用することが出来るQSVエンコード(h264_qsv)をしたいという目論見があるのだが、そこまでたどり着けるかどうか。
Libraのインストール
Intel Media Driver for VAAPIをインストールするためには、いくつかの依存関係を解消する必要がある。具体的には、LibraとGmmLibをインストールしなくてはならない。
インストールはGitHubから。
なお、一部の情報では少し古くっており、autogenを実行しない方法が記載されているが、Libraのメジャーアップデートに伴いこの手順が必須となっている。
$ git clone https://github.com/intel/libva$cd libva$ ./autogen.sh$ make$ sudo make install
Libva-Utilsのインストール
標準で入っているLibra-Utilsがあまりにも古すぎて動作しないため、こちらもインストール。
$ git clone https://github.com/intel/libva-utils$cd libva-utils$ ./autogen.sh$ make$ sudo make install
GmmLibのインストール
これも、インストールはGitHubから。
workspaceというディレクトリをわざわざ用意するのは、後続するmedia-driverのインストールにインスパイヤされたため。
$ mkdir workspace$cd workspace$ git clone https://github.com/intel/gmmlib$ mkdir build$cd build$ cmake -DCMAKE_BUILD_TYPE= Release -DARCH=64 ../gmmlib$ make $ sudo make install
これにて依存関係はOK。
Media-Driver(Intel Media Driver for VAAPI)のインストール
基本的には、以下のサイトに記載されている内容をそのままおこなっていく形である。
$ sudo apt install autoconf libtool libdrm-dev xorg xorg-dev openbox libx11-dev libgl1-mesa-glx libgl1-mesa-dev$pwd
/media/ffmpeg/intel/workspace
$ git clone https://github.com/intel/media-driver$ mkdir build_media$cd build_media$ cmake ../media-driver$ make -j"$(nproc)"$ sudo make install
一番最後にこのような表示が出ていれば、無事ドライバがインストールされている。
Install the project...
-- Install configuration: ""
-- Installing: /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
VAAPIで使用するドライバを変更する
最後に、VAAPIでは引き続きi965-va-driverを使う設定になっているため、これを今回インストールしたiHDドライバに変更をする。
$export LIBVA_DRIVERS_PATH=/usr/lib/x86_64-linux-gnu/dri$export LIBVA_DRIVER_NAME=iHD
vainfoを使って情報を確認する
i965-va-driverの場合
i965-va-driverの際は、次のような形で表示されていた。
$vainfolibvainfo:VA-APIversion0.39.4libvainfo:va_getDriverName()returns0libvainfo:Userrequesteddriver'i965'libvainfo:Tryingtoopen/usr/lib/x86_64-linux-gnu/dri/i965_drv_video.solibvainfo:Foundinitfunction__vaDriverInit_0_39libvainfo:va_openDriver()returns0vainfo:VA-APIversion:0.39(libva1.7.3)vainfo:Driverversion:Inteli965driverforIntel(R)Kabylake-1.7.3
media-driverを利用した場合
こんな形の表示に変わる。
$vainfoerror:XDG_RUNTIME_DIRnotsetintheenvironment.error:can'tconnecttoXserver!libvainfo:VA-APIversion1.6.0libvainfo:va_getDriverName()returns0libvainfo:Userrequesteddriver'iHD'libvainfo:Tryingtoopen/usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.solibvainfo:Foundinitfunction__vaDriverInit_1_6libvainfo:va_openDriver()returns0vainfo:VA-APIversion:1.6(libva2.6.0.pre1)vainfo:Driverversion:InteliHDdriver-2.0.0
ffmpegでVAAPIを用いたエンコード
ffmpegでVAAPIを用いたエンコード方式は、以下をご参照頂きたい。
これでIntelのドライバを使用したVAAPIはできるようになっているのだが、本命はffmpegのh264_qsvを使うところ。ここから先は以下の記事で述べることとしよう。