我想使用 FFmpeg 将立体声 MP3 文件分割成两个单声道 MP3 文件,使得每个单声道文件都是 MPEG-1 Layer 3 Version 1:
我使用这个命令:
ffmpeg -i input.mp3 -map_channel 0.0.0 left.mp3 -map_channel 0.0.1 right.mp3
输入文件是 MPEG-1 Layer 3 Version 1,但输出是 MPEG-1 Layer 3 Version 2。
答案1
您无法设置它。FFmpeg 根据所需输出自动选择版本。要强制使用某个版本,您必须使用与该版本兼容的选项。阅读此链接(从下面的页面进行介绍)并选择适合您的应用程序的正确组合。
在 MPEG 音频文件中,没有主标头,因为 MPEG 音频文件只是由一系列称为帧的较小部分组成。每个帧都是一个数据块,具有自己的标头和音频信息。
对于第 I 层或第 II 层,帧彼此完全独立,因此您可以剪切 MPEG 音频文件的任何部分并正确播放。然后播放器将从找到的第一个完整有效帧开始播放音乐。但是,对于第 III 层,帧并不总是独立的。由于可能使用“字节储存器”(一种内部缓冲区),帧通常彼此依赖。在最坏的情况下,可能需要 9 个输入帧才能解码一个帧。
如果您需要检索有关 MPEG 音频文件的信息,您可能只需找到第一帧,然后从其标题中检索信息。其他帧中的信息应与第一帧一致,比特率除外,因为您可能正在从可变比特率 (VBR) 文件中检索信息。在 VBR 文件中,比特率可以在每一帧中更改。例如,当音乐更复杂时,可以使用更多比特来保持整个文件的恒定音质,因此需要更多比特来以相似的质量进行编码。
帧头本身的长度为 32 位(4 字节)。帧头的前 12 位(在 MPEG 2.5 扩展中为前 11 位)始终设置为 1,称为“帧同步”。帧还可以具有可选的 CRC 校验和。它的长度为 16 位,如果存在,则紧跟在帧头之后。CRC 之后是音频数据。通过重新计算 CRC 并将其值与已存储的值进行比较,您可以检查帧在传输比特流期间是否已被更改。