FFmpeg滚动overlay配置:如何让滚动结束后图片保留至视频末尾
ffmpeg向上滚动叠加图片停滞后固定保留方案
原有命令失效的原因是enable='between(t,0,9)'参数会让overlay滤镜在9秒后直接停止运行,叠加的图片自然不会继续显示。额外叠加一层静态图片的方案虽然能实现效果,但会增加不必要的滤镜计算和资源占用,更简洁的实现方式是直接修改overlay的y轴位置表达式,让滤镜全程运行,9秒后自动固定y轴位置即可,不需要重复叠加图片。
优化后的命令如下:
ffmpeg -i input.mp4 -i image.png -filter_complex "[0][1]overlay=x=0:y='if(lte(t,9),H-2*n,H-2*9*fps)':eval=frame[OUT]" -map [OUT] out.mp4
参数说明:
- 移除了原有的
enable时间限制,让overlay滤镜在整个视频周期内生效,图片不会中途消失 - y轴位置通过条件表达式控制:
- 视频播放时间在9秒以内时,沿用原有逐帧上移2像素的逻辑
H-2*n - 播放时间超过9秒后,y轴直接固定为9秒时的最终停留位置
H-2*9*fps,其中fps是ffmpeg自动读取的输入视频帧率,不需要手动修改
- 视频播放时间在9秒以内时,沿用原有逐帧上移2像素的逻辑
- 新增
eval=frame参数,确保y轴表达式逐帧重新计算,避免取值异常
如果你的视频是可变帧率,担心帧计数计算不准,可以把滚动逻辑改成按时间计算移动速度,比如要保持和原逻辑一致的移动速度(以30帧视频为例,每帧2像素即每秒移动60像素),可以把y表达式替换为y='if(lte(t,9),H-60*t,H-60*9)',计算逻辑会更稳定,不受帧率波动影响。
内容的提问来源于stack exchange,提问作者Sark
相关产品推荐
相关产品推荐

