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

如何使用FFmpeg按固定间隔在主视频中添加绿幕视频叠加层

如何使用FFmpeg按固定间隔在主视频中添加绿幕视频叠加层

我来帮你搞定这个需求!你已经有了绿幕抠图叠加的基础命令,现在只需要给叠加的时机加上时间控制就可以了,分两种情况给你详细说:

一、让绿幕视频在指定时间单次出现

比如你想让绿幕视频在第5分钟(也就是300秒)开始显示,假设你的green.mp4时长是5秒,那可以在原命令的基础上,给绿幕视频加上时间轴调整的滤镜,具体命令如下:

ffmpeg -i input.mp4 -i green.mp4 -filter_complex \
'[1:v]colorkey=0x00ff00:0.4:0.2,trim=start=0:end=5,setpts=PTS-STARTPTS+300/TB[ckout]; \
[0:v][ckout]overlay[out]' \
-map '[out]' -c:v libx264 -pix_fmt yuv420p res.mp4

关键参数解释:

  • trim=start=0:end=5:截取绿幕视频的前5秒(如果你的绿幕视频本身就是目标显示时长,这个可以省略,但加上能避免意外)
  • setpts=PTS-STARTPTS+300/TB:把这段截取的绿幕视频的时间轴偏移到300秒的位置,这样它就会精准在主视频的第5分钟开始显示

二、让绿幕视频按固定间隔重复出现

比如你想每隔5分钟(300秒)显示一次,每次显示5秒,持续到主视频结束,这里有两种实现方式:

方式1:手动指定所有显示时间区间

适合你想自定义特定时间点的场景,命令如下:

ffmpeg -i input.mp4 -i green.mp4 -filter_complex \
'[1:v]colorkey=0x00ff00:0.4:0.2,trim=start=0:end=5,loop=loop=-1:size=1:start=0,setpts=N/(FRAME_RATE*TB)[loop_ck]; \
[0:v][loop_ck]overlay=enable='gte(t\,300)*lte(t\,305)+gte(t\,600)*lte(t\,605)+gte(t\,900)*lte(t\,905)'[out]' \
-map '[out]' -c:v libx264 -pix_fmt yuv420p res.mp4

关键参数解释:

  • loop=loop=-1:size=1:start=0:把截取后的5秒绿幕视频设置为无限循环,确保每个时间点都能调用到
  • enable选项的表达式:gte(t\,300)*lte(t\,305)表示当主视频时间t大于等于300秒且小于等于305秒时显示绿幕,后面的+gte(t\,600)*lte(t\,605)对应第10分钟的显示区间,你可以根据需求继续添加更多时间段

方式2:自动计算间隔(更省心)

如果是严格的固定间隔,比如每隔300秒就显示5秒,不用手动写每个时间段,用数学表达式自动计算即可:

ffmpeg -i input.mp4 -i green.mp4 -filter_complex \
'[1:v]colorkey=0x00ff00:0.4:0.2,trim=start=0:end=5,loop=loop=-1:size=1:start=0,setpts=N/(FRAME_RATE*TB)[loop_ck]; \
[0:v][loop_ck]overlay=enable='mod(t,300)<5'[out]' \
-map '[out]' -c:v libx264 -pix_fmt yuv420p res.mp4

关键参数解释:

  • mod(t,300)<5:这个表达式的意思是,当主视频时间t除以300的余数小于5秒时,就显示绿幕视频,自动实现每隔5分钟显示一次、每次5秒的效果,非常省心!

注意:如果你的绿幕视频实际时长不是5秒,记得把命令里的end=5和mod(t,300)<5中的数字改成你的绿幕视频实际时长哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 11:33:04