81

我可以使用 ffmpeg 将两个音频 mp3 文件叠加/缩混到一个 mp3 输出文件中吗?

4

7 回答 7

144

立体声 + 立体声 → 立体声

正常缩混

正常缩混

使用amix过滤器:

ffmpeg -i input0.mp3 -i input1.mp3 -filter_complex amix=inputs=2:duration=longest output.mp3

amerge过滤器:

ffmpeg -i input0.mp3 -i input1.mp3 -filter_complex amerge=inputs=2 -ac 2 output.mp3

将每个输入缩混到特定的输出通道中

将每个输入缩混到特定的输出通道中

使用amergepan过滤器:

ffmpeg -i input0.mp3 -i input1.mp3 -filter_complex "amerge=inputs=2,pan=stereo|c0<c0+c1|c1<c2+c3" output.mp3

单声道 + 单声道 → 立体声

单声道 + 单声道 → 立体声

使用连接过滤器:

ffmpeg -i input0.mp3 -i input1.mp3 -filter_complex join=inputs=2:channel_layout=stereo output.mp3

合并

ffmpeg -i input0.mp3 -i input1.mp3 -filter_complex amerge=inputs=2 output.mp3

单声道 + 单声道 → 单声道

单声道 + 单声道 → 单声道

使用amix过滤器:

ffmpeg -i input0.mp3 -i input1.mp3 -filter_complex amix=inputs=2:duration=longest output.mp3

更多信息和示例

请参阅FFmpeg Wiki:音频通道

于 2013-01-25T18:52:16.050 回答
22

看一下这个:

ffmpeg -y -i ad_sound/whistle.mp3 -i ad_sound/4s.wav -filter_complex "[0:0][1:0] amix=inputs=2:duration=longest" -c:a libmp3lame ad_sound/outputnow.mp3

我认为这会有所帮助。

于 2015-02-23T05:44:18.353 回答
18

amix过滤器有助于将多个音频输入混合到一个输出中。

如果您运行以下命令:

ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT

该命令会将 3 个输入音频流(我在下面的示例中使用了两个 mp3 文件)混合到一个输出中,其持续时间与第一个输入相同,并且 dropout 转换时间为 3 秒。

amix过滤器接受以下参数:

  • 输入:输入的数量。如果未指定,则默认为 2。

  • 持续时间:如何确定流的结束。

    • 最长:最长输入的持续时间。(默认)

    • shortest:最短输入的持续时间。

    • first:第一次输入的持续时间。

  • dropout_transition:输入流结束时卷重新归一化的转换时间(以秒为单位)。默认值为 2 秒。

例如,我在 Ubuntu 中运行以下命令:FFMPEG 版本:3.2.1-1 UBUNTU 16.04.1

ffmpeg -i background.mp3 -i bSound.mp3 -filter_complex amix=inputs=2:duration=first:dropout_transition=0 -codec:a libmp3lame -q:a 0 OUTPUT.mp3

-codec:a libmp3lame -q:a 0用于设置可变比特率。请记住,如果有必要,您需要安装 libmp3lame 库。但是,即使没有该-codec:a libmp3lame -q:a 0部件,它也可以工作。

参考:https ://ffmpeg.org/ffmpeg-filters.html#amix

于 2017-02-05T20:29:09.973 回答
15

对于合并具有不同音量和不同持续时间的两个音频文件,以下命令将起作用:

ffmpeg -y -i audio1.mp3 -i audio2.mp3 -filter_complex "[0:0]volume=0.09[a];[1:0]volume=1.8[b];[a][b]amix=inputs=2:duration=longest" -c:a libmp3lame output.mp3

此处持续时间可以更改为最长或最短,您也可以根据需要更改音量级别。

如果您想为某些声音添加背景音乐,请使用以下命令,因为在间隙中,音乐将自动变响

ffmpeg -i bgmusic.mp3 -i audio.mp3 -filter_complex "[1:a]asplit=2[sc][mix];[0:a][sc]sidechaincompress=threshold=0.003:ratio=20[bg]; [bg][mix]amerge[final]" -map [final] final.mp3

在这个阈值中,它的值将决定音频应该响多少,阈值越小,音频就越多。比率给出了其他音频应该被压缩多少,比率越大,压缩越多

于 2019-07-16T09:51:37.357 回答
2

如果它们的长度不同,您可以使用apad为最短的一个添加静音

于 2013-10-08T10:59:33.507 回答
1

与重击

set 'amovie=a.mp3 [gg]; amovie=b.mp3 [hh]; [gg][hh] amerge'
ffmpeg -f lavfi -i "$1" -q 0 c.mp3

例子

于 2013-01-24T18:06:46.853 回答
0

您可以使用以下命令参数:

   // Command is here

let commandValue = "-y -i \(recordedAudioPath) -i \(backgroundAudio) -filter_complex [\(0):a][\(1):a]amerge=inputs=\(2)[a] -map [a] -ac \(2) -shortest -preset ultrafast \(outputPath)"
  MobileFFmpeg.execute(commandValue)
于 2020-01-07T08:06:42.860 回答