在多个时间点将视频叠加到另一个视频上

时间:2018-04-06 08:24:53

标签: video ffmpeg

我有一个案例,我希望有一个背景视频,并使用第二个视频覆盖第一个视频,但在多个时间点。第二个视频更短。

因此,例如主视频是一分钟长,第二个视频是10秒。我希望在15秒时叠加第二个视频一次,然后在35秒再叠加一次,然后在55秒再次叠加(在主视频播放时终止)。

我能够使用叠加滤镜和选项之间成功叠加第二个视频,但它只适用于第一个叠加层。第二个叠加层似乎显示了视频的最后一帧或第一帧(??),但是我设置的时间段。我猜它需要以某种方式重绕并播放。

例如:

ffmpeg  -i background.mp4 -i overlay.mov -filter_complex "[0][1]overlay=0:0:enable='between(t,0,2)'[out];[out][1]overlay=-200:200:enable='between(t,4,8)'[out]" -map "[out]" -t 00:00:10 -y output.mp4

我也尝试将叠加层指定为输入两次,例如:

ffmpeg  -i background.mp4 -i overlay.mov -i overlay.mov -filter_complex "[0][1]overlay=0:0:enable='between(t,0,2)'[out];[out][2]overlay=-200:200:enable='between(t,4,8)'[out]" -map "[out]" -t 00:00:10 -y output.mp4

同样的事情发生了。

我确信答案很简单,可能与我如何使用输入有关,但我无法理解如何让叠加视频在原始时间的不同时间播放两次

我还尝试使用setpts过滤器来回放叠加层,但结果再次完全相同。

例如:

ffmpeg  -i background.mp4 -i overlay.mov -filter_complex "[0][1]overlay=0:0:enable='between(t,0,2)'[out];[1]setpts=PTS-STARTPTS,[out]overlay=-200:200:enable='between(t,4,8)'[out]" -map "[out]" -t 00:00:10 -y output.mp4

有很多类似的问题涉及覆盖多个视频,但我找不到任何关于在多个时间点重复使用同一视频的内容。

1 个答案:

答案 0 :(得分:0)

我将回答我自己的问题,因为经常会发生这种情况。

发布问题有助于我客观地思考。我希望这个答案可以帮助将来的人们。

启用是红鲱鱼,不要使用它。它实际上用于模糊滤镜等。您需要做的只是从您想要的点开始使用设置,并在视频文件结束时使用eof_action结束。

示例:

ffmpeg  -i background.mp4 -i overlay.mov -filter_complex "[1]setpts=PTS+2/TB[ts],[0][ts]overlay=0:0:eof_action=pass[out];[1]setpts=PTS+4/TB[b],[out][b]overlay=-200:200:eof_action=pass[out]" -map "[out]" -t 00:00:10 -y output.mp4

在此示例中, PTS 是输出剪辑的开头,+ 2表示开始2秒,+ 4表示4秒。 eof_action = pass 允许输出转出而不是显示输出视频其余部分的剪辑结束帧。