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

如何在FFmpeg中实现不同时段的两次Overlay滤镜效果?

解决ffmpeg两次Overlay仅第一次生效的问题

你的问题出在滤镜链的结构上:当前命令中两次overlay都是直接基于原始视频流[0]并行处理,ffmpeg默认只会输出最后一条滤镜链的结果,导致第一次叠加的效果无法传递到第二次处理中,最终只有第二次滤镜链的输出生效(但它在0-10秒无叠加动作,所以看起来只有第一次生效)。

修正方案:链式串联滤镜处理

把第一次overlay的输出作为第二次overlay的输入,让两次叠加效果依次作用在视频上。同时可以复用GIF的处理结果,避免重复执行colorchannelmixer和scale操作,提升处理效率:

ffmpeg -t 50 -y -i film.mp4 -stream_loop -1 -i gif.gif -filter_complex "
[1]colorchannelmixer=aa=1,scale=iw*2:-1[gif_scaled];
[0][gif_scaled]overlay=x='200':y='300':shortest=1:enable='between(t,0,10)'[temp];
[temp][gif_scaled]overlay=x='200':y='300':shortest=1:enable='between(t,15,20)'
" -acodec copy output_task_3.mp4

关键说明

  • 先统一处理GIF流:将[1](GIF输入)处理为带透明度、缩放后的流[gif_scaled],后续两次overlay直接复用该流,减少重复计算。
  • 第一次overlay的输出标记为[temp],作为第二次overlay的输入源,确保第二次叠加是在已完成第一次叠加的视频基础上进行(时段不重叠时,对应时段显示GIF即可)。
  • 如果两次叠加需要不同位置,仅修改第二次overlay的x和y参数即可。

更简化的写法(时段不重叠场景)

如果两次叠加的是同一个GIF且仅时段不同,还可以合并成一个overlay命令,用enable表达式同时指定多个生效时段:

ffmpeg -t 50 -y -i film.mp4 -stream_loop -1 -i gif.gif -filter_complex "
[1]colorchannelmixer=aa=1,scale=iw*2:-1[gif_scaled];
[0][gif_scaled]overlay=x='200':y='300':shortest=1:enable='between(t,0,10)+between(t,15,20)'
" -acodec copy output_task_3.mp4

这种写法仅执行一次overlay操作,通过enable控制GIF在指定时段显示,效率更高。

内容的提问来源于stack exchange,提问作者Мохамед Русланович

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:55:36