![]() | 注意 |
---|---|
所有命令都假定使用 bash shell |
将所有 MP3 文件收集到一个目录中。
如果任何文件名包含空格,请首先将其转换为下划线
for i in *.mp3; do mv "$i" `echo $i | tr ' ' '_'`; done |
第一步很重要,因为即使 unix 本身允许文件名中包含空格,大多数程序也会对此感到困惑。
如果您的 MP3 文件来自 DOS/Windows,它们可能具有大写扩展名。您可以将整个名称转换为小写或仅转换扩展名。要全部转换为小写,请执行
for i in *.[Mm][Pp]3; do mv "$i" `echo $i | tr '[A-Z]' '[a-z]'`; done |
要仅转换扩展名
for i in *.MP3; do mv "$i" "`basename "$i" .MP3`.mp3"; done |
CD 音频规范要求 16 位、立体声、44.1 kHz 的 wave 文件。MP3 文件通常具有不同的参数,但无论如何我们都需要先将它们转换为 WAV。
对于转换过程,我们有几种选择。
最初,只有 mpg123。但是,它使用专有许可,现在有一个开源替代品 - mpg321。两个命令使用相同的语法
for i in *.mp3; do mpg321 -w `basename $i .mp3`.wav $i; done |
当解码 22khz MP3 文件时,mpg123 的输出可能会失真。我不知道 mpg321 在处理这个问题上表现如何。如果您使用 mpg123 进行转换,请使用
for i in *.mp3; do mpg123 --rate 44100 --stereo --buffer 3072 --resync -w `basename $i .mp3`.wav $i; done |
Mpg123 可以从 http://www.mpg123.de/ 获取。
Mpg321 可从 http://mpg321.sourceforge.net/ 获取。
注意 我注意到对于某些 MP3 文件,mpg123 的输出失真了。起初我以为是 MP3 文件坏了,但是后来我用另一个播放器检查,它们听起来没问题。所以 mpg123 不是我的首选转换器。
另一个 MP3 播放器/解码器,也是我更喜欢的一个,是 madplay。它可从 http://www.mars.org/home/rob/proj/mpeg/ 获取。使用 madplayer,命令行是
for i in *.mp3; do madplay -o `basename $i .mp3`.wav $i; done |
不幸的是,madplay 在处理我的一些 MP3 文件时也遇到了问题。我不认为解码器有问题,而是它在处理损坏的 MP3 文件时有问题。
具有解码模式的 lame 编码器似乎可以很好地处理困难的情况(lame 可以在 http://www.mp3dev.org/mp3/ 找到)
for i in *.mp3; do lame --decode $i `basename $i .mp3`.wav; done |
注意: `basename $i .mp3`.wav 命令将 MP3 扩展名替换为 WAV。有很多种方法可以做到这一点,这是另一种方法:`echo "$1" | sed 's/\.mp3$/.wav/'`
转换后,运行“file *.wav”,并检查输出中是否有任何文件与 16 位、立体声 44100 Hz 不同。
如果存在具有不同特性的文件,请将它们转换为上述规格。例如,要转换文件 track01.wav 以获得 44.1 kHz 的采样率,您可以使用
sox track01.wav -r 44100 track01-new.wav resample |
或者,如果上述方法在转换单声道文件时引入静音
sox track01.wav -r 44100 -c 2 track01-new.wav |
Sox 非常流行,它可能已默认安装在任何 Linux 发行版中,并且可以从 http://www.spies.com/Sox/ 获取。但是,对于普通用户(我)来说,命令行选项有些晦涩难懂。请查看 http://www.spies.com/Sox/sox.tips.html 以获取一些使用技巧。
归一化是一个过程,在此过程中,所有声音文件都被调整到相同的相对响度级别。我使用 Chris Vaill 的一个程序(<cvaill@cs.columbia.edu>),名为 normalize - 它可从 http://www.cs.columbia.edu/~cvaill/normalize/ 获取
我使用以下语法(-m 用于混合模式,其中所有文件应尽可能响亮)
normalize -m *.wav |