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と/dev/dri配下にrenderD128ができれば(恐らく)OK。 続いて
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
![[External]](/~yano/parts/extlink.png)
yano@haswell:~$ sudo apt-get install autoconf automake build-essential libass-dev libfreetype6-dev \最後に↓でVAAPIのエンコーダオプションが確認できれば(恐らく)OK。
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
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$
で、早速エンコード動作の確認。画質の調整パラメータはqp一択という事なので、10~30で廻してみた。
yano@haswell:~/qsv$ for qp in 10 15 20 25 30;do \2分半の地デジ番組(1440x1080)のmp4変換だが0m24.123s~0m28.198sで、概ね30秒弱(実時間の5分の1)という結果。qp指定値はbitrateとファイルサイズに影響するものの、処理時間には影響無し。ts原本(269MB)のビットレートが"14982 kb/s"だったので、qp=15だと原本相当(274MB)。qp=20だと諸々半分(126MB)。
(time ~/bin/ffmpeg \
-vaapi_device /dev/dri/renderD128 \
-hwaccel vaapi \
-hwaccel_output_format vaapi \
-i ./input.ts \
-map 0:0 -map 0:1 \
-analyzeduration 30M \
-probesize 30M \
-vf 'format=nv12|vaapi,hwupload' \
-c:v h264_vaapi \
-level 40 \
-aspect 16:9 \
-qp ${qp} \
-c:a copy \
./ffmpeg_1080p_qp${qp}.mp4 \
) 2>&1 | tee ffmpeg_1080p_qp${qp}.log;done
yano@haswell:~/qsv$ grep -e "^real" -e "^video:" ffmpeg_1080p_qp*.log
ffmpeg_1080p_qp10.log:video:569969kB audio:4756kB subtitle:0kB other …
ffmpeg_1080p_qp10.log:real 0m25.778s
ffmpeg_1080p_qp15.log:video:275235kB audio:4756kB subtitle:0kB other …
ffmpeg_1080p_qp15.log:real 0m28.198s
ffmpeg_1080p_qp20.log:video:123861kB audio:4756kB subtitle:0kB other …
ffmpeg_1080p_qp20.log:real 0m25.051s
ffmpeg_1080p_qp25.log:video:56443kB audio:4756kB subtitle:0kB other …
ffmpeg_1080p_qp25.log:real 0m24.307s
ffmpeg_1080p_qp30.log:video:28922kB audio:4756kB subtitle:0kB other …
ffmpeg_1080p_qp30.log:real 0m24.123s
yano@haswell:~/qsv$ ll 20161215_0012_28_GRhd.ts ffmpeg_1080p_qp*.mp4
-rw-r--r-- 1 yano yano 281840952 Dec 15 00:14 20161215_0012_28_GRhd.ts
-rw-rw-r-- 1 yano yano 588511025 Jan 12 23:14 ffmpeg_1080p_qp10.mp4
-rw-rw-r-- 1 yano yano 286704102 Jan 12 23:14 ffmpeg_1080p_qp15.mp4
-rw-rw-r-- 1 yano yano 131696776 Jan 12 23:15 ffmpeg_1080p_qp20.mp4
-rw-rw-r-- 1 yano yano 62660787 Jan 12 23:15 ffmpeg_1080p_qp25.mp4
-rw-rw-r-- 1 yano yano 34478662 Jan 12 23:16 ffmpeg_1080p_qp30.mp4
yano@haswell:~/qsv$ for f in ffmpeg_1080p_qp*.mp4;do \
~/bin/ffmpeg -i $f;done 2>&1 | grep -e bitrate
Duration: 00:02:29.68, start: 0.000000, bitrate: 31453 kb/s
Duration: 00:02:29.68, start: 0.000000, bitrate: 15323 kb/s
Duration: 00:02:29.68, start: 0.000000, bitrate: 7038 kb/s
Duration: 00:02:29.68, start: 0.000000, bitrate: 3348 kb/s
Duration: 00:02:29.68, start: 0.000000, bitrate: 1842 kb/s
yano@haswell:~/qsv$
ちなみに、消費電力は32→50W程度。Ivy BridgeのXeon E3-1225 v2とはいといろ違うのでTVMW6@Windows 10の結果と比べるのは微妙だが、数値的には期待以上の結果。
gt110bで6分以上かかった720p@x264の"2580 kb/s"(47MB)にフィットさせてみたところ、
yano@haswell:~/qsv$ ll -h ffmpeg_720p_qp*.mp4qp=23で"2491 kb/s"(45MB)、処理時間19秒ほどとなった。fpsで230超えって強烈だな。
-rw-rw-r-- 1 yano yano 99M Jan 12 23:25 ffmpeg_720p_qp18.mp4
-rw-rw-r-- 1 yano yano 86M Jan 12 23:25 ffmpeg_720p_qp19.mp4
-rw-rw-r-- 1 yano yano 74M Jan 12 23:26 ffmpeg_720p_qp20.mp4
-rw-rw-r-- 1 yano yano 67M Jan 12 23:26 ffmpeg_720p_qp21.mp4
-rw-rw-r-- 1 yano yano 54M Jan 12 23:27 ffmpeg_720p_qp22.mp4
-rw-rw-r-- 1 yano yano 45M Jan 12 23:27 ffmpeg_720p_qp23.mp4
-rw-rw-r-- 1 yano yano 40M Jan 12 23:28 ffmpeg_720p_qp24.mp4
yano@haswell:~/qsv$ for f in ffmpeg_720p_qp*.mp4;do \
~/bin/ffmpeg -i $f;done 2>&1 | grep -e "bitrate" -e "ffmpeg_"
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ffmpeg_720p_qp18.mp4':
Duration: 00:02:29.68, start: 0.000000, bitrate: 5534 kb/s
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ffmpeg_720p_qp19.mp4':
Duration: 00:02:29.68, start: 0.000000, bitrate: 4804 kb/s
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ffmpeg_720p_qp20.mp4':
Duration: 00:02:29.68, start: 0.000000, bitrate: 4107 kb/s
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ffmpeg_720p_qp21.mp4':
Duration: 00:02:29.68, start: 0.000000, bitrate: 3717 kb/s
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ffmpeg_720p_qp22.mp4':
Duration: 00:02:29.68, start: 0.000000, bitrate: 2997 kb/s
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ffmpeg_720p_qp23.mp4':
Duration: 00:02:29.68, start: 0.000000, bitrate: 2491 kb/s
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ffmpeg_720p_qp24.mp4':
Duration: 00:02:29.68, start: 0.000000, bitrate: 2225 kb/s
yano@haswell:~/qsv$
【参照】
●Qiita http://qiita.com/
┗QSV 対応 Intel CPU で H.264 のハードウェアエンコード on Linux 2016年9月25日
●大ちゃんのいろいろ雑記 https://www.taruki.com/
┗ffmpegでIntelのGPUをVA-APIを使ってh264エンコードしたメモ 2016年10月11日
●Web Net Force http://webnetforce.net/
┣Ubuntuでtsからmp4へ変換する設定 (2016年版) 2016年12月19日
┗UbuntuでQSVを利用したエンコードでtsをmp4に爆速変換 2016年12月19日
●hirooka.pro https://hirooka.pro/
┣Linux で QSV を試すためだけに第 4 世代 Core を購入した件 2016年4月10日
┣Linux (CentOS 7.1) と FFmpeg 3.0.1 で QSV (Quick Sync Video) 2016年4月12日
┗Linux (CentOS 7.2 1511) と FFmpeg で QSV (Quick Sync Video) 2016年9月9日
●Kung Noi Blog http://www.goodnai.com/
┗LinuxでIntel QSVを使ったH.264ハードウェアエンコード(CentOS7+ffmpeg) 2015年11月24日
●rigayaの日記兼メモ帳 http://rigaya34589.blog135.fc2.com/
┗DebianにIntel Media SDK Serverをインストール 2015年11月3日
●犬アイコンのみっきー https://mzyy94.com/blog/
┣KVMでQSVするためIntel HD Graphicsパススルーするー 2014年12月12日
┣Intel QSVのH.264エンコードをLinuxで! 2015年1月30日
┗クリスマスなのでLinuxでQSVエンコードする 2015年12月21日
●www.nodoka.org http://www.nodoka.org/
┣録画サーバ構築 QSVエンコード Linux編 2016年5月27日
┗録画サーバ構築 QSVエンコード Skylake+Linux編 2016年10月27日
●FFmpeg https://ffmpeg.org/
┗CompilationGuide/Ubuntu
●Intel Develper Zone https://software.intel.com/en-us
┗Intel® Media Server Studio
●Wikipedia http://ja.wikipedia.org/wiki/
┣LGA1150
┣Haswellマイクロアーキテクチャ
┣Broadwellマイクロアーキテクチャ
┣LGA1151
┗Skylakeマイクロアーキテクチャ