Archive: 2017/01/12

UbuntuとQSV

H97 Pro4は修理に出して、再びUbuntuでのハードウェアエンコード環境構築に着手。

2015年9月にIntel® Media Server StudioのCommunity Editionが無償公開されたので、予てよりこそこそとトライしていたのだが、対応するCPU世代がHaswell以降に限定されてたり、カーネルのカスタマイズ(rebuild)が必要なことからCentOSやカーネル版数の縛りが避けられずUbuntuでの環境構築になかなか難儀。昨年9月公開のIntel Media Server Studio 2017ではカーネルのrebuildも不要になったという噂も耳にしたが、CentOSとUbuntuでは話が異なる事から鵜呑みにするわけにも行かず。

Intel® Media Server StudioではなくVAAPI経由でffmpegから気軽にQSVを使えるレポートがtappieさんから報告されていたので、試してみる事に。

まずはVAAPIドライバのインストール。

yano@haswell:~$ sudo apt-get update
yano@haswell:~$ sudo apt-get install libva1 vainfo i965-va-driver
yano@haswell:~$ vainfo
error: can't connect to X server!
libva info: VA-API version 0.39.2
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_38
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.39 (libva 1.7.1)
vainfo: Driver version: Intel i965 driver for Intel(R) Haswell Desktop - 1.6.1.pre1 (1.6.1.pre1)
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Simple : VAEntrypointEncSlice
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSlice
VAProfileH264MultiviewHigh : VAEntrypointVLD
VAProfileH264MultiviewHigh : VAEntrypointEncSlice
VAProfileH264StereoHigh : VAEntrypointVLD
VAProfileH264StereoHigh : VAEntrypointEncSlice
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileNone : VAEntrypointVideoProc
VAProfileJPEGBaseline : VAEntrypointVLD
VAProfileH264MultiviewHigh : VAEntrypointVLD
VAProfileH264MultiviewHigh : VAEntrypointEncSlice
VAProfileH264StereoHigh : VAEntrypointVLD
VAProfileH264StereoHigh : VAEntrypointEncSlice
yano@haswell:~$ ls -n /dev/dri
total 0
crw-rw----+ 1 0 44 226, 0 Jan 12 22:30 card0
crw-rw---- 1 0 44 226, 64 Jan 12 22:30 controlD64
crw-rw----+ 1 0 44 226, 128 Jan 12 22:30 renderD128
と/dev/dri配下にrenderD128ができれば(恐らく)OK。 続いてCompilationGuide/Ubuntuを読みながら、ffmpegのインストール。
yano@haswell:~$ sudo apt-get install autoconf automake build-essential libass-dev libfreetype6-dev \
libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \
libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev
yano@haswell:~$ sudo apt-get install yasm libx264-dev libfdk-aac-dev libmp3lame-dev
yano@haswell:~$ wget http://ffmpeg.org/releases/ffmpeg-3.2.2.tar.bz2
yano@haswell:~$ tar xvf ffmpeg-3.2.2.tar.bz2
yano@haswell:~$ cd ~/ffmpeg-3.2.2
yano@haswell:~/ffmpeg-3.2.2$ mkdir ~/ffmpeg_build
yano@haswell:~/ffmpeg-3.2.2$ PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" \
./configure --prefix="$HOME/ffmpeg_build" --pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--bindir="$HOME/bin" --enable-gpl --enable-libass --enable-libfdk-aac \
--enable-libfreetype --enable-libmp3lame --enable-libtheora --enable-libvorbis \
--enable-libx264 --enable-nonfree \
--enable-vaapi --enable-hwaccel=h263_vaapi --enable-hwaccel=h264_vaapi \
--enable-hwaccel=mpeg2_vaapi --enable-hwaccel=mpeg4_vaapi \
--enable-hwaccel=vc1_vaapi --enable-hwaccel=wmv3_vaapi
yano@haswell:~/ffmpeg-3.2.2$ PATH="$HOME/bin:$PATH" make
yano@haswell:~/ffmpeg-3.2.2$ make install
yano@haswell:~/ffmpeg-3.2.2$ make distclean
yano@haswell:~/ffmpeg-3.2.2$ hash -r
最後に↓でVAAPIのエンコーダオプションが確認できれば(恐らく)OK。
yano@haswell:~/ffmpeg-3.2.2$ ~/bin/ffmpeg -encoders 2>/dev/null | grep vaapi
V..... h264_vaapi H.264/AVC (VAAPI) (codec h264)
V..... hevc_vaapi H.265/HEVC (VAAPI) (codec hevc)
V..... mjpeg_vaapi MJPEG (VAAPI) (codec mjpeg)
yano@haswell:~/ffmpeg-3.2.2$