Linux MP3 CD 刻录 mini-HOWTO

Greg Wierzchowski

2001-05-29

修订历史
修订 1.112004-08-21修订者: GW
修复了一个错别字。
修订 1.102004-07-14修订者: GW
修复了修订编号,使其与 CVS 同步。
修订 1.92004-07-14修订者: GW
小更新,添加了新的子章节。
修订 1.82003-09-12修订者: GW
清理,更新,修复和小布局更改。
修订 1.72002-04-26修订者: GW
分为两个部分:现有材料归为“音频”部分,关于数据 CD 的新部分为“数据”。杂项添加。
修订 1.52001-11-19修订者: GW
修复了一次性刻录部分中的遗漏。
修订 1.42001-11-17修订者: GW
添加了一次性刻录部分。
修订 1.32001-09-02修订者: GW
添加了另一个使用 lame 解码 MP3 文件的例子。
修订 1.22001-07-12修订者: GW
小布局更改;在致谢中添加了翻译子章节。
修订 1.12001-06-12修订者: GW
小清理;修复了 MP3 到 WAV 名称转换示例的正则表达式。
修订 1.02001-05-29修订者: GW
初始发布。

从 MP3 文件创建音频和数据 CD 的完整指南。


目录
1. 简介
1.1. 版权和许可
2. 音频 CD
2.1. 准备音轨
2.2. 音量标准化
3. 刻录 CD
4. 刻录 DAO CD
5. 软件
6. 数据 CD
7. CD 刻录资源
8. 致谢
8.1. 翻译
8.2. 其他致谢

1. 简介

创建此 mini-HOWTO 是因为我在刻录音乐 CD 方面的经验,以及互联网上缺乏关于声音标准化的特定信息。我通常将音乐 CD 刻录成混音 - 来自不同来源的不同歌曲。歌曲之间的音量级别经常差异很大。这是第一个障碍。其次,互联网上的许多文件与 CD 不兼容(16 位,立体声,44.1 kHz),必须进行转换。有很多程序可以从 MP3 文件刻录音乐 CD,其中许多程序可以透明地进行转换。但我还没有看到任何工具可以同时标准化音量,所以这就是我制定自己的 CD 刻录指南的原因。

如果您只想制作一张充满音乐的 CD,而不必为所有细节而烦恼,我有个好消息要告诉您:Kees Cook () 根据本 HOWTO 整理了一个工具,该工具可以自动执行此处概述的所有任务。他的程序可以从 http://outflux.net/unix/software/mp3cd/ 获取。谢谢,Kees!

本 HOWTO 仅关于一件事 - 将 MP3 音乐放到 CD 上,以便您可以收听。有关 MP3 文件的深入信息,请查看 Phil Kerr 的Linux MP3 HOWTO,网址为 http://www.tldp.org/HOWTO/MP3-HOWTO.html。有关 CD 创建以及 CD 刻录机的常规信息,请参阅 Winfried Trümper 的 CD-Writing-HOWTO,网址为 http://www.tldp.org/HOWTO/CD-Writing-HOWTO.html。此外,请查看CD 刻录资源部分以获取更多信息。

我假设您希望刻录一张 CD,其中包含您从不同来源获得的不同歌曲集合,所有歌曲的质量都不同,但您希望获得音质尽可能好的 CD。本 mini-HOWTO 概述了可能对您有所帮助的步骤。


1.1. 版权和许可

本文档版权归 Greg Wierzchowski 2001 年所有,并根据 GNU 自由文档许可证的条款发布,该许可证在此通过引用并入本文。请将反馈发送至 greg@draxen.org


2. 音频 CD

2.1. 准备音轨

Note注意
 

所有命令都假设为 bash shell


2.1.1. 文件名清理

  1. 将所有 MP3 文件收集到一个目录中。

  2. 如果任何文件名包含空格,请首先将它们转换为下划线

         for i in *.mp3; do mv "$i" `echo $i | tr ' ' '_'`; done 

    第一步很重要,因为即使 unix 本身允许文件名中包含空格,但大多数程序都会被空格搞糊涂。

  3. 如果您的 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
         

