MP3的播放时间计算方法
如何计算MP3总时长的问题(二)

如何计算MP3总时长的问题(⼆)接着上⼀次的往下写2、Mp3的帧详解 每⼀帧其实包括帧头,附加信息,主数据,其实我们只要找到帧头,帧头中所包含的数据就能让我们掌控这⼀帧的信息,帧头固定4个字节(32bit),格式如下 AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM 下⾯是就是每个位置代表的含义: 标识长度含义⽰例A11⽤于同步帧,找到此帧头(所有位均置 1)11111111111B2⾳频版本 ID00 - 版本是 MPEG 2.5 (MPED-2 的⾮官⽅扩展版本)01 – 保留10 – 版本是 MPEG 2 (ISO/IEC 13818-3)11 – 版本是 MPEG 1 (ISO/IEC 11172-3) 通过ID查表得其他信息11C2Layer 的索引00 – 保留01 - Layer III10 - Layer II11 - Layer I01D1保护位1 – ⽆ CRC 0 – ⽤ 16位的 CRC保护下⾯的帧头1E4⽐特率索引(查表)1001 F2采样率索引(查表)10 G1填充位,如果为1,计算帧长时,要多加11H1私有位 (仅⽤于标⽰性的)1I2声道的模式00 – ⽴体声01 – 混合⽴体声10 – 双声道 (两个单声道)11 – ⼀个声道 (单声道)01J2联合⽴体声(joint stereo) 采⽤联合⽴体声编码⽅式的两个声道具有关联性。
例如MS_stereo将两个声道相加、相差后处理,相减后去掉了左右声道相同的成份,后续的压缩可得到更⾼的压缩率。
10K1版权保护,0=no 1=yes1 L1原始版本,0=no 1=yes0M1预加重 00 - none01 - 50/15 ms10 - reserved11 - CCIT J.17011)⽐特率其中E和F位置的值,是通过mpeg ID和layer索引查标准的值,我写成了⼀个数组,直接查表得到⽐特率int bitrate[5][15] = {/* MPEG-1 */{ 0, 32000, 64000, 96000, 128000, 160000, 192000, 224000, /* Layer I */256000, 288000, 320000, 352000, 384000, 416000, 448000 },{ 0, 32000, 48000, 56000, 64000, 80000, 96000, 112000, /* Layer II */128000, 160000, 192000, 224000, 256000, 320000, 384000 },{ 0, 32000, 40000, 48000, 56000, 64000, 80000, 96000, /* Layer III */112000, 128000, 160000, 192000, 224000, 256000, 320000 },/* MPEG-2 ,MPEG-2.5 */{ 0, 32000, 48000, 56000, 64000, 80000, 96000, 112000, /* Layer I */128000, 144000, 160000, 176000, 192000, 224000, 256000 },{ 0, 8000, 16000, 24000, 32000, 40000, 48000, 56000, /* Layer */64000, 80000, 96000, 112000, 128000, 144000, 160000 } /* II & III */};2)采样频率:int samplingrate[4][3] = { //value s are in Hz{11025 , 12000 , 8000}, //MPEG Version 2.5{0,0,0}, //reserved{22050, 24000, 16000}, //MPEG Version 2 (ISO/IEC 13818-3){44100, 48000, 32000} //MPEG Version 1 (ISO/IEC 11172-3)};3)每帧持续时间在这⾥在介绍⼀个⽐较重要的概念那就是,每帧持续时间,MP3有⼀个特殊性,那就是每帧持续时间是固定的:每帧持续时间(毫秒) = 每帧采样数 / 采样频率 * 1000我们从第⼀帧的帧头可以得⾳频版本 ID和layer版本,从⽽可以确定每帧采样个数mpeg 1 mpeg 2 mpeg 2.5layer I 384 384 384layer II 1152 1152 1152layer III 1152 576 576现在我们应该很清楚的知道,为什么我们只需要知道MP3是mpeg1的layerIII层的原因了;(但是按照我现在的理解只要是layer III的就是MP3,呵呵,可以讨论)(写这个有点慢,因为不会⽤,不知道咋添加表格,不习惯)4)计算总时长下⾯我们来看计算时间的公式:播放时间 = 总帧bytes ÷ ⽐特率 × 8000⽐特率:查表可得到;总帧bytes:简单的看就是,总⽂件的⼤⼩-ID3信息,总⽂件⼤⼩就是读取整个⽂件的⼤⼩,ID3就是之前说过的ID3V2和ID3V1,ID3V1在末尾处128个字节,ID3V2在⽂件开始为⽌,⼤⼩可以从标签头得到,之前讲过,这样我们就能准确的得到总帧bytes,我们就能计算出来mp3的总时长了.但是这只是对固定⽐特率(CBR)的MP3总时长的计算⽅式,对于变⽐特率(VBR)的MP3,由于每帧的⽐特率可能不同,⽤以上的公式就⽆法准确算出来mp3总时长,有些⽂档说可以计算平均⽐特率,但是这个估算值偏差有时候很⼤,下⼀次我来详细讲如果求变化⽐特率Mp3的总时长,牢牢记住上⾯的表格,⼀切的信息都能从那⾥来。
语音时间计算公式

计算声音文件大小[日期:2010-04-09] 来源:作者:鲁克营[字体:大中小]1.小明用电脑录制了自己演唱的一首歌,这首歌播放时间5分钟,采样频率为44.1kHZ,量化位数为16位,那么小明演唱的这首歌的数据量大约为多少?如果是双声道立体声则根据公式:数据量=(采样频率×采样位数×声道数×时间)/8得,数据量=[44.1×1000×16×2×(5×60)] /(8×1024×1024)=50.5MB如果是单声道则是50.5/2=25.25Mb计算声音文件大小的方法声卡对声音的处理质量可以用三个基本参数来衡量,即采样频率、采样位数和声道数。
采样频率是指单位时间内的采样次数。
采样频率越大,采样点之间的间隔就越小,数字化后得到的声音就越逼真,但相应的数据量就越大。
声卡一般提供11.025kHz、22.05kHz和44.1kHz等不同的采样频率。
采样位数是记录每次采样值数值大小的位数。
采样位数通常有8bits或16bits两种,采样位数越大,所能记录声音的变化度就越细腻,相应的数据量就越大。
采样的声道数是指处理的声音是单声道还是立体声。
单声道在声音处理过程中只有单数据流,而立体声则需要左、右声道的两个数据流。
显然,立体声的效果要好,但相应的数据量要比单声道的数据量加倍。
不经过压缩声音数据量的计算公式为:数据量(字节/秒)= 采样频率(Hz)⨯采样位数(bit)⨯声道数8其中,单声道的声道数为1,立体声的声道数为2。
应用举例【例1】请计算对于5分钟双声道、16位采样位数、44.1kHz采样频率声音的不压缩数据量是多少?解:根据公式:数据量=(采样频率×采样位数×声道数×时间)/8得,数据量=[44.1×1000×16×2×(5×60)] /(8×1024×1024)=50.47MB因此,声音的不压缩数据量约为50.47MB。
声音存储空间计算公式_音频中文件大小计算公式(转)

声音存储空间计算公式_音频中文件大小计算公式(转)音频文件的大小是由多个因素决定的,包括采样率、位深度、声道数和音频时长。
以下是计算音频文件大小的公式。
1. 采样率(Sample Rate):采样率表示在一秒钟内取样的次数,通常以赫兹(Hz)为单位。
常见的采样率有 44.1kHz、48kHz、96kHz等。
2. 位深度(Bit Depth):位深度表示每个取样的采样量,即每个取样的分辨率。
常见的位深度有 16 位、24 位、32 位等。
3. 声道数(Channels):声道数表示音频中同时传输的独立声音信道的数量。
常见的声道数有单声道(Mono)和立体声(Stereo)。
4. 音频时长(Duration):音频时长表示音频的播放时间,以秒为单位。
计算公式如下:
文件大小(FileSize)= 采样率(Sample Rate)* 位深度(Bit Depth)* 声道数(Channels)* 音频时长(Duration)/ 8
其中除以 8 是将结果从位(bit)转换为字节(Byte)。
举例:
假设有一段音频文件,采样率为44.1kHz,位深度为16位,声道数为立体声,音频时长为3分钟(180秒)。
文件大小=44.1kHz*16位*2*180秒
/8=44,100*16*2*180/8=31,536,000字节=30.04MB
因此,该音频文件的大小约为30.04MB。
需要注意的是,上述公式仅适用于未经过任何压缩的无损音频文件。
对于经过压缩的音频文件(如MP3、AAC),其压缩算法会对文件大小造成影响,所以计算结果可能会有偏差。
多媒体相关计算公式、定义汇总

数据传输速率(bit/s )=采样频率(Hz )x 量化位数(bit)x 声道数1.最高采样率=带宽/(量化位数x2)2.音频压缩数据比=压缩后音频数据量/压缩前音频数据量3.多媒体音频计算公式:数据量=秒(音频时间)*声道数(单声道为1,双声道为2)*采样位数*采样频率(Hz )/84.图像的数据量=图像的分辨率*图像深度/85.图像分辨率是指一幅图像横向和纵向的像素点数相乘图像位深度是指 一个像素能表示的色彩范围,如明度范围,饱和度范围,色相表示等8:换算单位1B= 8byte 如果要换算成KB 就继续/1024计算机存储信息的最小单位,称之为位(bit ,又称比特),8个二进制位为一个字节,即8bit=1Byte一、多媒体应用相关计算公式二、多媒体应用相关定义媒体的定义1.多媒体的定义2.数字技术3.流媒体技术4.采样、量化、编码的定义5.掩蔽效应6.颜色的子采样7.超文本和超媒体8.第1-2章多媒体服务质量QOS1.RSVP 资源预留协议、RTSP 实时流媒体协议、RTP/RTCP:实时传输协议和实时传输控制协议2.计算机网络3.电路交换网络、分组交换网络4.综合业务数字网ISDN5.移动互联网的定义6.无线移动通信7.第3-4章多媒体相关计算公式、定义汇总2020年9月9日22:29视差立体显示技术和真立体显示技术1.CDN 内容分发网络和P2P 对等网络技术2.IPTV (交互式网络电视)3.搜索引擎4.数字版权管理DRM5.元数据6.数据加密技术、公钥技术设施安全技术PKI 、数字签名技术、数字水印技术7.第5-6章空间冗余、时间冗余、结构冗余、知识冗余、视觉冗余1.压缩编码的基础理论——信息论的观点2.熵编码、预测编码、变换编码3.4.信息可视化技术、人机交互技术、虚拟显示技术、增强显示技术5.VRML 的定义第7-8章1.信息系统的定义2.计算机病毒定义3.防火墙定义4.入侵检测5.信息化第9-10章。
声音时长怎么计算公式

声音时长怎么计算公式声音时长的计算公式。
声音时长是指声音在一定时间内持续的长度,通常以秒为单位。
在实际生活中,我们经常需要计算声音的时长,比如录制音频时需要知道录音的时长,或者播放音频时需要知道音频的时长。
声音时长的计算公式可以帮助我们准确地计算声音的时长。
声音时长的计算公式为:声音时长 = 声音的采样点数 / 采样率。
其中,声音的采样点数是指声音信号在一定时间内的采样点的数量,采样率是指每秒钟采样的次数。
采样率越高,声音的质量就越好,声音的时长也就越长。
在实际应用中,我们可以通过录制设备或者音频处理软件来获取声音的采样点数和采样率,然后通过上述公式来计算声音的时长。
下面我们将通过一个例子来说明声音时长的计算方法。
假设我们有一段音频,它的采样点数为10000,采样率为44100Hz。
我们可以通过上述公式来计算这段音频的时长:声音时长 = 10000 / 44100 ≈ 0.227秒。
因此,这段音频的时长约为0.227秒。
通过这个例子,我们可以看到声音时长的计算方法非常简单,只需要知道声音的采样点数和采样率即可。
除了使用上述公式来计算声音的时长之外,我们还可以通过音频处理软件来获取声音的时长。
大多数音频处理软件都提供了查看音频时长的功能,只需要打开音频文件即可查看音频的时长。
这种方法更加直观和方便,适用于不熟悉音频处理的用户。
在实际生活中,声音时长的计算公式可以帮助我们更好地管理和处理音频文件。
比如在录制音频时,我们可以根据声音时长来控制录制的时长,以免录制过长或者过短;在播放音频时,我们可以根据声音时长来控制播放的时长,以便更好地控制节奏和速度。
总之,声音时长的计算公式是非常实用的,它可以帮助我们准确地计算声音的时长,从而更好地管理和处理音频文件。
希望通过本文的介绍,读者们能够更加了解声音时长的计算方法,从而更好地应用于实际生活中。
MP3的播放时间的计算公式及XING和VBRI头介绍

MP3的播放时间的计算公式及XING和VBRI头介绍4 MP3的播放时间的计算公式及XING和VBRI头介绍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的头这个东西,其放在第一帧帧头的后面的。
多媒体相关计算公式、定义汇总

多媒体相关计算公式、定义汇总数据传输速率(bit/s )=采样频率(Hz )x 量化位数(bit)x 声道数1.最高采样率=带宽/(量化位数x2)2.音频压缩数据比=压缩后音频数据量/压缩前音频数据量3.多媒体音频计算公式:数据量=秒(音频时间)*声道数(单声道为1,双声道为2)*采样位数*采样频率(Hz )/84.图像的数据量=图像的分辨率*图像深度/85.图像分辨率是指一幅图像横向和纵向的像素点数相乘图像位深度是指一个像素能表示的色彩范围,如明度范围,饱和度范围,色相表示等8:换算单位1B= 8byte 如果要换算成KB 就继续/1024计算机存储信息的最小单位,称之为位(bit ,又称比特),8个二进制位为一个字节,即8bit=1Byte一、多媒体应用相关计算公式二、多媒体应用相关定义媒体的定义1.多媒体的定义2.数字技术3.流媒体技术4.采样、量化、编码的定义5.掩蔽效应6.颜色的子采样7.超文本和超媒体8.第1-2章多媒体服务质量QOS1.RSVP 资源预留协议、RTSP 实时流媒体协议、RTP/RTCP:实时传输协议和实时传输控制协议2.计算机网络3.电路交换网络、分组交换网络4.综合业务数字网ISDN5.移动互联网的定义6.无线移动通信7.第3-4章多媒体相关计算公式、定义汇总2020年9月9日22:29视差立体显示技术和真立体显示技术1.CDN 内容分发网络和P2P 对等网络技术2.IPTV (交互式网络电视)3.搜索引擎4.数字版权管理DRM5.元数据6.数据加密技术、公钥技术设施安全技术PKI 、数字签名技术、数字水印技术7.第5-6章空间冗余、时间冗余、结构冗余、知识冗余、视觉冗余1.压缩编码的基础理论——信息论的观点2.熵编码、预测编码、变换编码3.4.信息可视化技术、人机交互技术、虚拟显示技术、增强显示技术5.VRML 的定义第7-8章1.信息系统的定义2.计算机病毒定义3.防火墙定义4.入侵检测5.信息化第9-10章。
声音数据传输量的计算公式

声音数据传输量的计算公式随着科技的不断发展,声音数据传输量的计算公式也成为了一个备受关注的话题。
声音数据传输量是指在一定时间内传输的声音数据的大小,通常以比特(bit)为单位进行计量。
在实际应用中,我们经常需要计算声音数据的传输量,以便确定网络带宽的需求、存储空间的需求等。
本文将介绍声音数据传输量的计算公式,并探讨其在实际应用中的意义。
首先,我们需要了解声音数据的基本单位。
声音数据通常以比特(bit)为单位进行计量,1比特可以表示两种状态,通常用0和1来表示。
在数字音频中,声音信号会被采样成数字信号,每个采样点会被编码成一定数量的比特。
常见的声音数据编码格式包括PCM、MP3、AAC等,它们在编码时会使用不同的比特率(bit rate)来表示每秒钟传输的比特数量。
接下来,我们来推导声音数据传输量的计算公式。
假设一个声音文件的比特率为R(单位为比特/秒),持续时间为T秒,则声音数据传输量D可以表示为:D = R T。
这个公式很容易理解,它表示了在一定时间内传输的声音数据的大小。
比特率R表示了每秒钟传输的比特数量,而持续时间T表示了传输的时间长度,将它们相乘即可得到声音数据传输量D。
在实际应用中,我们可以利用这个公式来计算网络带宽的需求。
例如,如果我们需要传输一个持续时间为T秒的声音文件,其比特率为R,那么我们可以通过计算D来确定所需的网络带宽。
另外,对于存储空间的需求也可以通过这个公式来计算。
如果我们需要存储一个持续时间为T秒的声音文件,其比特率为R,那么我们可以通过计算D来确定所需的存储空间。
除了声音数据传输量的计算公式,我们还可以通过一些实际案例来进一步理解其意义。
例如,在音频流媒体应用中,我们需要根据用户的网络带宽来动态调整音频的比特率,以确保顺畅的播放体验。
通过计算声音数据传输量,我们可以更好地了解用户的网络带宽需求,从而进行合理的带宽分配。
另外,在音频存储应用中,我们也需要根据声音数据传输量来确定所需的存储空间,以确保能够完整地保存音频文件。
DTS和PTS的解释

DTS和PTS的解释FFmpeg里有两种时间戳:DTS(Decoding Time Stamp)和PTS(Presentation Time Stamp)。
顾名思义,前者是解码的时间,后者是显示的时间。
要仔细理解这两个概念,需要先了解FFmpeg中的packet和frame的概念。
FFmpeg中用AVPacket结构体来描述解码前或编码后的压缩包,用AVFrame 结构体来描述解码后或编码前的信号帧。
对于视频来说,AVFrame就是视频的一帧图像。
这帧图像什么时候显示给用户,就取决于它的PTS。
DTS是AVPacket 里的一个成员,表示这个压缩包应该什么时候被解码。
如果视频里各帧的编码是按输入顺序(也就是显示顺序)依次进行的,那么解码和显示时间应该是一致的。
可事实上,在大多数编解码标准(如H.264或HEVC,当出现B帧的时候)中,编码顺序和输入顺序并不一致。
于是才会需要PTS和DTS这两种不同的时间戳。
视频帧根据帧率,在同一时间基上累加,例如,25帧每秒,则按毫秒计,1000/25=40ms,在首帧pts上进行累加音频根据采样率及样本个数,在同一时间基上累加,例如,1024个样本,44100采样率,毫秒计,1000*1024/44100=23.21995464852607709750566893424ms基本理论是这样,但实际的同步远没有这么简单,掉线,断网,弱网,丢帧,跳帧,等一系列均对你的同步进行阻挠,需要根据具体情况做同步,坐等高手给出较为鲁棒的同步措施。
一固定帧率1. 视频时间戳pts = inc++ *(1000/fps);其中inc是一个静态的,初始值为0,每次打完时间戳inc加1.在ffmpeg,中的代码为pkt.pts= m_nVideoTimeStamp++ * (m_VCtx->time_base.num * 1000 / m_VCtx->time_base.den);2. 音频时间戳pts = inc++ * (frame_size * 1000 / sample_rate)在ffmpeg中的代码为pkt.pts= m_nAudioTimeStamp++ * (m_ACtx->frame_size * 1000 / m_ACtx->sample_rate);采样频率是指将模拟声音波形进行数字化时,每秒钟抽取声波幅度样本的次数。
MP3文件格式

一.概述:MP3文件是由帧(frame)构成的,帧是MP3文件最小的组成单位。
MP3的全称应为MPEG1 Layer-3音频文件,MPEG(Moving Picture Experts Group)在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG音频文件是MPEG1标准中的声音部分,也叫MPEG音频层,它根据压缩质量和编码复杂程度划分为三层,即Layer-1、Layer2、Layer3,且分别对应MP1、MP2、MP3这三种声音文件,并根据不同的用途,使用不同层次的编码。
MPEG音频编码的层次越高,编码器越复杂,压缩率也越高,MP1和MP2的压缩率分别为4:1和6:1-8:1,而MP3的压缩率则高达10:1-12:1,也就是说,一分钟CD音质的音乐,未经压缩需要10MB 的存储空间,而经过MP3压缩编码后只有1MB左右。
不过MP3对音频信号采用的是有损压缩方式,为了降低声音失真度,MP3采取了“感官编码技术”,即编码时先对音频文件进行频谱分析,然后用过滤器滤掉噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后形成具有较高压缩比的MP3文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效果。
二.整个MP3文件结构:MP3文件大体分为三部分:TAG_V2(ID3V2),Frame, TAG_V1(ID3V1)ID3V2包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。
Frame...Frame一系列的帧,个数由文件大小和帧长决定每个FRAME的长度可能不固定,也可能固定,由位率bitrate决定每个FRAME又分为帧头和数据实体两部分帧头记录了mp3的位率,采样率,版本等信息,每个帧之间相互独立ID3V1包含了作者,作曲,专辑等信息,长度为128BYTE。
三.MP3的FRAME格式:每个FRAME都有一个帧头FRAMEHEADER,长度是4BYTE(32bit),帧头后面可能有两个字节的CRC校验,这两个字节的是否存在决定于FRAMEHEADER信息的第16bit,为0则帧头后面无校验,为1则有校验,校验值长度为2个字节,紧跟在FRAMEHEADER后面,接着就是帧的实体数据了,格式如下:FRAMEHEADERCRC(free)MAIN_DATA4 BYTE0 OR 2 BYTE长度由帧头计算得出1.帧头FRAMEHEADER格式如下:AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM13个帧头字符的含义如下:SignLength(bits)Position(bits)DescriptionA11(31-21)Frame sync (all bits set)B2MPEG Audio version00 - MPEG Version 2.501 - reserved10 - MPEG Version 211 - MPEG Version 1C2(18,17)Layer description00 - reserved01 - Layer III10 - Layer II11 - Layer ID1(16)Protection bit0 - Protected by CRC (16bit crc follows header)1 - Not protectedE4(15,12)Bitrate indexbitsV1,L1V1,L2V1,L3V2,L1V2,L2V2,L30000freefreefreefreefreefree32323232328 (8)0010 644840644816 (16)0011 965648965624 (24)0100 128 6456 128 6432 (32)0101 160 8064 160 8064 (40)0110 192 96809680 (48)01112241129622411256 (56)100025612811225612864 (64)1001288160128288160128 (80)1010320192160320192160 (96)1011352224192352224112 (112)384256224384256128 (128)1101416320256416320256 (144)1110448384320448384320 (160)1111badbadbadbadbadbadNOTES: All values are in kbpsV1 - MPEG Version 1V2 - MPEG Version 2 and Version 2.5L1 - Layer IL2 - Layer IIL3 - Layer III"free" means variable bitrate."bad" means that this is not an allowed valueThe values in parentheses are from different sources which claim that those values are valid for V2,L2 and V2,L3. If anyone can confirm please let me know.F2(11,10)Sampling rate frequency index (values are in Hz)bitsMPEG1MPEG2MPEG2.50044100220501102501480002400012000103200016000800011reserv.reserv.reserv.G1(9)Padding bit0 - frame is not padded1 - frame is padded with one extra bitH1(8)Private bit (unknown purpose)I2(7,6)Channel Mode00 - Stereo01 - Joint stereo (Stereo)10 - Dual channel (Stereo)11 - Single channel (Mono)J2(5,4)Mode extension (Only if Joint stereo)valueIntensity stereoMS stereo00offoff01onoff10offon11ononK1(3)Copyright0 - Audio is not copyrighted1 - Audio is copyrighted1(2)Original0 - Copy of original media1 - Original mediaM2(1,0)Emphasis00 - none01 - 50/15 ms10 - reserved11 - CCIT J.171)每帧的播放时间:无论帧长是多少,每帧的播放时间都是26ms;2)数据帧大小:FrameSize = (((MpegVersion == MPEG1 ? 144 : 72) * Bitrate) / SamplingRate) + PaddingBit例如: Bitrate =128000, a SamplingRate =44100, and PaddingBit = 1FrameSize = (144 * 128000) / 44100 + 1 = 417 bytes2.MAIN_DATA:MAIN_DAT A部分长度是否变化决定于FRAMEHEADER的bitrate是否变化,一首MP3歌曲,它有三个版本:96Kbps(96千比特位每秒)、128Kbps和192Kbps。
DTS和PTS的解释

