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

如何用单条FFmpeg命令在不同时段叠加两个视频到主视频?

我来帮你搞定在主视频不同时段叠加两个不同视频的需求!先看你原来的命令,里面有个小问题——你写了两个独立的overlay滤镜,这样会导致逻辑冲突,咱们得把整个流程整合到一个连贯的滤镜链里才行。

实现主视频叠加双时段视频的完整方案

核心逻辑

要在不同时段叠加两个视频,关键是给每个叠加视频做三件事:调整时间轴对齐主视频的目标时段、按需求缩放尺寸、用enable参数精准控制它的显示时间段,然后把这些操作串联成一条滤镜链。

定制化命令示例

假设你需要的效果是:

  • 视频first.mp4:主视频第5秒开始显示,持续10秒(到第15秒结束),缩放到480×270,位置放在(400,400)
  • 视频second.mp4:主视频第20秒开始显示,持续8秒(到第28秒结束),缩放到320×180,位置放在(100,100)

对应的FFmpeg命令如下:

ffmpeg -i main.mp4 -i first.mp4 -i second.mp4 \
-filter_complex "
  # 处理第一个叠加视频:对齐主视频时间轴 + 缩放尺寸
  [1:v]setpts=PTS-STARTPTS+5/TB,scale=480:270[a];
  # 处理第二个叠加视频:对齐主视频时间轴 + 缩放尺寸
  [2:v]setpts=PTS-STARTPTS+20/TB,scale=320:180[b];
  # 第一步:把第一个视频叠加到主视频,仅在5-15秒生效
  [0:v][a]overlay=400:400:enable='between(t,5,15)':eof_action=pass[temp];
  # 第二步:把第二个视频叠加到中间结果,仅在20-28秒生效
  [temp][b]overlay=100:100:enable='between(t,20,28)':eof_action=pass[out]
" \
-map [out] -map 0:a \
-c:v libx264 -crf 18 -c:a copy

关键参数拆解

  • setpts=PTS-STARTPTS+X/TB:这里的X是主视频上开始叠加的时间,这个参数能让叠加视频和主视频的时间轴对齐,避免出现叠加视频提前/延后播放的问题。
  • enable='between(t,start,end)':精确控制叠加效果的生效时段,start是开始秒数,end是结束秒数,超出这个范围叠加视频就会消失。
  • eof_action=pass:当叠加视频播放完后,自动切换回主视频画面,不会因为叠加视频结束而中断输出。
  • scale=W:H:你可以把这里的尺寸换成自己需要的分辨率,比如想保持原比例可以用scale=480:-1(自动计算高度)。

对你原命令的修正说明

你原来的命令里把两个overlay滤镜分开写了,FFmpeg没办法识别它们的执行顺序,所以会出错。咱们现在把流程改成串联式:先处理第一个叠加视频并叠加到主视频得到中间结果,再把第二个叠加视频叠加到这个中间结果上,最终输出完整的视频。

内容的提问来源于stack exchange,提问作者Qandeel Abbassi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:19:05