使用 FFmpeg 将视频淡入淡出到自身以实现无缝循环

Phi*_*Lab 1 ffmpeg

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

期望效果说明:

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

小智 5

使用我正在工作的时间来扩展一下 @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"

在弄乱过滤器以弄清楚它们实际上做了什么之后,这几乎正是我所寻找的(将视频的结尾淡入其自己的循环开头)。首先,这里有一个对 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模式(上面的链接中有所有其他示例)将 from 溶解[end][begin]。您将淡入淡出的持续时间设置为最后1一秒,并将淡入淡出的起点偏移到2第二个标记处。请记住,这是一个 4 秒的视频,只是将第一秒基本修剪并覆盖到最后,所以您现在有一个 3 秒的视频。您也可以轻松地将[end]块从 at 开始0(OP 要求提供此处描述的内容)。

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