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

背景

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

问题描述

例如,7个音频混合起来,发现第一个音频的音量变得很小,第2个稍大一点,直到第7个最大(等于原音频)。

bash 复制代码
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关于该问题有一个讨论:stackoverflow。

知乎也有人讨论过:如何解决FFmpeg合并多个音频并解决声音变小的问题? - JJ Chan的回答 - 知乎。

这个是因为ffmpeg叠加音频的机制导致的。使用amix的时候每个引入的视频会以1/n的音量播放,其中n是活动的inputs的数量。例如一共18个音频的话,这时候处理第一个音频的时候就是一共有18个活动的inputs,音频会以1/18的音量播放。处理第二个的时候,第一个音频已经不活动了, 就剩17个inputs,音频会以1/17的音量播放。所以导致越到后面的声音越大。

解决方法

方法1

知道了原因,可以把amix 缩小的声音给放大回来,修改上面的命令:

bash 复制代码
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]volume=7[a0];\
		[1:a]volume=6[a1];\
		[2:a]volume=5[a2];\
		[3:a]volume=4[a3];\
		[4:a]volume=3[a4];\
		[5:a]volume=2[a5];\
		[6:a]volume=1[a6];\
		[a0][a1][a2][a3][a4][a5][a6]amix=inputs=7:duration=longest[Audio]"  \
	-map "[Audio]" -acodec mp3 -y amix.mp3

方法2

据stackoverflow讨论,新版本FFmpeg支持在amix时指定normalize=0以取消默认的音量缩小行为。

经过尝试,该参数在FFmpeg v4.3上不存在,FFmpeg v6.0上可用。

bash 复制代码
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:normalize=0[Audio]"  \
	-map "[Audio]" -acodec mp3 -y amix.mp3

总结

FFmpeg使用amix进行音频混合时,默认行为是缩减每个音频,这容易让人忽略掉。虽然最新版本FFmpeg提供了参数normalize=0来屏蔽掉这个默认行为,但老版本FFmpeg还是只能手动调整音量。

相关推荐
微帧Visionular20 小时前
AI视频单帧清晰,播放时却闪烁,原因是什么?
人工智能·深度学习·音视频
辰辰观影1 天前
Windows网盘视频播放器推荐:无广告4K HDR怎么选
音视频
2601_966827451 天前
电视端云盘在线播放怎么选?支持4K HDR的应用推荐
音视频
开开心心就好1 天前
音频降噪剪辑工具,音量裁剪一键处理
运维·服务器·前端·spring·ocr·音视频·1024程序员节
zslefour1 天前
使用ffmpeg遍历获取音频文件相关信息
ffmpeg
AI视频工具指南1 天前
AI视频的声音和画面怎么配合?先分清谁在传递信息
人工智能·aigc·音视频
辰辰观影1 天前
无广告播放器推荐来啦
音视频
TrueDei1 天前
GStreamer 使用 valve 分别控制音视频流的暂停与恢复
音视频
Android系统攻城狮1 天前
Linux FFmpeg深度解析之avcodec_parameters_from_context调用流程与实战(十六)
linux·运维·ffmpeg·音视频进阶·ffmpeg音视频·车载音视频进阶
一条破秋裤1 天前
基于 Hi3516CV610 的立定跳远视频测量系统调研与实施方案
arm开发·音视频