我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:大家发高手网 > 段映射 >

在二进制文件查看下如何辨别MP3是VBR格式的?

归档日期:05-13       文本归类:段映射      文章编辑:爱尚语录

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  简单的说,MP3就是一种音频压缩技术,由于这种压缩方式的全称叫MPEG Audio Layer3,所以人们把它简称为MP3。

  MP3是利用 MPEG Audio Layer 3 的技术,将音乐以1:10 甚至 1:12 的压缩率,压缩成容量较小的file,换句话说,能够在音质丢失很小的情况下把文件压缩到更小的程度。

  正是因为MP3体积小,音质高的特点使得MP3格式几乎成为网上音乐的代名词。每分钟音乐的MP3格式只有1MB左右大小,这样每首歌的大小只有3-4兆字节。

  VBR是动画媒体,可以用realone10播放,如果不能播放可在线下载解码文件。

  在播放以往常见的RM格式电影时,可以在播放器左下角看到225Kbps字样,这就是比特率。影片的静止画面和运动画面对压缩采样率的要求是不同的,如果始终保持固定的比特率,会对影片质量造成浪费。

  音频文件是MPEG1标准中的声音部分,也叫MPEG音频层,它根据压缩质量和编码复杂程度划分为三层,即

  次的编码.MPEG音频编码的层次越高,编码器越复杂,压缩率也越高,MP1和MP2的压缩率分别为4:1和

  的存储空间,而经过MP3压缩编码后只有1MB左右.不过MP3对音频信号采用的是有损压缩方式,为了降

  低声音失线采取了感官编码技术,即编码时先对音频文件进行频谱分析,然后用过滤器滤掉

  噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后形成具有较高压缩比的MP3文件,并使压

  验,这两个字节的是否存在决定于FRAMEHEADER信息的第16bit,为0则帧头后面无校验,为1则有校验,

  校验值长度为2个字节,紧跟在FRAMEHEADER后面,接着就是帧的实体数据了,格式如下:

  ID3V2 包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量.

  文件都是CBR的,而变化的bitrate的MP3文件称作VBR,每个FRAME的长度都可能是变化的.下面是CBR

  1)CBR:固定位率的FRAME的大小也是固定的(公式如上所述),只要知道文件总长度,和帧长即可由播

  放每帧需26ms计算得出mp3播放的总时间,也可通过计数帧的个数控制快进,快退慢放等操作.

  小软件也可以进行VBR压缩,它们是否遵守这个约定,那就不得而知了),它存放在MP3文件中的第一个

  有效FRAME里,它标识了这个MP3文件是VBR的.同时第一个FRAME里存放了MP3文件的FRAME的总个数,

  这就很容易获得了播放总时间,同时还有100个字节存放了播放总时间的100个时间分段的FRAME的INDEX,

  只要前后处理少数的FRAME,就能快速找出我们需要快进的FRAME头,可参考下文:

  ID3V1比较简单,它是存放在MP3文件的末尾,用16进制的编辑器打开一个MP3文件,查看其末尾

  ID3V1的各项信息都是顺序存放,没有任何标识将其分开,比如标题信息不足30个字节,则使用0

  ID3V2到现在一共有4个版本,但流行的播放软件一般只支持第3版,既ID3v2.3.由于ID3V1记录

  在MP3文件的末尾,ID3V2就只好记录在MP3文件的首部了(如果有一天发布ID3V3,真不知道该记录在哪

  里).也正是由于这个原因,对ID3V2的操作比ID3V1要慢.而且ID3V2结构比ID3V1的结构要复杂得多,

  每个ID3V2.3的标签都一个标签头和若干个标签帧或一个扩展标签头组成.关于曲目的信息如标题,作者

  等都存放在不同的标签帧中,扩展标签头和标签帧并不是必要的,但每个标签至少要有一个标签帧.标签

  char Flag; /*存放标志的字节,这个版本只定义了三位,稍后详细解说*/

  char Size[4]; /*标签大小,包括标签头的10个字节和所有的标签帧的大小*/

  a -- 表示是否使用Unsynchronisation(这个单词不知道是什么意思,字典里也没有找到,一般不设置)

  b -- 表示是否有扩展头部,一般没有(至少Winamp没有记录),所以一般也不设置

  c -- 表示是否为测试标签(99.99%的标签都不是测试用的啦,所以一般也不设置)

  计算大小时要将0去掉,得到一个28位的二进制数,就是标签大小(不懂为什么要这样做),计算公式如

  每个标签帧都有一个10个字节的帧头和至少一个字节的不固定长度的内容组成.它们也是顺序存放在文件

  中,和标签头和其他的标签帧也没有特殊的字符分隔.得到一个完整的帧的内容只有从帧头中的到内容大

  char FrameID[4]; /*用四个字符标识一个帧,说明其内容,稍后有常用的标识对照表*/

  TRCK=音轨 格式:N/M 其中N为专集中的第N首,M为专集中共M首,N和M为ASCII码表示的数字

  只定义了6位,另外的10位为0,但大部分的情况下16位都为0就可以了.格式如下:

  c -- 只读标志,设置时认为此帧不能修改(但我没有找到一个软件理会这个标志)

  值得一提的是winamp在保存和读取帧内容的时候会在内容前面加个0,并把这个字节计算在帧内容的

本文链接:http://buffaloruse.net/duanyingshe/363.html