DTS和PTS的解释FFmpeg里有两种时间戳:DTS(Decoding Time Stamp)和PTS(Presentation Time Stamp)。
顾名思义,前者是解码的时间,后者是显示的时间。
要仔细理解这两个概念,需要先了解FFmpeg中的packet和frame的概念。
FFmpeg中用AVPacket结构体来描述解码前或编码后的压缩包,用AVFrame 结构体来描述解码后或编码前的信号帧。
对于视频来说,AVFrame就是视频的一帧图像。
这帧图像什么时候显示给用户,就取决于它的PTS。
DTS是AVPacket 里的一个成员,表示这个压缩包应该什么时候被解码。
如果视频里各帧的编码是按输入顺序(也就是显示顺序)依次进行的,那么解码和显示时间应该是一致的。
可事实上,在大多数编解码标准(如H.264或HEVC,当出现B帧的时候)中,编码顺序和输入顺序并不一致。
于是才会需要PTS和DTS这两种不同的时间戳。
视频帧根据帧率,在同一时间基上累加,例如,25帧每秒,则按毫秒计,1000/25=40ms,在首帧pts上进行累加音频根据采样率及样本个数,在同一时间基上累加,例如,1024个样本,44100采样率,毫秒计,1000*1024/44100=23.21995464852607709750566893424 ms基本理论是这样,但实际的同步远没有这么简单,掉线,断网,弱网,丢帧,跳帧,等一系列均对你的同步进行阻挠,需要根据具体情况做同步,坐等高手给出较为鲁棒的同步措施。
一固定帧率1. 视频时间戳pts = inc++ *(1000/fps); 其中inc是一个静态的,初始值为0,每次打完时间戳inc加1.在ffmpeg,中的代码为pkt.pts= m_nVideoTimeStamp++ * (m_VCtx->time_base.num * 1000 / m_VCtx->time_base.den);2. 音频时间戳pts = inc++ * (frame_size * 1000 / sample_rate)在ffmpeg中的代码为pkt.pts= m_nAudioTimeStamp++ * (m_ACtx->frame_size * 1000 / m_ACtx->sample_rate);采样频率是指将模拟声音波形进行数字化时,每秒钟抽取声波幅度样本的次数。
Delphi判断一个文件是否是MP3

