4.1 CBR 的 MP3的播放时间(duration)计算公式
因此,帧大小可以用如下公式计算:
Frame Size = ( (Samples Per Frame / 8 * Bitrate) / Sampling Rate) + Padding Size
帧大小 = ((每帧的采样数 ÷ 8 × 比特率) ÷ 采样率)+ 填充大小 【公式 1】
由于舍入误差,官方的计算帧大小的方法和此稍有不同。根据 ISO 标准,应该以 slot 为单
位进行计算,然后对结果取整,再乘于 slot 的大小。
用如下公式可以计算 MP3的播放时间,以秒为单位:
CBR Duration = File Size / Bitrate * 8
播放时间 = 文件大小 ÷ 比特率 × 8 【公式 2】
对于 CBR的文件,可以用上面的公式,通过第一帧,算出整个文件的播放时间。
对于 VBR,要用另外的公式。下面将会详细介绍。
4.2 VBR 的 MP3的播放时间(duration)计算公式
想要计算 VBR的 MP3 的播放时间,我们必须要知道整个文件的平均比特率(average
bitrate)。此平均比特率,一般来说,往往和第一帧的比特率相差很大。因为 MP3音乐的
开头部分,很多是用于现实标题的一些几乎无声的数据。也就意味着,如果解码器对于 VBR
文件,按照CBR文件来解码,而去通过第一帧去计算整个文件的播放时间,那么往往结果
和实际相差很大。这也就是后面引用中一个帖子里面遇到的情况,即,Media Player Classic
播放 VBR的MP3时的时间问题。
为了得到平均比特率,你必须遍历整个文件的所有帧,然后再才能计算出来,即算出一
共有多少帧,将每一帧的比特率加起来得到个总和,用总和去除于帧数,就是平均比特率了。
由于这个做法效率太低,所以就有了 VBR的头这个东西,其放在第一帧帧头的后面的。
其包含了此 VBR一共有多少帧,有了总的帧数,你就可以用下面的公式去计算播放时间了:
VBR Duration = Number of Frames * Samples Per Frame / Sampling Rate
VBR文件播放总时间 = 总的帧数 × 每一帧的采样个数÷ 比特率 【公式 3】
此外,VBR的头中,往往还包含了一个用于定位的 TOC(table of content)目录表。即用
于在快进或快退的时候,通过表中的信息,可以方便地定位到对应的位置。如果没有此 TOC
表,需要单独去计算出对应的位置,比较麻烦。
a