计算MP3平均体积(calculate mp3 average volume)

2019-10-16 14:15发布

我需要知道一个MP3文件的平均体积,这样,当我把它转换成MP3(在不同的比特率),我可以缩放量太少,正常化它...

因此,我需要一个命令行工具/ Ruby库,让我以dB为单位的平均体积。

Answer 1:

您可以使用SOX(一个开源的命令行工具音频http://sox.sourceforge.net/sox.html )正常化,并在同一时间转码文件。

编辑

看起来它不具备的比特率选项。 无论如何,SOX是,如果不LAME正常化可能是矫枉过正。



Answer 2:

您可以使用LAME编码为MP3。 它有一个标准化,缩放和比特率选项。 LAME也编译成几乎任何平台。



Answer 3:

我写了一个小包装脚本,基于上述输入:

#!/bin/sh

# Get the current volume (will reset to this later).
current=`amixer -c 0 get Master 2>&1 |\
    awk '/%/ {
              p=substr($4,2,length($4)-2);
              if( substr(p,length(p)) == "%" )
                 {
                 p = substr(p,1,length(p)-1)
                 }
             print p
             }'`

# Figure out how loud the track is.  The normal amplitude for a track is 0.1. 
#   Ludicrously low values are 0.05, high is 0.37 (!!?)
rm -f /tmp/$$.out
/usr/bin/mplayer -vo null -ao pcm:file=/tmp/$$.out $1 >/dev/null 2>&1
if [ $? = 0 ] ; then
    amplitude=`/usr/bin/sox /tmp/$$.out -n stat 2>&1 | awk '/RMS.+amplitude/ {print $NF}'`
fi
rm -f /tmp/$$.out

# Set an appropriate volume for the track.
to=`echo $current $amplitude | awk '{printf( "%.0f%%", $1 * 0.1/$2 );}'`
echo $current $amplitude | awk '{print "Amplitude:", $2, "  Setting volume to:", 10/$2 "%,  mixer volume:", $1 * 0.1/$2}'
amixer -c 0 set Master $to  >/dev/null 2>&1

mplayer -quiet -cache 2500 $1

# Reset the volume for next time.
amixer -c 0 set Master "$current%"  >/dev/null 2>&1

这需要一个额外的第二个启动播放文件,并且依赖于alsamixer中调节音量,但它确实让你不必不断调整的主音量的一个非常好的工作。 它并不真正关心输入格式是什么,因为如果MPlayer能在所有打它,它可以提取音频,所以能很好地工作MP3,OGG,AVI,等等。



Answer 4:

http://mp3gain.sourceforge.net/是这一个深思熟虑的解决方案。



文章来源: calculate mp3 average volume