问题描述
我正在寻找一种方法来规范我的MP3文件中的声音。有些声音很低,而有些声音较大,所以我必须根据歌曲调高或调低音量。有什么方法可以为所有文件执行此操作。我特别想通过终端这样做,但也接受GUI方式。
最佳解决办法
Audacity
使用Audacity,我们可以轻松地将batch process文件应用于列表中的许多文件的转换或效果。为此,我们首先要定义一个包含我们想要应用的效果的”Chain”。
这是通过“文件 – >编辑链……”完成的。在现在打开的窗口中,按左下角的“添加”按钮插入一个新链(给它一个合理的名称):
然后选择效果及其参数以插入链(此处显示默认值和标准化效果)。
Important: we always need to also add the effect “Export MP3” (or any other export format) for saving the resulting conversion to disk.
完成后,单击确定退出此窗口以打开“文件 – >应用链…”。选择我们刚创建的Chain,并使用“Apply to files …”加载所需的所有文件。可以从打开的文件选择器中选择多个文件。
处理过的文件将保存在原始路径的新子目录”cleaned”中。
Sox
从版本> 14.3我们可以使用sox过滤器--norm
在命令行上规范化音频或进行批处理:
sox --norm infile outfile
使用libsox-fmt-all将MP3支持添加到Sox。
次佳解决办法
看看@ mp3gain对我来说甚至比normalize-audio更好
mp3gain -r *.mp3
另一个有用的版本可能是-c,它会阻止询问您是否要对许多文件进行更改:
mp3gain -c -r *.mp3
如手册页中所述:
mp3gain不仅像许多规范化器那样进行峰值归一化。相反,它会进行一些统计分析,以确定文件实际发出的声音对人耳的响亮程度。此外,mp3gain的变化是完全无损的。更改中没有质量丢失,因为程序直接调整mp3文件,无需解码和re-encoding。
注意:该软件包在ubuntu 15.04上专门用于removed。
Debian建议将python-rgain
软件包作为替代品(优点是’replaygain’支持多种文件格式,即Ogg Vorbis,Flac,WavPack和MP3。此外,它还允许您查看任何这些文件类型中的现有重播增益信息)。安装后,运行replaygain
。
要从终端安装python-rgain,请运行该命令
sudo apt-get install python-rgain
或者,从here获取14.04(最新)的.deb
文件。像往常一样安装。之后,您需要运行sudo apt-get -f install
来纠正一些依赖性问题。
第三种解决办法
我会使用这个项目Normalize,这是一个用于规范化音频文件的命令行工具。看起来正是您所需要的。可以进行批处理,也不需要重新采样到中间格式。
它在包装回购中作为normalize-audio,sudo apt-get install normalize-audio
。这是Debian上游维护的一个版本,因此它应该是LTS或更新版本,并且具有mp3兼容性(经过测试)。有一个好的联机帮助页man normalize-audio
来探索选项,但命令默认值似乎运行良好。对于批处理(规范化多个文件的卷),normalize-audio -b *.mp3
或指定单个文件名而不是使用通配符。
第四种办法
为了它,我将投入2美分。我正在寻找完全相同的东西(仅适用于ogg文件)并在Crunchbang论坛上开始了一个主题。你可以在这里查看:Normalize-audio can’t find mp3 decoder
基本上我的解决方案是#8后的脚本。它适用于mp3,flac和ogg输入文件,可能是其他文件,但绝对不是wav。
只需创建一个文件(将它命名为你想要的名字,我称之为db_adjust_mp3),chmod + x,并将其粘贴在〜/bin文件夹中。它还填充任何丢失的编解码器数据。例:
原始文件:16._This_Protector.mp3: Audio file with ID3 version 2.3.0, contains:
与
规范化文件:16._This_Protector.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 192 kbps, 44.1 kHz, JntStereo
我已修改脚本以在此处使用normalize-mp3,因此您可以根据需要使用它:
#!/bin/bash
find "$1" -iname "*.""$2" > $HOME/file_list
cat $HOME/file_list | while read line; do
# echo "$line"
orig_gain="$(normalize-mp3 -n "$line" | cut -d 'd' -f1)"
larger=$(echo "$orig_gain"'>'-12 | bc)
if [[ larger ]]
then
gain_difference=$(echo "$orig_gain"*-1-12 | bc)
else
gain_difference=$(echo "$orig_gain"-12 | bc)
fi
echo "Gain Difference will be: $gain_difference""db"
normalize-ogg --mp3 --bitrate "$3" -g "$gain_difference""db" -v "$line"
done
这个脚本计算当前数据库级别和-12db之间的差异,然后应用增益调整将增益精确地放在-12db,这是我发现最适合我的。它也是递归的,这使得它非常适合在许多子文件夹中完成整个音乐集合或文件。如果要设置不同的数据库级别,只需将数字”12″的两个实例更改为您要使用的任何数据库级别。当我在我的Crunchbang线程中发布时,用法如下:
normalize-mp3 <directory> <file extenstion(with no leading dot)> <bitrate>
然而,当我以前用mp3格式保存我的音乐库时,我也习惯使用mp3gain,就像Philippe建议的那样。它简单易懂,我非常喜欢它。但是normalize-audio的问题在于它确实对文件进行了re-endcode解码,所以会有一些声音降级。但除非你是一个发烧友并且你的mp3以高比特率编码,否则你不应该注意到很大的差别。
我用mp3gain注意到的事情是,无论我尝试了什么选项,我都无法将我的收藏中的所有内容都设置为完全相同的数据库级别,这就是我想要的,这样我就不必将音量从一个音轨调整为下一个。这个脚本就是这样做的。很抱歉这么久了。希望这可以帮助。
第五种办法
replaygain
在Ubuntu 16.04上,我遇到了其他CLI替代方案的问题。然后我找到了replaygain
:
This package provides a Python package to calculate the Replay Gain values of audio files and normalize the volume of those files according to the values. Two basic scripts exploiting these capabilities are shipped as well.
Replay Gain is a proposed standard designed to solve the very problem of varying volumes across audio files.
安装:sudo apt install python-rgain
。
replaygain --force *.mp3
-
-f, --force
重新计算重播即使文件已包含增益信息也会获得。
由于只计算/改变replaygain值,也更快:平均PC(Intel i7-6500U,8GB RAM):~20个文件/分钟。
Reference
-
维基百科上的ReplayGain article
-
Launchpad上的python-rgain