2011-06-03 53 views
22

只是用普通老式cat連接兩個mp3文件,我的一個朋友......使用cat加入mp3文件。這是什麼黑魔法?

cat file1.mp3 file2.mp3 > out.mp3 

...和生成的文件是完全可重複,播放一首歌曲,然後下。

這是什麼黑魔法?標題,元數據發生了什麼?這如何工作?持續時間甚至可以正確顯示。

回答

10

MP3文件不過是原始的MPEG2-Layer 3(音頻)流數據,沒有文件級別的頭結構,例如持續時間,原始來源,編碼信息。一個MP3流是由一個以同步標記FF Fx開始的塊組成的,因此可以將任意數據(如ID3標籤)放在任何位置,並且不會影響音頻。如果ID3標籤沒有列出這些信息或者對文件進行全面掃描以準確計算它,玩家可以從比特率和文件大小中猜測持續時間。

+0

是的 - MP3文件很奇怪,它們只是沒有任何封裝的原始流。一個更正:它們通常是MPEG1-Layer3。 – 2011-06-03 02:13:18

+0

@John:哦?我一直聽到MPEG2,是因爲它是'當前'mp3嗎?還是我瘋了? – 2011-06-03 02:20:44

+0

MPEG數字並不是真正的版本 - 它們只是增加的標準。在這種情況下,MPEG-2將MPEG-1音頻標準擴展到一些較低的比特率,並且奇怪地與其不完全重疊 - 它不允許高比特率。所以大多數人使用的128kbit實際上是MPEG-1 Layer-3。在另一個答案中看到'mp3標題'鏈接。 – 2011-06-03 03:25:12

9

不要忘記,玩家通常會準備好處理variable bitrate編碼,因此每個幀都可能有不同的比特率。

至於元數據,這是一個奇怪的鴨子;即使來自兩個軌道的id3 tags都包含在新文件中,但大多數玩家只會在文件的末尾處尋找標籤以顯示給用戶,並且只需跳過位於中間的嵌入式標籤文件稱爲「非音樂」內容。有些人可能會玩垃圾或碰撞,但我懷疑他們會很受歡迎,如果他們是脆弱的。

並注意mp3 headers不編碼有關整體文件大小的任何信息 - 這些都是在運行時計算的。 (也許是通過魔法)

回想起當我試圖通過收聽流媒體廣播電臺學習德語時,我經常用dd來猜測我想要開始和停止切換的軌道有多遠來分開巨大的流。不雅,但沒有重新編碼,我的球員處理得很好。