VAAAPIの使用をIntel謹製のMedia Driverに切り替えてQSVエンコードをUbuntuで実現する

DTVLinux, DTV, Ubuntu, ffmpeg, エンコード

これまで、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の際は、次のような形で表示されていた。

$ vainfo
libva info: VA-API version 0.39.4
libva info: va_getDriverName() returns 0
libva info: User requested driver 'i965'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_39
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.39 (libva 1.7.3)
vainfo: Driver version: Intel i965 driver for Intel(R) Kabylake - 1.7.3

media-driverを利用した場合

こんな形の表示に変わる。

$ vainfo
error: XDG_RUNTIME_DIR not set in the environment.
error: can't connect to X server!
libva info: VA-API version 1.6.0
libva info: va_getDriverName() returns 0
libva info: User requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_6
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.6 (libva 2.6.0.pre1)
vainfo: Driver version: Intel iHD driver - 2.0.0

ffmpegでVAAPIを用いたエンコード

ffmpegでVAAPIを用いたエンコード方式は、以下をご参照頂きたい。

これでIntelのドライバを使用したVAAPIはできるようになっているのだが、本命はffmpegのh264_qsvを使うところ。ここから先は以下の記事で述べることとしよう。

https://webnetforce.net/ffmpeg-with-qsv-ubuntu/ ‎

執筆者紹介

Thir

購入したガジェットの紹介やサーバーの構築方法、スマートホーム化等、そのときハマっていたもののメモ書き・趣味の備忘録ではありますが、お役に立つ情報があれば幸いです。最近はYouTubeでもレビュー動画やVlogをあげています。サイト紹介・プロフィールはこちら。依頼・お問い合わせはこちらから。