如何使用复杂滤镜在ffmpeg中的场景之间交叉淡入淡出?

时间:2014-03-09 23:00:06

标签: ffmpeg

我有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)

我看到有一个过滤器:overlay,alphamerge和color,但目前还不清楚这是怎么做到的。

通常,在ffmpeg中使用电影文件片段似乎很难。有没有办法说我正在拍摄相同输入文件的各个部分并将它们放在一起而不将它们首先作为单独的电影渲染?

1 个答案:

答案 0 :(得分:6)

我让它像这样工作:

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

您必须增加音量以补偿amix降低音量。

尽管如此,这似乎仍然比它应该更复杂。此外,这是否需要对视频进行两次解码并渲染一堆永远不会出现的帧?