【问题标题】:How do I crossfade between scenes in ffmpeg using a complex filter?如何使用复杂过滤器在 ffmpeg 中的场景之间交叉淡入淡出?
【发布时间】:2014-03-16 05:22:23
【问题描述】:

我有 ffmpeg 2.1.4 和一个输入电影 in.mkv。 in.mkv 中实际上有 2 个不同的场景。我希望能够在场景之间交叉淡入淡出,最好只使用复杂的过滤器而不是外部程序。本质上,我希望有一些类似于叠加的东西,但 alpha 在特定时间会发生变化。

考虑一下 in.mkv 是否看起来像这样:

00:00 - 00:05 scene 1
00:05 - 00:10 junk
00:10 - 00:15 scene 2

所以,我想要一个输出:

00:00 - 00:04 scene 1 (0-4)
00:04 - 00:05 alpha fading between scene 1 (4-5) and 2 (10-11)
00:05 - 00:09 scene 2 (11-15)

我看到有一个过滤器:覆盖、alphamerge 和颜色,但不清楚具体如何做到这一点。

一般来说,在 ffmpeg 中处理电影文件的片段似乎很困难。有没有办法说我将同一输入文件的各个部分放在一起,而不是先将它们渲染为单独的电影?

【问题讨论】:

    标签: ffmpeg


    【解决方案1】:

    我让它像这样工作:

    ffmpeg -f lavfi -i testsrc -ss 6 -f lavfi -i testsrc -filter_complex "
      color=white,fade=out:st=4:d=1[alpha];
      [0:v][alpha]alphamerge[am];
      [1:v][am]overlay=0:0
    " -t 9 b.mkv
    

    所以,我有相同的电影作为 2 个不同的输入,但寻求时间差,并使用白色淡出来生成 Alpha 通道,然后将其与叠加混合以交叉淡入淡出。 (我怀疑也可以使用geq。)

    还有一个额外的并发症。如果您在进行交叉淡入淡出之前进行搜索,则必须确保在一帧之后立即进行搜索(因此指定该帧应该何时发生 + 1 ms),否则您可能会将目标四舍五入到在源之前有一个帧,从而导致非常明显在渐变开始时闪烁。

    另外,如果还有音频流,可以通过添加到过滤器来交叉淡入淡出:

    [0:a]afade=out:d=2[a1];
    [1:a]afade=in:d=2[a2];
    [a1][a2]amix=inputs=2,volume=2
    

    你必须提高音量来补偿音量降低的混合。

    不过,这似乎仍然比应有的复杂。另外,这是否需要对视频进行两次解码并渲染一堆永远不会看到的帧?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      相关资源
      最近更新 更多