2011-06-02 179 views
9

可以說一個MP3以字節爲單位的幀長度爲104:如何以毫秒爲單位獲得該值?有沒有公​​式或什麼可以做到這一點?以毫秒爲單位計算MP3幀的長度

+2

我會說比特率是關鍵。 CBR最簡單,VBR將要求您注意費率變化。 – sehe 2011-06-02 21:44:41

+0

你爲什麼需要這些信息? – Andrei 2011-06-02 21:52:12

+3

我需要解釋爲什麼? – SolidSnake 2011-06-02 21:54:51

回答

1

我用不同的方法來計算的MP3文件中的每一幀的時間.. 假設所有幀具有文件相同的大小..所以我只是得到以毫秒爲單位的MP3文件的總時間..然後計算文件中的總幀數,最後由總幀數把總的時間..所以公式看起來像:

float frameTime = totalTimeMillisec/totalFrames; 

你會得到每幀的總時間以毫秒爲單位的軌道.. 我完成後,我得到了52毫秒左右...這和Mark Heath說的類似。

反正謝謝大家的解決方案..

0

框架與時間不一樣。但如果你知道總大小,你可以做這樣的開銷+幀*時間=總大小。

+0

我有幀長度,我有MP3文件的總長度時間..但我需要以毫秒爲單位獲得每幀的時間..例如,如果我得到20個MP3幀我得到1K毫秒左右,這意味着1秒..如何完成這 – SolidSnake 2011-06-02 21:42:12

+0

http://www.mp3-converter.com/mp3codec/frames.htm FrameSize = 144 * BitRate /(SampleRate + Padding) – Mikhail 2011-06-03 08:40:08

0

http://en.wikipedia.org/wiki/MP3有一個關於MP3文件結構的條目,但你應該嘗試找到一個更多的細節。

幀頭包含一個稱爲比特率的字段。鑑於此比特率和幀數據大小,您可以確定該幀數據中實際的音樂時間。我期望公式爲:DataSize = BitRate * TimeInterval。有關比特率編碼的詳細信息,請參閱http://www.mp3-tech.org/programmer/frame_header.html

+0

我不需要數據大小..我只需要總數該框架的時間.. – SolidSnake 2011-06-02 22:56:46

+0

...你通過一個部門獲得。 – Andrei 2011-06-03 21:27:58

8

您需要解析MP3幀頭以獲取MP3版本和圖層號(請參閱this document獲取幀頭格式)。一旦你有了這些,你可以使用下面的查找表來獲取幀中的樣本數量。

private static readonly int[,] samplesPerFrame = new int[,] { 
     { // MPEG Version 1 
      384, // Layer1 
      1152, // Layer2 
      1152 // Layer3 
     }, 
     { // MPEG Version 2 & 2.5 
      384, // Layer1 
      1152, // Layer2 
      576  // Layer3 
     } 
    }; 
+0

好..它的MPEG版本1和圖層是1152現在我應該添加那個來獲得幀的總時間? – SolidSnake 2011-06-02 22:54:53

+0

也可以從MP3標頭中找出採樣率。採樣率是每秒採樣數,所以樣本數除以採樣率就是幀的持續時間。 (如果你不得不考慮頻道數量,我記不清楚,我想你是這麼做的,所以對於立體聲,你可以先將樣本數量減半) – 2011-06-02 23:02:11

+0

嗯,現在我做了你所說的我但我總是得到「0」..這是我所做的,「mp3Frame.SampleCount/mp3Frame.SampleRate」.. btw,mp3Frame.SampleCount = 576和mp3Frame.SampleRate = 11025 ..也許我需要乘以SampleCount by 2? – SolidSnake 2011-06-02 23:12:54

0

由於數據是加密的,你不能知道玩比特率,直到數據已經被解密。 沒有人會說如何加密(壓縮)和解壓縮數據。 我所知道的是,Lame程序將採取一個波形文件,然後過濾/重新採樣它然後以某種方式壓縮數據,然後將其放入幀中。我不知道這些MP3播放器是否使用8位或16位字在每個通道播放。但是,比特率和全部都與通道字節的大小和播放的採樣率有關。與數據首先輸入到編碼器不同。 如何查看玩家發揮的最終結果是這裏的訣竅。 CBR爲後來學習VBR做了很好的參考。

如何取一個樣本的一個通道的16位(每個樣本的WORD)併爲MP3數據壓縮ot?結果是12位還是更少? 壓縮程序調用什麼?

+0

加密?你的意思是壓縮?你的回答有點混亂。 – nalply 2012-10-10 19:45:51

15

嗯,這很奇怪,但沒有人正確回答這個問題。我已經研究,這裏的式:

幀長度(毫秒)=(每幀/採樣率樣品(以Hz))* 1000

典型MP3(一個MPEG層III,第1版)每幀有1152個採樣,採樣率(通常)爲44100赫茲。因此(1152/44100)* 1000 =每幀26,122449毫秒。

注意幀長度(時間)不取決於比特率。

更多信息:http://www.mp3-converter.com/mp3codec/frames.htm

相關問題