Delphi判断一个文件是否是MP3MP3文件是流媒体文件,没有文件头,要判断是不是MP3文件只能分析帧头数据。
MP3文件还可能存在TAG,也可能不存在TAG。
如果存在TAG,其格式可能是ID3V1或者是ID3V2或者是2者都有。
如果是ID3V1,它将存在于MP3文件的末尾,占据128个字节;如果是ID3V2,它在MP3文件的头部,大小不固定,要获取MP3文件的各种信息,不但要判断文件是否含有TAG,还要判断每一帧的数据。
下面将用Delphi实现对上述三种格式的判断。
1.ID3V1:包含128个字节,结构如下:_TTAGV1INFO = record// TAG三个字母,如果有这三个字母则是ID3V1,如果不是则没有Indentify: array [0..2] of Char;// 歌曲名,30个字节Title: array [0..29] of Char;// 歌手名,30个字节Artist: array [0..29] of Char;// 所属唱片,30个字节Album: array [0..29] of Char;// 年,4个字节Year: array [0..3] of Char;// 注释,28个字节Comment: array [0..29] of Char;// 保留位,3个字节Reserved: Char;end;只要判断文件末尾第128个字节开始3个字节是否含有“TAG”标志即可,如含有,则表示有ID3V1,没有则表示没有该TAG。
代码如下:function TForm1.tagV1Check(fileName: string): Boolean;varfsMP3: TFileStream;tagInfo: _TTAGV1INFO;beginresult := False;fsMP3 := TFileStream.Create(fileName, fmOpenRead);tryfsMP3.Position := fsMP3.Size - 128;fsMP3.Read(tagInfo, SizeOf(tagInfo));if tagInfo.Indentify = 'TAG' thenresult := True;finallyFreeAndNil(fsMP3);end;end;2.ID3V2:这个比ID3V1要复杂些,长度并不固定,它的结构大体如下:_TTAGV2INFO = record// ID3v2的标识位,3字节Indentify: array [0..2] of Char;// 版本号,1字节Version: Byte;// 副版本号1字节Sub_Version: Byte;// 存放标志(Flag) 的3位,但只记录1字节Flag: Byte;// 标签大小,4字节(标签头的10个字节不计算在内)Size: array [0..3] of Byte;end;含义:①ID3v2的标识位,3字节,是“ID3”三个字母,如果没有这三个字母,则没有ID3V2信息②版本号,1字节,ID3V2的3版,是“3”③副版本号1字节,此版本记录,是“0”④存放标志(Flag) 的3位,但只记录1字节,标志字节一般为0,格式:abc00000,“a 位”表示不使用同步;“b位”表示否使用展扩头,展扩头一般不用;“c位”表示这个标签是否是个供测试用的标签(一般不是,也不置)。
歌曲文件大小计算方法(一)

