Ubuntu 18.04 + IMSS 2018R2 + ffmpeg4 QSVエンコード

Intel Media Server Studioの最新版を日本で一番チェックしているのは自分ではないか、という自負がある。2017年の頃からZ270チップセットでQSV対応させたkernelが起動しないことに悩んでいるからだ。vPro対応している安いマザーボードがZ270くらいしかないんだよね。LinuxでQSV使うにはskylakeにしておきたいし。2018年最初のバージョンは2018R1という、続きがありそうな名前が付けられている。しかし、待てど暮せどR2が出てくる気配はなく、2018年も終わりが近付く。

やむなく、vPro対応のZ170マザーボードを買った翌日くらいに、2018R2がリリース。とはいえ、どうせZ270だと起動しないだろうと半分諦めながらCentOS7で試してみると何と起動してしまった。。。かれこれ数年近くQSVと付き合ってきて、このときほど嬉しかったことはないだろう。Z170のマザーボードは無駄になるけど。CentOS7で動作した構成を、今回はUbuntu 18.04で試してみる。/usr/local/srcに最新のIMSSであるMediaServerStudioEssentials2018_16.9_00183.tar.gzをダウンロード済みと仮定して進めていく。

cd /usr/local/src
tar xf MediaServerStudioEssentials2018_16.9_00183.tar.gz
cd /usr/local/src/MediaServerStudioEssentials2018_16.9_00183
tar xf SDK2018Production16.9.tar.gz
cd /usr/local/src/MediaServerStudioEssentials2018_16.9_00183/SDK2018Production16.9/generic
tar xf intel-linux-media-generic-16.9-00183.tar.gz
tar xf intel-opencl-16.9-00158.tar.gz
cd intel-linux-media-generic-16.9-00183
cp -r etc/* /etc
cp -r lib/* /lib
cp -r opt/* /opt
cp -r usr/* /usr
cd ../intel-opencl-16.9-00158
cp -r etc/* /etc
cp -r lib/* /lib
cp -r opt/* /opt
cp -r usr/* /usr

cat<<EOF>/etc/ld.so.conf.d/libdrm_intel.conf
/usr/lib64
/usr/local/lib
EOF
ldconfig

apt install -y git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc g++ libdrm-dev libpciaccess0
cd /usr/local/src
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.14.20.tar.xz
tar xf linux-4.14.20.tar.xz
tar xf /opt/intel/mediasdk/opensource/patches/kmd/4.14.20/intel-kernel-patches.tar.gz
cd linux-4.14.20
for i in ../intel-kernel-patches/*.patch; do patch -p1 < $i; done 
make olddefconfig
time make -j 4
make modules_install
make install

sed -i 's/GRUB_DEFAULT=0/GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.14.20-mss-pv5"/' /etc/default/grub
update-grub
reboot

これでQSV kernelを構築して再起動することに成功した。Ubuntu 18.04の本来のkernelよりはバージョンが低くなってしまうんだけど、こればかりは致し方ない。うちのSkylake Core i5-6500で、kernelのmakeに30分ほどかかる。他のサーバにはmake後のデータをコピーするつもり。Ubuntuの検証はしばらく振りなんだけど、ここで起動することが出来ても同梱されているテストをパスすることが出来なかった記憶。起動後に、まずはそのテストを実行してみる。

cd /usr/local/src/MediaServerStudioEssentials2018_16.9_00183
tar xf MediaSamples_Linux_2018R2.tar.gz
cd /usr/local/src/MediaServerStudioEssentials2018_16.9_00183/MediaSamples_Linux_2018R2/samples/_bin/x64
./sample_multi_transcode -i::h264 ../content/test_stream.264 -o::h264 test_out.h264 -hw -la
    :
The test PASSED

おおおお、何の問題もなくパスした。2018R2は私史上、最高のIMSSと呼んでも過言ではなさそうw 本当の本当にUbuntuでのQSVが現実的に。あとはQSV対応させたffmpeg4を構築して動作確認するのみ。パッケージャを使ってffmpegを入れると、ライブラリが何をみているのかよくわからなくなるので、手動でコンパイルする。これもCentOSで一度成功させているので、Ubuntuで構築するのもそれほど難しくはないはず。CentOSに倣って、以下のような手順でコンパイルした。

mkdir /opt/intel/mediasdk/include/mfx
cp /opt/intel/mediasdk/include/*.h /opt/intel/mediasdk/include/mfx

cat<<"EOF">/usr/lib64/pkgconfig/libmfx.pc
prefix=/opt/intel/mediasdk
exec_prefix=${prefix}
libdir=${prefix}/lib/lin_x64
includedir=${prefix}/include

Name: libmfx
Description: Intel Media SDK
Version: 16.5
Libs: -L${libdir} -lmfx -lva -lstdc++ -ldl -lva-drm -ldrm
Cflags: -I${includedir} -I/usr/include/libdrm
EOF

apt install -y libfdk-aac-dev libvorbis-dev libvpx-dev libx264-dev libx265-dev ocl-icd-opencl-dev pkg-config yasm
cd /usr/local/src
git clone https://github.com/FFmpeg/FFmpeg
cd /usr/local/src/FFmpeg
PKG_CONFIG_PATH=/usr/lib64/pkgconfig ./configure \
  --prefix=/usr/local/ffmpeg \
  --extra-cflags="-I/opt/mediasdk/include" \
  --extra-ldflags="-L/opt/mediasdk/lib" \
  --extra-ldflags="-L/opt/mediasdk/plugins" \
  --enable-libmfx \
  --enable-vaapi \
  --enable-opencl \
  --disable-debug \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libdrm \
  --enable-gpl \
  --cpu=native \
  --enable-libfdk-aac \
  --enable-libx264 \
  --enable-libx265 \
  --extra-libs=-lpthread \
  --enable-nonfree
time make -j 4
make install

これも問題なくインストール出来た。いや、本当はそれなりにはまったりなんだりしてはいるんだけどw とにかく一度成功してしまえば、手順そのものには自信が持てるからね。出来たばかりのffmpegを使って、早速QSV圧縮を試みる。これも前回成功した以下のコマンドを使えばよい。

time /usr/local/ffmpeg/bin/ffmpeg -y -nostdin -hwaccel qsv -vcodec mpeg2_qsv -i test.ts -vcodec h264_qsv -preset medium -tune film -vb 4M -vf deinterlace_qsv,scale_qsv=1280:720 -acodec copy -threads 0 qsv.mp4

おおよそ4倍速ほどで、tsからmp4を生成することが出来た。deinterlaceを外すと更にスピードが速まって12倍速くらいになるんだけど、そこは好き好きで。遂にメイン機のUbuntuでQSVに成功したことは喜ばしい。Ubuntuサーバは5台くらいあるので、このうちの数台に分散して録画環境を構築していくことが出来る。pt3も3つ持ってるしw この機会に epgrec をやめて、いまどき構成なepgstation + mirakurunに変更していく。ともあれ、本当QSVにかける時間って何とかならないものなのかね。。。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)