【问题标题】:Overlay video onto another video at multiple points in time在多个时间点将视频叠加到另一个视频上
【发布时间】:2018-04-06 19:21:14
【问题描述】:

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

例如,主视频为一分钟,第二个视频为 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

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

【问题讨论】:

    标签: video ffmpeg


    【解决方案1】:

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

    发布问题帮助我客观地思考它。我希望这个答案对未来的人们有所帮助。

    enable 是一个红鲱鱼,不要使用它。它确实用于模糊滤镜等。您需要做的只是从您想要的点开始覆盖使用 setpts 并在视频文件结束时使用 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 允许输出出去,而不是为其余的输出视频显示剪辑结束帧。

    【讨论】:

      猜你喜欢
      • 2016-05-18
      • 2019-05-30
      • 2015-03-31
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 2019-07-25
      • 2021-09-21
      相关资源
      最近更新 更多