【发布时间】:2014-11-03 13:29:20
【问题描述】:
目前使用的命令是
`sox input.wav -G -t mp3 -r 16k test.mp3`
但这是在创建一个比特率为 24.0 kbps 的文件。
如何使输出文件的码率达到16.0 kbps?
【问题讨论】:
标签: audio mp3 sox transcoding libsox
目前使用的命令是
`sox input.wav -G -t mp3 -r 16k test.mp3`
但这是在创建一个比特率为 24.0 kbps 的文件。
如何使输出文件的码率达到16.0 kbps?
【问题讨论】:
标签: audio mp3 sox transcoding libsox
在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 第 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(大小)和高质量(速度)。