如何使用ffmpeg覆盖/缩混两个音频文件

时间:2013-01-24 10:02:36

标签: audio ffmpeg mp3 cmd

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

7 个答案:

答案 0 :(得分:49)

立体声+立体声→立体声

正常缩混

Normal downmix

使用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

将每个输入缩混为特定输出通道

Downmix each input into specific output channel

使用amergepan过滤器:

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

mono + mono→stereo

mono + mono → stereo

使用join过滤器:

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

amerge

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

mono + mono→mono

使用amix过滤器:

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

有关详细信息,请参阅FFmpeg Wiki: Audio Channels

答案 1 :(得分:18)

检查出来:

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

我认为这会有所帮助。

答案 2 :(得分:13)

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

如果您运行以下命令:

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

此命令将3个输入音频流(我使用两个mp3文件,在下面的示例中)混合为单个输出,其持续时间与第一个输入相同,并且辍学过渡时间为3秒。

amix过滤器接受以下参数:

  • <强>输入: 输入数量。如果未指定,则默认为2.

  • <强>持续时间: 如何确定流末尾。

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

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

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

  • <强> 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

答案 3 :(得分:2)

如果它们的长度不同,您可以使用apad向最短的声音添加无声声音

答案 4 :(得分:1)

使用Bash

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

Example

答案 5 :(得分:0)

要合并两个具有不同音量和不同持续时间的音频文件,请执行以下命令:

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

在此阈值中,某值的大小将决定音频应达到的音量,阈值越小,音频将越多。比率给出了应压缩的其他音频量,比率越大,压缩量就越大

答案 6 :(得分: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)