Mp3標籤亂碼問題分析與解決方案
出自Linux Wiki
目前Linux中流行的很多播放器經常不能正確顯示如歌曲名、專輯名等MP3 tag信息,經過有些工具轉換後,標籤又不能被Windows識別。本文將簡要分析其原因,並給出方便、有效的解決方案。
目錄 |
原因簡析
MP3的歌曲名、藝術家、專輯名等信息都以一定的編碼格式存儲在MP3標籤中。簡單地說,亂碼出現的原因就是播放器未能準確識別出MP3標籤的中文編碼格式。
具體的說,現在MP3文件的標籤主要有幾種標準:ID3v1、ID3v2(現在常見的又分為2.3和2.4)、APEv2。
- ID3v1
- 這幾乎是MP3文件最早的標籤標準(1996年提出)。它對標籤各欄位的長度有嚴格的限制[1],且沒有考慮多語言問題。於是,一些軟體將GBK編碼的中文直接寫入標籤的相應欄位,從而基本解決了中文歌曲名等問題。(如果欄位同時包含多種語言,這一方法就會出問題了)
- ID3v2
- 1998年的ID3v2帶來了不少改進。如支持變長欄位、UTF-16編碼等等[2]。2000年的ID3v2 2.4進一步支持UTF-8編碼,但這一標準還未得到很好的支持(如Vista里的WMP[3])。
而Linux中的播放軟體通常使用統一的ID3庫,這一庫只探測Unicode編碼。導致用GBK編碼的歌名未能正常顯示。
解決方法
可以從兩個角度解決這個問題。一是轉換已有MP3文件的標籤編碼,二是使用支持GBK編碼的播放軟體。
方案一:更改已有MP3文件標籤的編碼
這是治本的方法,但注意一定要用對工具,如果使用了錯誤的mid3iconv,將導致mp3的標籤不被Windows識別!
mp3tagiconv
mp3tagiconv可以修改MP3文件的標籤,使其同時能被Linux中的音樂播放軟體和Windows Media Player正確識別,且使用方法簡便,推薦使用。
使用方法很簡單,在其項目網站( http://code.google.com/p/mp3tagiconv/ )上下載程序,解壓後直接運行(適用於僅含中、英文的文檔):
$ mp3tagiconv mp3文件路径
mp3tagiconv 需要 mutagen 的支持,確保之前已經安裝。
Foobar
Foobar可以方便地做這一修改,它是Windows中的軟體,也可以在Linux中使用wine運行。要注意安裝Foobar時要安上那個批量修改標籤的支持。用Foobar選中要修改的MP3文件(不能選到其它格式的,否則改標籤的菜單項就出不來),先為音樂加好ID3v1、ID3v2標籤,再去掉音樂的ID3v1標籤,再加上音樂的ID3標籤即可。
EasyTag
EasyTag一款Linux下的標籤處理軟體,設置EasyTag用GBK編碼讀入標籤,用UTF-8編碼寫入ID3v2標籤,用GBK編碼寫入ID3v1標籤即可。
mutagen
該方法由於有不良副作用,故略去。
方案二:選用支持GBK的MP3播放軟體
目前,Linux中對中文支持較好的播放器主要有Audacious和Songbird。
Audacious是Beep Media Player的繼承,是一款小巧的軟體,存在於Debian、Ubuntu等軟體倉庫中。使用Audacious時,在頁面上按右鍵,首選項->播放列表->使用自動編碼器檢測這些編碼,選中「簡體中文」即可。
Songbird是一個大型軟體,甚至在播放器加入了瀏覽網頁功能,它支持Linux、Windows、Mac OS X系統。無需任何設置就可以支持中文,不過它不在軟體倉庫中,需要單獨下載。
還有一些軟體,可以通過簡單的修改使其支持GBK編碼的中文。如Exaile,由於它用Python寫成,所以修改其源碼並不複雜。