歌曲文件大小计算方法(一)歌曲文件大小计算方法引言作为一名资深的创作者,我们经常需要对歌曲文件进行大小计算。
本文将详细介绍各种常见的歌曲文件大小计算方法,帮助您更好地管理和优化歌曲库。
方法一:基于比特率的计算1.首先,我们需要知道歌曲的比特率(bitrate),它表示每秒传输的比特数。
常见的比特率有128kbps、192kbps、320kbps等。
2.接下来,我们需要确定歌曲的时长,以秒为单位。
3.歌曲文件大小(单位为字节)的计算公式为:文件大小 = 比特率 * 时长 / 8方法二:基于采样率和位深的计算1.采样率(sample rate)表示每秒钟采样的次数,常见的采样率有、48kHz等。
2.位深(bit depth)表示每个采样点的位数,常见的位深有16位、24位等。
3.歌曲文件大小的计算公式为:文件大小 = 采样率 * 位深 * 时长 / 8方法三:基于压缩算法的计算1.常见的歌曲文件压缩算法有MP3、AAC、FLAC等。
2.不同的压缩算法会对歌曲文件进行不同程度的压缩,从而影响文件大小。
3.使用压缩算法计算歌曲文件大小时,需要考虑算法的压缩比率(compression ratio)。
4.歌曲文件大小的计算公式为:文件大小 = 原始大小 * 压缩比率方法四:实际文件大小的计算1.当我们获取到歌曲文件时,可以直接查看其实际文件大小。
2.实际文件大小往往会受到其他因素的影响,如文件格式、附加信息等。
结论选择合适的方法来计算歌曲文件大小可以帮助我们更好地管理和优化歌曲库。
根据不同的需求,我们可以选择基于比特率、采样率和位深、压缩算法或实际文件大小来进行计算。
在实际应用中,可以根据具体情况选择最合适的方法,以获得准确的结果。
以上就是关于歌曲文件大小计算方法的详细介绍。
希望对您有所帮助!。
用停表测量歌曲时长的实验

