这是我需要做的:将 30.0 秒的 WAV 转换为 30.0 MP3。
我曾尝试使用 LAME 来实现这一点,但无论我怎么尝试,LAME 总会在输出 mp3 中添加短暂的静音。使用 LAME,我的 30.0 秒 WAV 变成了 30.1 秒 MP3。这太糟糕了。
有谁知道如何使用 Windows 命令行将 WAV 转换为 MP3?
例如通过program.exe in.wav out.mp3
CMD 运行?
至关重要的是,生成的 MP3 文件中不能添加静音。我再怎么强调也不为过。
答案1
MP3 流包含用于生成一组样本的信息,其中每个样本对应于原始 LPCM 数据(例如来自 WAV 文件)中的一个样本,但编码的副作用是每个末尾都会添加一些额外的“垃圾”,而解码的副作用是开头会添加更多垃圾。解码器会知道它添加了多少并会跳过这些样本,但编码器添加的垃圾并不完全可预测(不同的编码器添加的量不同),因此解码器无法跳过这些样本,除非它以某种方式被告知要跳过什么。某些编码器(如 LAME)会将此类“无缝播放”或“延迟和填充”信息(以编码器特定的格式,因为没有标准)添加到文件的 VBR 信息(VBRI)或 Xing 标头中,这在 CBR 文件上也是一种标准,并且包含其他有时对播放器有用的信息。此标头实际上是一个静音帧(通常为 1152 个样本),其中嵌入了一些特殊格式的信息,这些信息嵌入在帧的标头和其空音频数据的开头之间。大多数解码器/播放器会将该帧识别为特殊帧并跳过这些样本,但有些不会,因此存在另一个潜在的故障点。因此,我希望确保您使用兼容的编码器/解码器组合来获得正确长度、无垃圾修剪的文件作为输出。
您的第二个问题...您注意到 LAME 命令行应用程序的“--decode”选项了吗?:) 如果您使用 LAME 作为编码器,这应该可以解决您的问题。输出长度应与输入匹配。
答案2
我想将此常见问题解答和超级用户主题添加到讨论中:
答案3
我想提供一个更简洁、更清晰的答案。
恐怕没有办法创建连续播放且开头和结尾没有间隙的 MP3 文件。这被称为无缝播放是一个备受讨论的问题。
正如至少一个其他答案所说,有一些适用于某些特定音乐播放器的解决方法。
答案4
我不知道如何以及为什么,但ffmpeg -i q.wav q.mp3; ffmpeg -i q.mp3 q2.wav
对我来说保留了文件长度。而且看起来它不会在文件开头添加静音。