FFmpeg添加淡入淡出效果的Overlay图片无法显示求助
修复FFmpeg Overlay淡入淡出不显示的问题
我帮你排查了命令里的核心问题,主要是淡出效果的时间和overlay的启用范围不匹配,导致图片还没正常渲染就被禁用了。下面是具体分析和修正方案:
问题点拆解
你的测试命令里存在一个时间线冲突:
- 淡出效果设置为
fade=out:st=5:d=1,意味着图片从第5秒开始淡出,持续1秒到第6秒 - 但overlay的
enable='between(t,0,5)'限制了图片仅在0-5秒显示,第5秒一到就立刻关闭overlay,淡出效果完全没有执行的机会,甚至可能让FFmpeg无法正确初始化图片渲染
修正后的完整命令
ffmpeg -i output.mp4 -i 1.png -filter_complex "[1:v]format=rgba,scale=300:300,fade=in:st=0:d=1:alpha=1,fade=out:st=4:d=1[im];[0][im]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2:enable='between(t,0,5)'" -pix_fmt yuv420p -c:v libx264 output_with_overlay.mp4
关键调整说明
- 对齐淡出时间与overlay范围:把
fade=out:st=5改成st=4,让淡出从第4秒开始,持续1秒到第5秒,刚好和overlay的between(t,0,5)结束时间匹配,保证淡出效果完整执行 - alpha通道处理保留:
format=rgba为图片添加透明通道,fade的alpha=1参数正确作用于透明度,这部分无需修改 - 补全编码器参数:补充
-c:v libx264指定H.264编码器,保证输出视频的兼容性和质量
额外优化方案(完整淡入淡出周期)
如果想要图片完整走完「0-1秒淡入→1-5秒正常显示→5-6秒淡出」的流程,可以把overlay的启用范围延长到第6秒,命令如下:
ffmpeg -i output.mp4 -i 1.png -filter_complex "[1:v]format=rgba,scale=300:300,fade=in:st=0:d=1:alpha=1,fade=out:st=5:d=1[im];[0][im]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2:enable='between(t,0,6)'" -pix_fmt yuv420p -c:v libx264 output_with_overlay.mp4
这样图片的淡入淡出效果会完整呈现,不会出现中途消失的问题。
内容的提问来源于stack exchange,提问作者Pier Giorgio Misley
相关产品推荐
相关产品推荐

