MP3格式分析(五)---计算CBR和VBR的MP3文件的播放时间的步骤
2011-11-21 11:48
921 查看
5.1定位到MPEG的帧头的位置
如果文件开始没有ID3 V2的头信息,那么一般MPEG的帧头位置是0,当然,具体还是要
根据帧头中的同步位(sync bit),共11位去定位找到帧头。
5.2解析MPEG帧头,获取必要信息
主要是根据帧头格式,解析出MPEG的版本,MPEG的Layer,以及采样率,比特率等信
息,用于后面的解码和计算播放时长。
5.3判断是VBR还是CBR,根据公式计算播放时间
解析完MPEG头之后,按照如下步骤去判断是CBR还是VBR,并计算出播放时长:
5.3.1定位出Xing头
根据:
XING头位置=MPEG头位置+4+边信息大小【公式4】
计算定位到XING头所在位置。上式中:
MPEG头位置:
如果没有ID3 V2这类的信息的话,那么MPEG头位置就是文件的最开始,即0的位置。
MPEG帧头大小:
固定的32 bit=4字节,所以加4.
边信息大小:
5.3.2 如果有,解析Xing头,并计算播放时间
VBR文件播放总时间=总的帧数×每一帧的采样个数÷比特率【公式3】
计算出播放时间长度。
其中:
总的帧数(Number of Frames):
可以通过解析XING头,找出里面总帧数(Frames),这个字段,一般都是存在的。
每一帧的采样个数(Samples Per Frame):
根据前面解析MPEG,找到MPEG的版本,以及其实哪个Layer,然后根据表3.2.3每帧
的采样数,得到,每一帧有多少个采样。
比特率(Sampling Rate):
根据前面解析MPEG,找到4比特大小的比特率索引,然后根据表3.2.2比特率(单位:
Kbit/sec),得到此比特率大小。
5.3.3如果没XING头,定位出VBRI头位置,找VBRI头
如果找到,解析VBRI,然后和XING头算法类似,得到需要的值,再根据【公式3】计算
出播放时间长度。
5.3.4如果都没找到,说明是CBR,则计算CBR的播放时间
Xing和VBRI都无,则是CBR,然后就可以用
帧大小=((每帧的采样数÷8×比特率)÷采样率)+填充大小【公式1】
播放时间=文件大小÷比特率×8【公式2】
计算出播放时间长度了。
其中【公式1】中所涉及到的:
每帧的采样数(Samples Per Frame):同上,可根据MPEG头解析出来。
比特率(Bitrate):
同上,可根据MPEG头解析出来。
采样率(Sampling Rate):
根据MPEG头中解析出来的采样率索引,然后查表:表3.2.4 MPEG不同版本对应的采样
率,即可。
填充大小(Padding Size):
根据MPEG帧头中的Padding位得知是0还是1。多数MP3,都没有padding,即为0.
计算出上面几个值后,可以根据:
帧大小=((每帧的采样数÷8×比特率)÷采样率)+填充大小【公式1】
计算出帧大小,然后再去计算:
文件大小(File Size):
这个自己计算就可以得到,我的理解是:
文件大小=总文件大小–头信息
这里的头信息,指的是ID3 V1或ID3 V2之类的头。
剩下的,总文件大小,这个不用多解释吧,就是整个读取出来的文件大小。
然后,就可以根据:
播放时间=文件大小÷比特率×8【公式2】
计算出播放时间了。
如果文件开始没有ID3 V2的头信息,那么一般MPEG的帧头位置是0,当然,具体还是要
根据帧头中的同步位(sync bit),共11位去定位找到帧头。
5.2解析MPEG帧头,获取必要信息
主要是根据帧头格式,解析出MPEG的版本,MPEG的Layer,以及采样率,比特率等信
息,用于后面的解码和计算播放时长。
5.3判断是VBR还是CBR,根据公式计算播放时间
解析完MPEG头之后,按照如下步骤去判断是CBR还是VBR,并计算出播放时长:
5.3.1定位出Xing头
根据:
XING头位置=MPEG头位置+4+边信息大小【公式4】
计算定位到XING头所在位置。上式中:
MPEG头位置:
如果没有ID3 V2这类的信息的话,那么MPEG头位置就是文件的最开始,即0的位置。
MPEG帧头大小:
固定的32 bit=4字节,所以加4.
边信息大小:
5.3.2 如果有,解析Xing头,并计算播放时间
VBR文件播放总时间=总的帧数×每一帧的采样个数÷比特率【公式3】
计算出播放时间长度。
其中:
总的帧数(Number of Frames):
可以通过解析XING头,找出里面总帧数(Frames),这个字段,一般都是存在的。
每一帧的采样个数(Samples Per Frame):
根据前面解析MPEG,找到MPEG的版本,以及其实哪个Layer,然后根据表3.2.3每帧
的采样数,得到,每一帧有多少个采样。
比特率(Sampling Rate):
根据前面解析MPEG,找到4比特大小的比特率索引,然后根据表3.2.2比特率(单位:
Kbit/sec),得到此比特率大小。
5.3.3如果没XING头,定位出VBRI头位置,找VBRI头
如果找到,解析VBRI,然后和XING头算法类似,得到需要的值,再根据【公式3】计算
出播放时间长度。
5.3.4如果都没找到,说明是CBR,则计算CBR的播放时间
Xing和VBRI都无,则是CBR,然后就可以用
帧大小=((每帧的采样数÷8×比特率)÷采样率)+填充大小【公式1】
播放时间=文件大小÷比特率×8【公式2】
计算出播放时间长度了。
其中【公式1】中所涉及到的:
每帧的采样数(Samples Per Frame):同上,可根据MPEG头解析出来。
比特率(Bitrate):
同上,可根据MPEG头解析出来。
采样率(Sampling Rate):
根据MPEG头中解析出来的采样率索引,然后查表:表3.2.4 MPEG不同版本对应的采样
率,即可。
填充大小(Padding Size):
根据MPEG帧头中的Padding位得知是0还是1。多数MP3,都没有padding,即为0.
计算出上面几个值后,可以根据:
帧大小=((每帧的采样数÷8×比特率)÷采样率)+填充大小【公式1】
计算出帧大小,然后再去计算:
文件大小(File Size):
这个自己计算就可以得到,我的理解是:
文件大小=总文件大小–头信息
这里的头信息,指的是ID3 V1或ID3 V2之类的头。
剩下的,总文件大小,这个不用多解释吧,就是整个读取出来的文件大小。
然后,就可以根据:
播放时间=文件大小÷比特率×8【公式2】
计算出播放时间了。
相关文章推荐
- MP3格式分析 计算CBR和VBR的MP3文件的播放时间的步骤
- MPEG简介 + 如何计算CBR 和VBR的MP3的播放时间
- 关于MP3文件播放时间的计算
- 关于MP3文件播放时间的计算
- MPEG简介 + 如何计算CBR/VBR MP3的播放时间
- MPEG简介 + 如何计算 CBR/VBR MP3 的播放时间
- MPEG简介 + 如何计算CBR/VBR MP3的播放时间-2
- VBR的MP3的播放时间(duration)计算方法
- MPEG简介 + 如何计算 CBR/VBR MP3 的播放时间 zt
- MPEG简介 + 如何计算CBR/VBR MP3的播放时间
- MPEG简介 + 如何计算CBR/VBR MP3的播放时间 - 1
- MP3文件如何计算总播放时间
- C#获取音频文件(MP3等)播放时间长度的几种方式
- mp3文件总播放时长计算方法
- 获取MP3文件的播放时间
- FFMPEG 播放时间计算 AVRational 音视频同步问题分析
- 关于如何手动使安装MP3插件使Rhythmbox支持MP3格式音乐文件的播放
- html制作简单框架网页 实现自己的音乐驿站 操作步骤及源文件下载 (播放功能限mp3文件)
- C#获取音频文件(MP3等)播放时间长度的几种方式
- 实现php获取mp3文件元信息如播放时间歌曲作者等