2.1.2. 转换

CD 音频规范要求波形文件为 16 位,立体声,44.1 kHz。MP3 文件通常具有不同的参数,但无论如何我们都需要先将它们转换为 WAV。

对于转换过程,我们有几种选择。


2.1.2.1. mpg123 和 mpg321

最初,只有 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 不是我的首选转换器。


2.1.2.2. MAD

另一个 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 文件有问题。


2.1.2.3. Lame

lame 编码器(具有解码模式)似乎可以很好地处理困难的情况(lame 可以在 http://www.mp3dev.org/mp3/ 找到)

     for i in *.mp3; do lame --decode $i `basename $i .mp3`.wav; done
     

2.1.2.4. OGG 文件

嗯,本 HOWTO 是关于 MP3 文件的,但 OGG 标准是 MP3 的替代方案,许多人因为许可而更喜欢 OGG。要处理 OGG 文件,您需要使用

	for i in *.ogg ; do ogg123 -d wav -f `basename $i .ogg`.wav $i; done
     

2.1.2.5. 转换其他格式

Nico Genimakis 发送给我一封电子邮件,内容是关于使用mplayer将多种不同格式的音频转换为 WAV,并自动重采样到 44100Hz。众所周知,Mplayer 几乎可以读取任何内容,它可以转换您的 .ogg、.mp3、.flac、.wma 等。

用法(在本例中转换 WMA 文件)

	for i in *.wma ; do mplayer -vo null -vc dummy -af resample=44100 -ao pcm -waveheader $i; done
     

2.1.3. 转换注意事项

注意: `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 以获取一些使用技巧。


2.2. 音量标准化

音量标准化是一个过程,在此过程中,所有声音文件都被带到相同的相对响度级别。我使用 Chris Vaill () 的程序 normalize - 可以从 http://www.cs.columbia.edu/~cvaill/normalize/ 获取

我使用以下语法(-m 用于混合模式,其中所有文件应尽可能响亮)

     normalize -m *.wav

3. 刻录 CD

有很多程序可以从 WAV 文件创建 CD。我使用 cdrecord 进行命令行刻录,使用 XCDROAST 进行 gui 刻录。对于 cdrecord,您必须知道 CD 刻录机的 SCSI 设备是什么。如果您使用的是 ATAPI 刻录机,并且内核较旧,请使用 SCSI 仿真(内核模块 ide-scsi)。从内核 2.6 开始,您可以直接使用 ATAPI,而无需 SCSI 仿真,方法是在设备规范前加上 ATAPI:。假设您的 ATAPI cdwriter 在第二个 IDE 总线上作为主设备。因此,它将具有/dev/hdc设备文件。要指示内核您希望将其视为 SCSI 设备,请将以下行添加到/etc/lilo.conf:

     append=" hdc=ide-scsi"

此外,如果您的内核未自动加载 ide-scsi 模块,请将 insmod ide-scsi 添加到您的rc.local(或等效)文件。一旦您的 CD 刻录机被识别为 SCSI 设备,请运行 cdrecord --scanbus 以找出 cdrecord 的“dev”参数是什么。在我的系统上,输出如下所示

     scsibus1:
     1,0,0 100) 'IOMEGA ' 'ZIP 250 ' '51.G' Removable Disk
     1,1,0 101) 'HP ' 'CD-Writer+ 7100 ' '3.01' Removable CD-ROM

因此,cdrecord 命令行将包含 dev=1,1,0 以指定设备。这是我的系统上的完整命令

     cdrecord dev=1,1,0 -eject speed=2 -pad -audio *.wav

并且,使用内核 2.6

     cdrecord dev=ATAPI:1,1,0 -eject speed=2 -pad -audio *.wav

Note注意
 

必须使用 -pad 参数,因为 CD 上的所有音轨都必须针对正确的数据长度进行调整,而 mp3 文件的情况并非总是如此。

另一种方法是在刻录前使用 sox 将 WAV 文件转换为 CDR 格式

sox file.wav file.cdr

4. 刻录 DAO CD

DAO,一次性刻录,是目前唯一一种在音轨之间没有 2 秒暂停的情况下刻录 CD 的方法。它对于刻录派对混音很有用。用于 DAO 模式刻录 CD 的程序是 cdrdao,可从 SourceForge 获取,http://sourceforge.net/projects/cdrdao/

cdrdao 程序使用名为 TOC(当然是目录表)的描述文件。创建此类文件有两种方法。第一种是使用随 cdrdao 源代码分发的 shell 脚本(在contrib目录中,名为 generate_toc.sh。它接受.wav文件列表作为参数,并生成一个cd.toc文件。第二种方法是在您选择的文本编辑器中简单地创建这样的文件。这是一个不言自明的例子

CD_DA

TRACK AUDIO
AUDIOFILE "mix-01.wav" 0

TRACK AUDIO
AUDIOFILE "mix-02.wav" 0

TRACK AUDIO
AUDIOFILE "mix-03.wav" 0

TRACK AUDIO
AUDIOFILE "mix-04.wav" 0

TRACK AUDIO
AUDIOFILE "mix-05.wav" 0

波形文件名后的 0(零)表示从文件开头开始。可以有第二个数字提供要记录的文件长度(时间)。xcdroast 创建类似的 TOC 文件,在testtocs目录中也有示例 cdrdao 来源。

默认情况下,cdrdao 使用设备/dev/cdrecorder,它应该是 cdwriter 设备的链接。假设您的 cd 刻录机设备文件是/dev/scd0,按如下方式创建链接(以 root 用户身份)

ln -s /dev/scd0 /dev/cdrecorder

然后,假设 TOC 文件名为cd.toc刻录 cd 的命令很简单

cdrdao write cd.toc

5. 软件

有一些程序可以自动化从 MP3 文件创建 CD 的过程。这是一个任意选择的列表


6. 数据 CD

Note注意
 

本节正在进行中,您正在查看初始的非常稀疏的版本。

随着 CD/MP3 播放器的日益普及,出于收听目的刻录数据 CD 变得实用。优点肯定是能够将十倍以上的音乐压缩到一张 CD 上(一个非常近似的数字)。

首先,我建议使用本文档开头概述的文件名清理步骤。显然,此处不需要转换为 WAV。要标准化 MP3 文件而不因转换而损失质量,请使用 mp3gain。该程序可从 http://www.maazl.de/project/mp3/mp3gain.htmlhttp://mp3gain.sourceforge.net/ 获取(但第二个站点似乎包含面向 Windows 的版本)。您需要发出命令

mp3gain -r -c *.mp3

就刻录而言,MP3 数据 CD 只是标准的带有 MP3 文件的标准数据 CD (ISO9660)。我所知道的所有 MP3-CD 播放器都接受带有目录的 CD,并且我通常刻录带有 Joliet 扩展名的 CD,它们工作正常。因此,要在 linux 下刻录这样的 CD,您首先需要创建一个 ISO 镜像,然后像下面的示例中那样将其刻录到 CD 上

mkisofs -J -o /tmp/mymp3s.iso /home/greg/mp3s/
cdrecord dev=1,0,0 speed=16 -eject /tmp/mymp3s.iso

就是这样!


7. CD 刻录资源


8. 致谢

特别感谢所有为 Linux 社区做出贡献并使本 HOWTO 成为可能的人们。


8.1. 翻译


8.2. 其他致谢

我对本 HOWTO 以前的版本收到了很好的反响。很多人做出了贡献,所以我决定稍微修改一下本节,以便列出所有名字。因此,我要感谢

Greg Ferguson, Rob Russell, Terry Davis, Chris Vaill, Jamie Kellogg, Tom Panning, Adam Buckley, Ilia Lobsanov, Giuseppe "Cowo" Corbelli, Florent Fievez, Piero Ottuzzi, Kees Cook, Andrew Newman, David DeVault, Nico Genimakis, Jan-Erik Stromquist。

最重要的是,我要感谢我可爱的妻子 Marta,感谢她的爱、支持和理解