用停表测量歌曲时长的实验
停表测量歌曲时长是一种实用的实验方法,用来测量歌曲的实际播放时间,从而知道仪器的性能参数。
实验原理:在测量歌曲时长的实验中,研究者通过使用停表来测量歌曲播放的实际时长。
停表将持续计时,直至输入的歌曲播放完毕。
停表可以实时读取时间值,从而反映出歌曲的实际播放时长。
实验材料:在进行实验之前,需要准备如下材料:停表,歌曲,电脑或播放器。
实验步骤:(1)首先,在播放器上播放歌曲。
(2)用停表测量歌曲的实际播放时长,时间分辨率是1分钟,即在歌曲播放完毕时,停表可以显示出总共播放的时长。
实验结果:经过实验,可以获得歌曲实际播放时长。
实验结论:使用停表测量歌曲时长的实验,可以更有效地确定歌曲的实际播放时长,为计算机音乐研究提供有效的参考。
MP3计算播放时间

主题:MPEG简介 + 如何计算CBR/VBR MP3的播放时间版本:20090919作者:crifan邮箱:green-waste(At)声明:1.本文所写内容,多数整理自自互联网,版权归原作者所有。
2.笔者知识有限,文中难免有误,欢迎批评指正。
3.欢迎盗版,盗版不究。
--------------------------------------无敌分割线-------------------------------------------【此文目的】1. 了解MPEG相关知识2. 了解MP3的常见术语含义3. 详解VBR MP3的帧头格式及含义4. 搞懂如何去计算CBR和VBR的MP3文件的播放时间(duration)【目录】1.MPEG的相关知识 (2)1.1 MPEG是啥 (3)1.2为啥没了MPEG-3 (3)1.3 MPEG2.5又是啥 (3)1.4 MPEG中不同帧之间的关系 (3)1.5 MPEG-1和MPEG-2音频特性 (4)1.5.1 MPEG-1音频(ISO/IEC 11172-3) (4)1.5.2 MPEG-2音频(ISO/IEC 13813-3) (4)1.6 什么是ISO/IEC 11172-3和ISO/IEC 13818-3 (4)2 MP3中常见的术语 (5)2.1 啥叫MP3 (5)2.2 什么是LSF (5)2.3 什么是帧(frame) (5)2.4 什么是帧头(header) (5)2.5 啥是CBR和VBR (5)2.6 比特率(bitrate) (6)2.7 边信息(side information) (6)3 VBR MP3的帧头格式详解 (6)3.1 VBR MP3的帧头类型 (6)3.2 MPEG音频帧格式及其含义介绍 (6)4 MP3的播放时间的计算公式及XING和VBRI头介绍 (9)4.1 CBR的MP3的播放时间(duration)计算公式 (9)4.2 VBR的MP3的播放时间(duration)计算公式 (9)4.2.1 Xing TAG / Xing头(header) (9)4.2.2 VBRI头(header) (10)5 计算CBR和VBR的MP3文件的播放时间的步骤 (11)5.1 定位到MPEG的帧头的位置 (11)5.2 解析MPEG帧头,获取必要信息 (11)5.3 判断是VBR还是CBR,根据公式计算播放时间 (11)5.3.1 定位出Xing头 (12)5.3.2 如果有,解析Xing头,并计算播放时间 (12)5.3.3 如果没XING头,定位出VBRI头位置,找VBRI头 (12)5.3.4 如果都没找到,说明是CBR,则计算CBR的播放时间 (12)6 MP3的文件的内容组织结构 (13)7 后记 (14)8 文章引用 (15)【表格索引】表1 MPEG音频帧头的格式 (7)表2 比特率 (8)表3 每帧的采样数 (8)表4 MPEG不同版本对应的采样率 (8)表5 XING 头 (10)表6 VBRI头 (11)表7 Layer III的边信息(side information) (12)表8 MP3文件的内容组织结构 (14)1.MPEG的相关知识想要了解如何计算VBR的MP3的播放时间之前,要简单了解一些MP3相关的一些基本概念,主要是MPEG的相关知识和编解码的一些知识:1.1 MPEG是啥MPEG全名Moving Pictures Experts Group,动态图像专家组,简单说就是一个专家组,专门研究一些音视频规范的,所以才叫专家,不是我们国家的“砖家”哦。
MP3的播放时间计算方法

