日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

如何计算MP3总时长的问题(三)--对于变比特率MP3求总时长

發(fā)布時(shí)間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何计算MP3总时长的问题(三)--对于变比特率MP3求总时长 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??????? 3、變比特率MP3總時(shí)長(zhǎng)求解

???????? 之前我們所討論的都是對(duì)于一個(gè)固定比特率(CBR)的MP3進(jìn)行求總時(shí)長(zhǎng),由于固定比特率的特殊性,很容易第一幀的幀頭就能知道整個(gè)MP3的信息,但是對(duì)于變比特率(VBR)的MP3,比特率和幀長(zhǎng)都不是固定的,所以我們就不能用之前的公式來(lái)計(jì)算總時(shí)長(zhǎng)。

???????? 其實(shí)在第一幀的幀頭后面還存著VBR的一些信息,里面存著文件長(zhǎng)度,總幀數(shù)等信息,從而使我們很快算出變比特率的總時(shí)長(zhǎng),方法如下:

??????? 1)XING頭標(biāo)志

由于VBR是XING公司推出的算法,所以在MP3的第一幀里會(huì)有"XING"或者"Info"的關(guān)鍵字,具體格式

???????????? 位置????? 長(zhǎng)度(字節(jié))????????????????????????????????????? 含義
04包含ASCII的字符XING或者Info,沒(méi)有NULL結(jié)尾
44

標(biāo)識(shí)位

0x0001 - 存在總幀數(shù)(Frames)字段
0x0002 - 存在文件大小(Bytes)字段
0x0004 –存在 TOC字段?
0x0008 – 存在音頻質(zhì)量指示字段

84若標(biāo)識(shí)位存在總幀數(shù),那么這四個(gè)字節(jié)就是總幀數(shù)
124若標(biāo)識(shí)位存在文件大小,那么這四個(gè)字節(jié)就是文件大小

還有別的信息,這里不需要,我就不在這里說(shuō)了。

???????? 2) VBRI頭標(biāo)志

還有一種頭也同樣標(biāo)識(shí)和XING類(lèi)似,只是有"VBRI"的關(guān)鍵字,具體格式

???????? 位置??? 長(zhǎng)度(字節(jié))????????? 含義
04包含ASCII的字符VBRI,沒(méi)有NULL結(jié)尾
104文件大小
144總幀數(shù)

我只寫(xiě)了對(duì)總時(shí)長(zhǎng)有需要的位置,其他的暫時(shí)沒(méi)用到,就不提了,不過(guò)可以討論。

??? 3)確定標(biāo)志頭位置

? 知道的有這樣的標(biāo)志頭可以幫助我們很快找到需要的信息,那么如何定位呢,公式如下:

標(biāo)志頭位置 = MPEG 頭位置 +? MPEG幀頭大小(4字節(jié))+ 邊信息大小
對(duì)于邊信息,我們可以根據(jù)頭中所給J位置上2個(gè)字節(jié)得到

mode = (header>>6)&0x03

其中:'00'? Stereo; '01'? Joint Stereo (Stereo);?? '10'? Dual channel (Two mono channels);

???????????? '11'? Single channel (Mono).

???????????????????????????????????????????????????????????????????????????? MPEG 1?????????????????????????????????? MPEG2/2.5

Stereo ,Joint Stereo? Dual channel????????? 32??????????????????????????????????????????????????? 17

Mono??????????????????????????????????????????????????????????????????? 17????????????????????????????????????????????????????? 9

現(xiàn)在已經(jīng)很清楚了,我們就能定位出來(lái)頭標(biāo)志,然后讀出我們需要的總幀數(shù),之前一屆我已經(jīng)介紹了每幀持續(xù)時(shí)間,因此

VBR的MP3總時(shí)長(zhǎng)(毫秒) =? 總幀數(shù)*每幀持續(xù)時(shí)間

?

到此不知道我講的清楚不清楚,這也是我通過(guò)自己做,和看別人的文檔總結(jié)的一些,希望能幫助到需要的人,有什么問(wèn)題可以和我討論。

???????? 這個(gè)準(zhǔn)確度還是比較高的,前提是從幀頭中讀到的信息是正確有效的,呵呵,我測(cè)得大部分MP3還是比較正確的,如果真的要準(zhǔn)確,那就預(yù)讀一遍MP3文件,把每一幀的找到,累加得到幀數(shù),我做MP3幀索引表的時(shí)候就這么搜的,其實(shí)對(duì)于小文件還是比較快的。

轉(zhuǎn)載于:https://www.cnblogs.com/candycaicai/archive/2010/11/26/1889085.html

總結(jié)

以上是生活随笔為你收集整理的如何计算MP3总时长的问题(三)--对于变比特率MP3求总时长的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。