【问题标题】:Cross-fade video to itself with FFmpeg for seamless looping使用 FFmpeg 交叉淡入淡出视频以实现无缝循环
【发布时间】:2020-11-19 15:26:21
【问题描述】:

我发现了一些关于两个图像或视频之间的交叉淡化的问题和答案,但是需要哪些 ffmpeg CLI 命令来淡化视频本身

想要的效果说明:

  • 从视频开头删除了一些帧(比如 1 秒)
  • 从视频的最后 1 秒开始,从开头删除的帧在结束帧上淡入淡出
  • 这会导致流畅的循环播放。

【问题讨论】:

    标签: ffmpeg


    【解决方案1】:

    使用我工作的时间来扩展@llogan 的答案:

    -filter_complex "[0]trim=end=1,setpts=PTS-STARTPTS[begin];[0]trim=start=1,setpts=PTS-STARTPTS[end];[end][begin]xfade=wipedown:duration=1:offset=2"

    在弄乱过滤器以弄清楚它们的实际作用之后,这几乎正是我所寻找的(将视频的结尾淡入其自己的开头以进行循环)。首先,here 是对 xfade 过滤器的更清晰的解释,它实际上非常棒,我很高兴知道它的存在。尝试使用一种更具戏剧性的淡入淡出来获得更清晰的过渡画面。

    稍微分解一下过滤图(时间戳反映了我正在循环播放的 4 秒视频):

    -filter_complex

    调用过滤器图

    "[0]trim=end=1,setpts=PTS-STARTPTS[begin];

    采用第一个输入 ([0]) 时,使用 trim 过滤器在视频末尾制作您想要淡入的部分。将此摘录的 end 设置为第二个 1(可以是任何内容,这会产生 1 秒的摘录)。然后使用setpts 过滤器设置时间戳(摘录?)从零开始。 [begin] 是第一个过滤器链输出的任意标签,但您可以将其称为 [thomas] 或其他名称。

    [0]trim=start=1,setpts=PTS-STARTPTS[end];

    现在使用trim 进行另一个输入,该输入实际上是整个视频,减去您最终将淡入的 1 秒。这让我有点不知所措,直到我意识到您将第一个块的结尾设置在主块开始的同一点。这个主块获得标签[end]

    [end][begin]xfade=fade:duration=1:offset=2"

    现在使用xfade 过滤器使用fade 模式(上面的链接中有所有其他示例)从[end] 溶解到[begin]。您将淡入淡出的持续时间设置为持续1 秒,并在2 秒标记处偏移淡入淡出的开始。请记住,这是一个 4 秒的视频,第一秒基本上被修剪并覆盖到最后,所以你现在有一个 3 秒的视频。您也可以轻松地离开从0 开始的[end] 块(OP 询问了此处描述的内容)。

    给它一个output.mov 路径,你就可以开始了。

    【讨论】:

      【解决方案2】:

      使用trimsetptsxfade 过滤器:

      ffmpeg -i input.mp4 -filter_complex "[0]trim=end=1,setpts=PTS-STARTPTS[begin];[0]trim=start=1,setpts=PTS-STARTPTS[end];[end][begin]xfade=fade:duration=0.5:offset=8.5" output.mp4
      

      【讨论】:

      • offset=8.5 在这里是有问题的,因为我一般不知道视频长度
      • 此外,即使我增加淡入淡出持续时间并将偏移量设置为更小的值,我也无法在生成的视频中观察到淡入淡出效果
      • @PhilLab 1.Use ffprobe to get duration value。 2. 显示您的命令和完整的日志。您可以edit您的问题包含此信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      • 2016-10-25
      • 2020-08-13
      • 1970-01-01
      • 2015-08-04
      相关资源
      最近更新 更多