sox - 如何创建比特率为16kbps的mp3文件

时间:2014-11-03 13:29:21

标签: audio mp3 sox transcoding libsox

目前使用的命令是

    `sox input.wav -G -t mp3 -r 16k test.mp3`

但这是创建一个比特率为24.0 kbps的文件。

如何将输出文件的比特率设为16.0 kbps?

1 个答案:

答案 0 :(得分:10)

在您找到的sox formats manual中,它是-C选项。下面我引用整个部分,因为你可能会发现它很有趣。

但是,如果我调用sox test.wav -C 16.01 test.mp3,我的测试文件(48kHz / 16bit)将转换为32kbps。如果我呼叫lame test.wav -b 16 -q 0 test.mp3我得到16kbps但test.mp3转换为8kHz的采样率。但如果我真的想用lame test.wav -b 16 -q 0 --resample 48000 test.mp3保持48kHz,我也会得到32kbps。因此,我们看到,高采样率和高压缩比之间存在折衷。

  

MP3压缩音频; MP3(MPEG Layer 3)是用于音频和视频压缩的受专利保护的MPEG标准的一部分。它是一种有损压缩格式,可以实现良好的压缩率,而且质量损失很小。

     

由于MP3已获得专利,因此在不产生专利持有人费用的情况下,SoX无法与MP3一起发布。需要具有MP3支持的SoX的用户当前必须从源代码编译和构建具有MP3库(LAME& MAD)的SoX,或者在某些情况下,获得预先构建的动态可加载库。

     

读取MP3文件时,尽管只向用户报告了16位,但最多可存储28位精度。这是为了允许写入16位输出文件的默认行为。用户可以为输出文件指定更高的精度,以防止丢失这些额外信息。 MP3输出文件在编码时将使用高达24位的精度。

     

可以使用SoX的-C选项选择MP3压缩参数,如下所示(请注意,当前语法可能会发生变化):

     

LAME编码器的主要参数是比特率。如果-C值的值为正整数,则将其视为以kbps为单位的比特率(例如,如果指定128,则使用128 kbps)。

     

第二个最重要的参数可能是“质量”(真正的性能),它可以平衡编码速度与质量。在LAME中,0表示最高质量但速度很慢,而9表示质量差,但速度很快。 (5是默认值,建议使用2作为高质量编码的良好折衷。)

     

因为-C值是浮点数,所以小数部分用于选择质量。 128.2选择质量为2的128 kbps编码。这种方法存在一个问题。我们需要128来指定默认质量的128 kbps编码,因此0表示使用默认值。而不是0,你必须使用.01(或.99)来指定最高质量(128.01或128.99)。

     

LAME使用比特率指定恒定比特率,但使用可变比特率(VBR)可以实现更高的质量。使用0到9之间的数字选择VBR质量(实际大小)。对于高质量,大文件使用值0,对于较低质量的较小文件使用值9。 4是默认值。

     

为了将VBR的选择压缩到-C值浮点数,我们使用负数来选择VRR。 -4.2将选择具有高质量(速度)的默认VBR编码(大小)。一种特殊情况是0,它是有效的VBR编码参数,但不是有效的比特率。压缩值0始终被视为高质量vbr,因此-0.2和0.2都被视为最高质量的VBR(大小)和高质量(速度)。