FFmpeg延迟并混合音频流,同时保持整体音量恒定

时间:2020-10-05 03:46:05

标签: audio ffmpeg volume mixing

我有大约100个音频流,所有音频流都具有相同的介绍性音乐/声音,在某些情况下,介绍性延迟了几秒钟。 我想对齐并混合所有音频流,以使所有前奏在同一时间播放,并且输出始终保持几乎相同的音量。我事先知道如何每个流都需要延迟很多。

Like this in Audacity.每个音频流都与简介对齐,并且在简介之前的持续时间是任意的。 (虽然这不能解决音量问题。)

到目前为止,我所使用的是adelayamix。看起来像这样,但是有更多的音频流。

ffmpeg -i 00.oga \
       -i 01.oga \
       -i 02.oga \
       -i 03.oga -filter_complex \
"[0]adelay=delays=     123S:all=1[a0]; \
 [1]adelay=delays=    2718S:all=1[a1]; \
 [2]adelay=delays= 6283185S:all=1[a2]; \
 [3]adelay=delays=11235813S:all=1[a3]; \
 [a0][a1][a2][a3]amix=inputs=4" output.oga

在此示例中,第一个流延迟了123个样本,第二个流延迟了2718个样本,第三个流延迟了6283185个,第四个延迟了11235813个。

这有效,除了在输出开始时它非常安静。当向n流馈送数据时,amix使每个流的流量为其原始容量的1 / n,这在原则上是一件好事。在这种情况下,这并不是一件好事,因为在输出的开头,四个音频流中的三个是静音的(adelay fills delayed streams with silence),这意味着唯一可听见的流是其音频流的1/4 = 25%原始音量。当第二个流变为可听时,总音量为2/4,三个可听流为3/4,而所有四个流都为可听时,则为4/4 = 100%。

相反,我希望当唯一的声音流时,第一流的音量为100%,当有两个声音流时,第一流的音量为50%,等等。

是否有一种方法可以实现,当有n个音频流但m个非静音音频流时,每个音频流的音量为1 / m 1 / namix在流结束时执行此操作;如果一个流结束,则会在一段时间内将其他流的音量从1 / n更改为1 / n-1dropout_transitionhttps://ffmpeg.org/ffmpeg-filters.html#amix)。

我发现a similar question有人想要做这样的事情,但只有两个音频流。答案是手动拆分,修剪和更改音量。像我这样,如果有100个或更多的音频流,这将变得非常复杂。

即使没有FFmpeg,有没有简便的方法来实现这一目标?

0 个答案:

没有答案