ffmpeg使用amix混合多个音频时音量变小或音量不一致问题

文章讲述了在使用FFmpeg的amix功能混合音频时遇到音量变化问题,分析了原因并提供了三种解决方案:手动调整音量、新版本FFmpeg的normalize参数和dropout_transition参数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

最近工作中遇到一个音频混合后,导出文件播放音量不一致问题。

问题描述

给定若干个音频,时长不一:
在这里插入图片描述
当把它们混合在一起时,发现刚开始音量很小,而尾部部分音量又很大(等于原音频)。

ffmpeg -i 24281_1.mp3 -i 24281_2.mp3 -i 24281_3.mp3 -i 24281_4.mp3 \
	-i 24281_5.mp3 -i 24281_6.mp3 -i 24281_7.mp3 \
	-filter_complex "[0:a][1:a][2:a][3:a][4:a][5:a][6:a]amix=inputs=7:duration=longest[Audio]"  \
	-map "[Audio]" -acodec mp3 -y amix.mp3

结果amix.mp3的音量是一开始最小,逐渐变大,直到最后一段变成和源文件一样大。

原因分析

尝试了多种方法无法解决。最终发现stackover关于该问题有一个讨论:

Python是一种高级编程语言,而FFmpeg是一个开源的音视频处理工具。在Python中,可以使用FFmpeg库来进行音频混合操作,其中amixFFmpeg的一个音频混合滤镜。 amix滤镜可以将多个音频混合成一个输出音频流。它可以通过设置参数来控制混合的方式,例如混合音量比例、混合间范围等。 在Python中使用FFmpegamix滤镜,可以通过调用subprocess模块来执行FFmpeg命令。首先需要安装FFmpeg,并确保其可执行文件在系统的环境变量中。 以下是一个使用Python调用FFmpegamix滤镜进行音频混合的示例代码: ```python import subprocess def audio_mix(input_files, output_file, duration=None, volume=None): # 构建FFmpeg命令 cmd = ['ffmpeg'] for file in input_files: cmd.extend(['-i', file]) cmd.extend(['-filter_complex', 'amix=inputs={}:duration={}:dropout_transition=2'.format(len(input_files), duration)]) if volume: cmd.extend(['-vol', str(volume)]) cmd.append(output_file) # 执行FFmpeg命令 subprocess.run(cmd) # 示例调用 input_files = ['audio1.mp3', 'audio2.mp3'] output_file = 'output.mp3' duration = 'longest' # 混合后的音频长以最长的输入音频为准 volume = 0.5 # 混合后的音量为输入音频的一半 audio_mix(input_files, output_file, duration, volume) ``` 这段代码将会将`audio1.mp3`和`audio2.mp3`两个音频文件进行混合,输出为`output.mp3`文件。混合后的音频长以最长的输入音频为准,混合后的音量为输入音频的一半。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪的期许

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值