FFmpeg启用QSV硬件加速并使用av1_qsv编码时添加缩放滤镜报错的问题咨询
FFmpeg启用QSV硬件加速并使用av1_qsv编码时添加缩放滤镜报错的问题咨询
问题分析
这个报错的核心原因很明确:当你启用-hwaccel qsv并设置-hwaccel_output_format qsv后,FFmpeg会把解码后的视频帧保留在QSV硬件显存中(是QSV专用的硬件帧格式),而普通的scale滤镜只能处理CPU端的软件帧,没法直接兼容硬件帧格式,所以才会出现格式转换失败的报错。
解决方案
你需要改用QSV硬件加速专属的缩放滤镜scale_qsv,它专门用来处理QSV硬件帧,能在硬件流水线内完成缩放操作,既解决了格式兼容问题,还能维持硬件加速的高效性。
修改后的命令如下:
ffmpeg.exe -stats -threads 28 -hwaccel qsv -hwaccel_output_format qsv -extra_hw_frames 6 -i "<<InputFileName>>" -f mp4 -movflags +faststart -t 3600 -c:a aac -b:a 96k -af "aformat=sample_fmts=s16p:sample_rates=44100,aresample=dither_method=triangular_hp:resampler=soxr" -vf "scale_qsv=w=1200:h=-1,setsar=1" -c:v av1_qsv -global_quality 36 "<<OutputFileName>>"
额外注意事项
- 参数写法差异:
scale_qsv的参数格式是scale_qsv=w=xxx:h=xxx,和普通scale的scale=xxx:-1写法略有区别,但h=-1同样支持按比例自动计算高度,不用额外调整比例逻辑。 - FFmpeg版本验证:确保你用的是较新版本的FFmpeg(建议4.4及以上),旧版本对QSV滤镜的支持不完善,尤其是AV1 QSV相关功能可能存在bug。
- 硬件与驱动检查:确认你的Intel显卡支持AV1 QSV编码(比如第12代及以上酷睿处理器的核显),并且安装了最新的Intel显卡驱动,旧驱动很可能会引发兼容性问题。
- 关于之前的成功案例:你之前能成功大概率是当时没启用
-hwaccel_output_format qsv,FFmpeg自动把硬件帧导出到CPU处理了;或者当时的FFmpeg版本/驱动版本对普通scale滤镜兼容硬件帧有特殊处理,后续环境更新后行为发生了变化。
备注:内容来源于stack exchange,提问作者Kodfk Dleepd