主题:MPEG简介 + 如何计算CBR/VBR MP3的播放时间 - 1版本:20100425作者:crifan邮箱:green-waste(At)声明:1.本文所写内容,多数整理自自互联网,版权归原作者所有。
2.笔者知识有限,文中难免有误,欢迎批评指正。
3.欢迎盗版,盗版不究。
【此文目的】1.了解MPEG相关知识2.了解MP3的常见术语含义3.详解VBR MP3的帧头格式及含义4.搞懂如何去计算CBR和VBR的MP3文件的播放时间(duration)1.MPEG的相关知识想要了解如何计算VBR的MP3的播放时间之前,要简单了解一些MP3相关的一些基本概念,主要是MPEG 的相关知识和编解码的一些知识:1.1 MPEG是啥MPEG全名Moving Pictures Experts Group,动态图像专家组,简单说就是一个专家组,专门研究一些音视频规范的,所以才叫专家,不是我们国家的“砖家”哦。
这个专家组是在ISO/IEC(International Standards Organization/International Electrotechnical Commission,国际标准化组织/国际电工委员会)联合指导下成立的。
这个组,专门去研究出一个数字音视频的压缩相关的规范,所以最后研究出适用于不同应用环境的N多规范。
和事物发展的过程类似,研究出这么多的规范也是,不同时期,不同的版本,针对不同的应用。
也是由简到繁。
并且,命名规则都是,按照阿拉伯数字从小到大的:MPEG 1,MPEG2,MPEG4,MPEG-7,最新版本,好像都有MPEG-21了。
1.2为啥没了MPEG-3估计有人纳闷了,为啥中间的MPEG3咋没了呢?是没MPEG3,当然,不是被刘谦变魔术变没了,而是由于当时设计者没有规划好,导致已经设计好的MPEG2,性能太好了,都能干本来打算让MPEG3干的活了,所以后来干脆就不去再设计MPEG3了,原定计划就取消了,也就没了MPEG3。
如何计算MP3总时长的问题(三)--对于变比特率MP3求总时长

如何计算MP3总时长的问题(三)--对于变⽐特率MP3求总时长 3、变⽐特率MP3总时长求解之前我们所讨论的都是对于⼀个固定⽐特率(CBR)的MP3进⾏求总时长,由于固定⽐特率的特殊性,很容易第⼀帧的帧头就能知道整个MP3的信息,但是对于变⽐特率(VBR)的MP3,⽐特率和帧长都不是固定的,所以我们就不能⽤之前的公式来计算总时长。
其实在第⼀帧的帧头后⾯还存着VBR的⼀些信息,⾥⾯存着⽂件长度,总帧数等信息,从⽽使我们很快算出变⽐特率的总时长,⽅法如下:1)XING头标志由于VBR是XING公司推出的算法,所以在MP3的第⼀帧⾥会有"XING"或者"Info"的关键字,具体格式位置长度(字节)含义04包含ASCII的字符XING或者Info,没有NULL结尾44标识位0x0001 - 存在总帧数(Frames)字段0x0002 - 存在⽂件⼤⼩(Bytes)字段0x0004 –存在 TOC字段0x0008 – 存在⾳频质量指⽰字段84若标识位存在总帧数,那么这四个字节就是总帧数124若标识位存在⽂件⼤⼩,那么这四个字节就是⽂件⼤⼩还有别的信息,这⾥不需要,我就不在这⾥说了。
2) VBRI头标志还有⼀种头也同样标识和XING类似,只是有"VBRI"的关键字,具体格式位置长度(字节)含义04包含ASCII的字符VBRI,没有NULL结尾104⽂件⼤⼩144总帧数我只写了对总时长有需要的位置,其他的暂时没⽤到,就不提了,不过可以讨论。
3)确定标志头位置知道的有这样的标志头可以帮助我们很快找到需要的信息,那么如何定位呢,公式如下:标志头位置 = MPEG 头位置 + MPEG帧头⼤⼩(4字节)+ 边信息⼤⼩对于边信息,我们可以根据头中所给J位置上2个字节得到mode = (header>>6)&0x03其中:'00' Stereo; '01' Joint Stereo (Stereo); '10' Dual channel (Two mono channels);'11' Single channel (Mono).MPEG 1 MPEG2/2.5Stereo ,Joint Stereo Dual channel 32 17Mono 17 9现在已经很清楚了,我们就能定位出来头标志,然后读出我们需要的总帧数,之前⼀届我已经介绍了每帧持续时间,因此VBR的MP3总时长(毫秒) = 总帧数*每帧持续时间到此不知道我讲的清楚不清楚,这也是我通过⾃⼰做,和看别⼈的⽂档总结的⼀些,希望能帮助到需要的⼈,有什么问题可以和我讨论。
如何计算VBRMP3的播放时间持续时间

