2

MP3 帧的压缩数据可以小于帧中的可用空间。发生这种情况时,我们将可用空间称为水库。

当未来的框架太大而无法容纳一个框架的可用空间时,它可以使用一个水库来储存剩余空间。这允许恒定的比特率和可变的压缩长度,包括对于正常帧来说太大的长度。

我想知道水库离当前帧有多远?

例如,在下面我展示了 8 帧。当前帧 (CF) 和它之前的 7 帧。

+----+----+----+----+----+----+----+----+
| -7 | -6 | -5 | -4 | -3 | -2 | -1 | CF |
+----+----+----+----+----+----+----+----+

假设 CF 是第 100,000 帧,它可以使用第 0 帧中仍然可用的水库吗?

还是有限制,例如 255 帧返回?

4

1 回答 1

2

据我所知,没有具体的帧数限制,但有 4,088 位(511 字节)的参考限制。因此,确切的比特储存器帧限制取决于比特率。

我在LAME 技术常见问题解答中找到了这些信息:

帧 N 的 MP3 数据不存储在帧 N 中,但可以分布在多个帧中。在典型情况下,第 N 帧的数据将有 20% 的数据存储在第 N-1 帧中,80% 的数据存储在第 N 帧中。如果编码器建立一个大的比特库,则第 N 帧的数据实际上可以存储 4088比特流中的比特。然后,如果出现一个非常难以编码的段落,那么编码器可以自由地使用该帧的正常位加上多达 4088 位。然后,生成的数据将占用几帧。与给定帧相关联的数据在比特流中的起始负偏移量(以字节为单位)由 main_data_begin 给出。

于 2019-05-14T23:38:09.950 回答