FFmpeg QSV硬件加速在三台PC正常运行,第四台Windows 7设备报错:Error querying encoder params: unsupported (-3)
我来帮你拆解下这个问题,结合你的描述和日志细节,几个可能的原因和解决方向供你参考:
早期Sandy Bridge QSV的参数限制
你的i3-2120属于Sandy Bridge架构,虽然Intel官网标注支持QSV,但这个初代QSV的能力很有限——它只支持H.264的Baseline/Main Profile,而且对像素格式的兼容性也窄。你输入的视频是High 4:2:2 Profile,转码时的格式转换可能触发了编码器不支持的参数。可以试试:- 强制把输入视频转成兼容的像素格式,比如加滤镜
-vf format=yuv420p; - 给编码器指定明确的Profile,比如
-profile:v main。
- 强制把输入视频转成兼容的像素格式,比如加滤镜
驱动版本的兼容性问题
Win7下Sandy Bridge的显卡驱动早就停止更新了,所谓的“最新驱动”可能反而对老硬件的QSV支持做了裁剪。建议你降级到更旧的、经过验证的Intel HD Graphics驱动版本(比如15.28.x系列,这是Sandy Bridge比较稳定的驱动分支),老驱动对初代QSV的兼容性往往更好。FFmpeg版本与老硬件的适配问题
虽然你从工作机器复制了FFmpeg,但不同系统的依赖库不一样。你用的FFmpeg可能是基于较新的Intel Media SDK编译的,而Sandy Bridge只支持非常老旧的Media SDK版本(比如2013版及更早),版本不匹配就会触发参数查询失败。可以试试找一个专门针对Win7和Sandy Bridge编译的FFmpeg版本,或者自己编译时指定兼容老Media SDK的参数。命令行参数的兼容性调整
你的命令里用了-preset veryslow,但QSV的preset和x264的不是一回事,初代QSV根本没有veryslow这个选项,这很可能是触发错误的直接原因!建议你把preset改成slow或者medium,甚至直接去掉这个参数试试。另外,也可以把CQP模式(-q:v 28)换成固定比特率模式(比如-b:v 2M),看看能不能绕开参数查询的问题。同时可以简化硬件加速的初始化命令,把复杂的
-init_hw_device参数换成更基础的-hwaccel qsv,试试这个简化版命令:ffmpeg -hide_banner -err_detect ignore_err -loglevel verbose ^ -stats -benchmark ^ -hwaccel qsv -hwaccel_output_format qsv ^ -ss "00:24:30.544" -to "00:25:33.393" ^ -i "InputFile.avi" ^ -strict normal -c:a aac -q:a 1.5 ^ -c:v h264_qsv -q:v 28 -preset slow ^ -movflags +faststart ^ "OutputFile.mp4" > test1.log 2>&1硬件表面的输入兼容性
日志里显示Encoder: input is system memory surface,说明转码时输入帧是在系统内存里,而不是QSV硬件表面,这种跨内存空间的操作可能触发老编码器的参数限制。确保-hwaccel qsv正确生效,让解码后的帧直接留在QSV硬件表面上,减少格式转换的环节。
备注:内容来源于stack exchange,提问作者Bart Lederman