如何计算VBRMP3的播放时间持续时间如何计算VBR MP3的播放时间/持续时间【未完待续】2009-09-01 18:26先聊几句闲话,最近遇到这个问题,百度找到的资料,极个别能说清楚一点的,最后还是找到了,很久之前看到的一个英文帖子,说的比较清楚,并且还有实例代码。
在此感谢之。
另外也有点无语,中文资料,的确是没几个人去说清楚。
而且,下列解释,主要也就是参考了这个帖子。
MPEG Audio Frame Header【MP3的一些基础知识】想要了解如何计算VBR的MP3的播放时间之前,要简单了解一些MP3文件的一些基本概念:1.帧:通俗点说,就是一段连续的数据块。
是MP3文件,也是其他很多音视频技术中的基本概念。
MP3是由很多很多个这样的帧所组成的。
2.帧头:数据帧的头。
也就是,专门在数据帧里面,有头部有一些数据,具体不同的位对应不同的含义,用于描述MP3文件的一些参数信息或者当前数据帧的信息。
用于解码。
3.采样率:每秒采样多少。
4.CBR和VBR:即Constantbitrate (CBR)固定(/不变)比特率,和Variable bitrate (VBR)不定比特率。
说的是MP3的比特率是否固定。
更详细的信息,请自己查找相关资料。
【CBR的MP3的播放时间计算方法】这个,网上资料相对多点,此处简单说一下我的理解,主要也就是翻译那个英文帖子了。
MP3播放时间=MP3的文件大小FileSize/帧大小FrameSize * 每一帧的时间SecPerFrame其中的Frame Size = ( (Samples Per Frame / 8 * Bitrate) /Sampling Rate) + Padding Size而其中的Samples Per Frame和bitrate以及Sampling Rate,Padding Size,都是可以直接从MPEG的帧头中,按照格式一点点分析出来的。
然后,对于MP3播放时间,就可以直接计算出来了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
主题:MPEG简介 + 如何计算CBR/VBR MP3的播放时间 - 1版本:20100425作者:crifan邮箱:green-waste(At)声明:1.本文所写内容,多数整理自自互联网,版权归原作者所有。
2.笔者知识有限,文中难免有误,欢迎批评指正。
3.欢迎盗版,盗版不究。
【此文目的】1.了解MPEG相关知识2.了解MP3的常见术语含义3.详解VBR MP3的帧头格式及含义4.搞懂如何去计算CBR和VBR的MP3文件的播放时间(duration)1.MPEG的相关知识想要了解如何计算VBR的MP3的播放时间之前,要简单了解一些MP3相关的一些基本概念,主要是MPEG 的相关知识和编解码的一些知识:1.1 MPEG是啥MPEG全名Moving Pictures Experts Group,动态图像专家组,简单说就是一个专家组,专门研究一些音视频规范的,所以才叫专家,不是我们国家的“砖家”哦。
这个专家组是在ISO/IEC(International Standards Organization/International Electrotechnical Commission,国际标准化组织/国际电工委员会)联合指导下成立的。
这个组,专门去研究出一个数字音视频的压缩相关的规范,所以最后研究出适用于不同应用环境的N多规范。
和事物发展的过程类似,研究出这么多的规范也是,不同时期,不同的版本,针对不同的应用。
也是由简到繁。
并且,命名规则都是,按照阿拉伯数字从小到大的:MPEG 1,MPEG2,MPEG4,MPEG-7,最新版本,好像都有MPEG-21了。
1.2为啥没了MPEG-3估计有人纳闷了,为啥中间的MPEG3咋没了呢?是没MPEG3,当然,不是被刘谦变魔术变没了,而是由于当时设计者没有规划好,导致已经设计好的MPEG2,性能太好了,都能干本来打算让MPEG3干的活了,所以后来干脆就不去再设计MPEG3了,原定计划就取消了,也就没了MPEG3。
看来这个MPEG3,待遇貌似不比胎死腹中好多少。
对于很多人误解的,以为MP3就是MPEG-3,也就更错的离谱了。
关于MP3的名称来历,下面会再解释。
1.3 MPEG2.5又是啥MPEG2.5,简单说就是出身不正,不是官方推出的规范。
MPEG 2.5是针对MPEG2的一个非官方的扩展版本,支持更低的采样率。
关于其更多解释,网上找到这些:MPEG声音标准提供三个独立的压缩层次:Layer I、Layer II和Layer III。
用户具体选哪个Layer,可以根据自己的要求,在权衡复杂性和声音质量之后,做出自己的选择。
A.Layer I的编码器最为简单,编码器的输出数据率为384 kb/s,主要用于小型数字盒式磁带(digital compact cassette,DCC)。
B.Layer II的编码器的复杂程度属中等,编码器的输出数据率为256 kb/s~192 kb/s,其应用包括数字广播声音(digital broadcast audio,DBA)、数字音乐、CD-I(compact disc-interactive)和VCD(video compact disc)等。
C.Layer III的编码器最为复杂,编码器的输出数据率为64 kb/s,主要应用于ISDN上的声音传输。
MPEG-1 Layer III支持的采样率为32,44.1,48khz,比特率支持32---320kbps MPEG-2 Layer III支持的采样率为16,22.05,24khz,比特率支持8---160kbpsFraunhofer对此又进行扩展,将原来MPEG-2所支持的低采样率再除以2,得到: 8, 11.025, 和 12 kHz,比特率跟MPEG-2相同,称为 "MPEG 2.5"。
1.4 MPEG中不同帧之间的关系对于Layer I和Layer II,不同的帧之间,是互相独立的。
也就意味着,你可以任意截取MPEG的音频文件,然后找到第一个正确的帧头,然后解码,然后接下来放余下的帧,这样都可以正确的播放。
而对于Layer III,所有帧不保证都是互相独立的。
由于可能用到“字节蓄水池(byte reservoir)”,即内部的一个数据缓存,这些帧,都是相关的,最差情况下,要连续缓冲保存9个帧,才能对第一帧解码。
1.5 MPEG-1和MPEG-2音频特性1.5.1 MPEG-1音频(ISO/IEC 11172-3)其描述了三层音频编码,具有如下特性:A.一个或两个音频声道B.采样率32KHz、44.1KHz或48KHzC.比特率从32Kbps到448KbpsD.每一层都有其自己的其他特点。
1.5.2 MPEG-2音频(ISO/IEC 13813-3)其包含了对MPEG-1的两种扩展。
通常称为MEGP-2/低采样率(LSF)和MPEG-2/多声道(Multichannel)。
1.5.2.1 MPEG-2/LSF的特性:A.一个或两个音频声道B.采样率只有MPEG-1的一半C.比特率从8Kpbs到256Kbps1.5.2.2 MPEG-2/多声道,的特性:A.多达5个全范围的音频声道和一个LFE(Low Frequency Enhancement,也叫做重低音)声道B.采样率和MPEG-1相同C.对于5.1声道,最高的比特率可达1Mpbs1.6 什么是ISO/IEC 11172-3和ISO/IEC 13818-3由于MPEG只是ISO/IEC下面的一个组织,所以,关于MPEG音频部分的规范,也多是出自ISO/IEC之手。
因此,ISO/IEC 11172和ISO/IEC 13818,其实就是MPEG1的音频部分和MPEG-2的别名。
另外,由于MPEG-1和MPEG-2,每个都分好几个部分,其中,第三部分是关于音频的。
所以,ISO/IEC 11172-3和ISO/IEC 13818-3,就分别对应着MPEG-1的音频,MPEG-2的音频,也就是我们常常提到的MPEG的音频文件所对应的规范。
2 MP3中常见的术语知道了MPEG的来龙去脉后,在了解MP3的播放时间如何计算之前,也要知道其他一些,和MP3相关的知识,和常见的术语:2.1 啥叫MP3注意,这个MP3,不是MPEG-3,但是为何叫MP3,是因为:MPEG规范中规定了,每一个版本的MPEG,比如MPEG1,MPEG2等,都有三种不同的Layer,不同Layer的序号命令是以罗马数字的,所以叫做Layer I, Layer II, Layer III。
其中,最常见的就是MPEG 1 的Layer III,就是众所周知的MP3。
根据事物发展由简到繁的规律,我们知道,Layer III,相对Layer I和Layer II,其有着更复杂的压缩算法。
正是其相对复杂,用了很多算法,比如声学上的掩蔽效应(masking effect),Huffman压缩等,使得尽可能保持音质的基础上,极大地减少了音频文件大小,也就是说,尽量让你听上去音频声音和音质都没啥变化,但是MP3的文件大小,相对于原先没处理的,或者其他格式的,比如WAV格式等,要小很多,方便大家互相传播交流。
这也是MP3如此流行的主要原因之一。
2.2 什么是LSFMPEG2/2.5 也常被简称为LSF(Low Sampling Frequencies),低采样率。
2.3 什么是帧(frame)通俗点说,就是一段连续的数据块。
对于MPEG音频文件本身,并没有什么文件头,而是由很多数据块所组成,这样的单个的数据块,就叫做一个(数据/音频)帧(frame)。
MP3文件,同理,由很多个帧所组成。
帧,也是其他很多音视频技术中的基本单位。
2.4 什么是帧头(header)每一个帧里面,包含了帧头和音频数据。
帧头,就是在帧的头部,有一定长度的数据,用于描述改帧音频的一些参数,用于解码器对此音频帧进行解码。
对于MPEG的帧头,是固定的32 比特,即4字节。
2.5 啥是CBR和VBRCBR(Constant bitrate)固定(/不变)比特率,VBR(Variable bitrate ),不定(/可变)比特率,变与不变,指的是MP3的比特率是否固定。
音频文件可以被编码成CBR或VBR。
VBR意思就是,每一帧的比特率不同。
由于VBR可以在需要的时候,采用高比特率,所以,一般来说,VBR的音质比CBR的要好。
很多种音视频文件,都可以按照VBR来压缩,比如MP3、WMA、Vorbis OGG、AAC,MPEG-2的视频等。
VBR 的优点是,和CBR相比,用更小的空间,即文件更小,实现更高的音质。
缺点是,编码复杂度增加,编码需要更长时间,而有些硬件编码器可能和VBR不兼容。
2.6 比特率(bitrate)即每秒包含/播放了多少个比特的数据。
比特率常用Kbps(kilo bits per second,千比特每秒)表示。
此处的千字节=1000字节,而不是1024.2.7 边信息(side information)在MPEG音频的帧头后面,有一些解码器会用到的一些信息,用于解码器控制音频流的播放,它就叫做边信息。
不同版本的MPEG的Layer III的边信息的大小,详见后面的表。
3 VBR MP3的帧头格式详解3.1 VBR MP3的帧头类型VBR MP3的帧头主要有两种,XING和VBRI。
关于它们的具体格式和含义,下面会详细解释。
另外常常会提到的是,关于V1和V2两个版本的ID3 头信息,这个主要是用于记录音频文件的一些描述信息,比如歌手,专辑,曲风等,和对音频文件解码,没有直接关系。
属于存储音频文件附属信息的头。
ID3的V1和V2,不会同时存在。
如果存在ID3的话,一般ID3 V1会放在音频文件的最后,大小128个字节,其中前三个字节是字符“TAG”。
ID3 V2放在音频文件的开头处,前三个字节是字符“ID3”。
关于ID3的具体格式,请参考附录中的引用文献。
由于此处介绍的内容,目的是尽快,尽可能精确地去估算MP3文件的(持续)播放时间。
所以,此处不涉及,关于如何去编解码实际的音频数据。
3.2 MPEG音频帧格式及其含义介绍MPEG音频文件,由一个个的帧(Frame)组成。
每一帧都有个帧头(Frame Header),位于该帧的最开始处,接下来的是音频数据。
音频数据多数都是包含了固定数目的音频采样(Sample)。
正是基于这个特性,才有后面的VBR的播放时间计算公式。
前面介绍过了,目前,存在的三种Layer的MPEG音频,尽管他们的压缩方法各不相同,但是帧头格式都一样。
这些帧,由一个个的Slot(槽)组成。
Layer I中,一个Slot是4个字节,在Layer II和Layer III中,一个Slot是一个字节。