h264_qsv – Selected ratecontrol mode is not supported by the QSV runtime. Choose a different mode.

スポンサーリンク

最近の ffmpeg-snapshot で h264_qsv をやると、

[h264_qsv @ 0x37242a0] Selected ratecontrol mode is not supported by the QSV runtime. Choose a different mode.

のようにエラーとなってしまうようになりました。

環境は下記の通り。

  • Core i3-6100 (Skylake)
  • CentOS 7.2 (1511)
  • Intel Media Server Studio 2017 for Linux (Community Edition)

FFmpeg のバージョン表示は下記の通り。

ffmpeg version N-82988-g28307ef Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-4)
configuration: --enable-libmfx
libavutil 55. 43.100 / 55. 43.100
libavcodec 57. 70.101 / 57. 70.101
libavformat 57. 61.100 / 57. 61.100
libavdevice 57. 2.100 / 57. 2.100
libavfilter 6. 68.100 / 6. 68.100
libswscale 4. 3.101 / 4. 3.101
libswresample 2. 4.100 / 2. 4.100

例えば、下記のようなコマンドを実行すると、

ffmpeg -i sintel_trailer-1080p.mp4 -acodec aac -ab 32k -ar 44100 -ac 2 -s 400x224 -vcodec h264_qsv -g 60 -profile:v high -level 4.2 -b:v 110k -threads 1 -f segment -segment_format mpegts -segment_time 2 chukasa%d.ts

下記のようなエラーに。

[h264_qsv @ 0x37242a0] Selected ratecontrol mode is not supported by the QSV runtime. Choose a different mode.
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (h264_qsv))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height

回避策としては、下記のようにオプションとして -look_ahead 0 を付加すればいいようです。

ffmpeg -i sintel_trailer-1080p.mp4 -acodec aac -ab 32k -ar 44100 -ac 2 -s 400x224 -vcodec h264_qsv -g 60 -profile:v high -level 4.2 -b:v 110k -threads 1 -f segment -segment_format mpegts -segment_time 2 -look_ahead 0 chukasa%d.ts

しかし、このオプションはデフォルトで 1 であり、古い CPU の場合に 0 にするとのことで、Skylake で 0 にしないといけないのは FFmpeg 本体のバグのようです。

というわけでバグが修正されるまでは、バグが混入する前の FFmpeg を使用するか、最新の snapshot の FFmpeg で -look_ahead 0 とするか、どちらかが必要のようです。

なお、snapshot ではなく、バージョニングされて提供されている 3.x 系の FFmpeg で確認してみましたが、問題はありませんでした。この記事を書いている時点での最新のバージョニングは 3.2.2 です。

ffmpeg version 3.2.2 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-4)
configuration: --enable-libmfx
libavutil 55. 34.100 / 55. 34.100
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.100 / 57. 56.100
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100

ffmpeg version 3.1.6 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-4)
configuration: --enable-libmfx
libavutil 55. 28.100 / 55. 28.100
libavcodec 57. 48.101 / 57. 48.101
libavformat 57. 41.100 / 57. 41.100
libavdevice 57. 0.101 / 57. 0.101
libavfilter 6. 47.100 / 6. 47.100
libswscale 4. 1.100 / 4. 1.100
libswresample 2. 1.100 / 2. 1.100

ffmpeg version 3.0.5 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-4)
configuration: --enable-libmfx
libavutil 55. 17.103 / 55. 17.103
libavcodec 57. 24.102 / 57. 24.102
libavformat 57. 25.100 / 57. 25.100
libavdevice 57. 0.101 / 57. 0.101
libavfilter 6. 31.100 / 6. 31.100
libswscale 4. 0.100 / 4. 0.100
libswresample 2. 0.101 / 2. 0.101