编译支持Intel Quick Sync Video的ffmpeg运行卡顿,求技术协助
我在Arch Linux中编译了支持Intel Quick Sync Video(QSV)的ffmpeg,但执行转码命令时程序卡顿,CPU占用率急剧升高却无后续操作。我的处理器是Intel i7-8550U(8代Kaby Lake Refresh,4核8线程)。
尝试的QSV转码命令均出现相同问题:
- 命令1:
ffmpeg -debug -hwaccel qsv -qsv_device /dev/dri/renderD128 -c:v h264_qsv -i test_video.mp4 -c:v hevc_qsv output.mp4
- 命令2:
ffmpeg -loglevel debug -init_hw_device qsv=hw -filter_hw_device hw -hwaccel qsv -hwaccel_output_format qsv -i test_video.mp4 -vf 'format=qsv,hwupload=extra_hw_frames=64' -c:v hevc_qsv -f mp4 output.mp4
但使用VAAPI转码可正常运行:
ffmpeg -init_hw_device vaapi=intel:/dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi -hwaccel_device intel -filter_hw_device intel -i test_video.mp4 -c:v hevc_vaapi -f mp4 output.mp4
请问问题原因是什么?
1. ffmpeg编译时QSV依赖库不完整或版本不匹配
Arch上编译带QSV支持的ffmpeg,必须确保依赖的libmfx(Intel Media SDK)、libva、libva-driver-intel等库为最新且正确安装状态。如果编译时未正确检测到这些库,会导致QSV功能失效,转而回退到CPU软解码/编码,引发高CPU占用和卡顿。
- 检查编译参数:确认编译时添加了
--enable-libmfx、--enable-vaapi参数,且PKG_CONFIG_PATH包含libmfx的路径。 - 重装依赖后重新编译:执行
sudo pacman -S intel-media-driver libva libva-utils,然后重新编译ffmpeg。
2. QSV设备初始化路径错误
你的命令指定了/dev/dri/renderD128,但部分场景下QSV需要绑定到/dev/dri/cardX设备而非render节点。尝试修改设备路径测试:
ffmpeg -loglevel debug -init_hw_device qsv=hw:/dev/dri/card0 -filter_hw_device hw -hwaccel qsv -hwaccel_output_format qsv -i test_video.mp4 -c:v hevc_qsv output.mp4
3. QSV编码参数缺失或不兼容
i7-8550U的QSV对HEVC编码有特定参数要求,缺少preset或profile等参数可能导致参数协商死循环:
尝试添加基础编码参数:
ffmpeg -init_hw_device qsv=hw -hwaccel qsv -hwaccel_output_format qsv -i test_video.mp4 -c:v hevc_qsv -preset medium -profile main output.mp4
4. 设备权限不足
确保当前用户属于video组,否则无法正常访问DRI设备:
执行sudo usermod -aG video $USER,重新登录后再测试转码命令。
5. Intel Media SDK版本兼容问题
Arch默认的intel-media-driver是开源实现,部分旧版本对Kaby Lake Refresh的QSV支持存在bug。可以尝试升级到最新版本,或者通过AUR安装闭源的intel-media-sdk包进行测试。
内容的提问来源于stack exchange,提问作者Juliano B. Nequirito

