You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下使用AMD VAAPI硬件加速FFmpeg时,实现先缩放后填充视频的命令报错求助

Linux下使用AMD VAAPI硬件加速FFmpeg时,实现先缩放后填充视频的命令报错求助

嗨,我来帮你捋清楚这个问题~你遇到的「无法在两个滤镜间转换格式」的错误,本质是VAAPI硬件加速滤镜和普通软件滤镜的帧格式不兼容导致的。你之前尝试调整滤镜顺序,但忽略了一个关键:VAAPI的scale_vaapi输出的是硬件内存里的帧,而普通的pad滤镜只能处理系统内存里的软件帧,直接串联就会触发格式不兼容的报错。

修正后的完整命令

rm a_*.mp4; for vids in *.mp4; do ffmpeg -hwaccel vaapi -hwaccel_output_format yuv420p -vaapi_device /dev/dri/renderD128 -i "$vids" -ss 0:00:00 -to 00:00:03 -vf "hwupload, scale_vaapi=w=1920:h=1080:format=nv12, hwdownload, format=nv12, pad=1080:1920:(ow-iw)/2:(oh-ih)/2:color=red, hwupload" -c:v hevc_vaapi -video_track_timescale 90000 -rc_mode CQP -global_quality 20 -an "a_${vids/.*}.mp4"; done;

关键调整说明

  1. 硬件帧与软件帧的转换:

    • 先用hwupload把输入的软件帧上传到VAAPI硬件上下文,才能用scale_vaapi做硬件加速缩放
    • 缩放完成后,用hwdownload把硬件帧下载回系统内存,再转成nv12格式,让pad滤镜能正常处理
    • 填充完成后,再用hwupload把软件帧转回硬件帧,这样后续的hevc_vaapi硬件编码才能正常工作
  2. 修复填充位置参数:
    你原来的pad参数ow/2:oh/2有逻辑问题——如果缩放后的视频尺寸比填充画布大(比如你这里缩放后是1920x1080,填充画布是1080x1920),直接用ow/2会导致视频位置超出画布。改成(ow-iw)/2:(oh-ih)/2可以自动计算居中偏移量,不管前后尺寸大小,都能让视频在填充画布里居中显示。

这样调整后,就能实现你想要的「先缩放、后填充」的逻辑,同时保持VAAPI硬件加速的效率~

备注:内容来源于stack exchange,提问作者Estatistics

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 11:43:05