2014年4月21日 星期一

音樂整理/歸檔/轉換完全秘辛 (完)

望著雜亂無章的TAG,亂碼標籤火星文的音樂檔案發愁
為數龐大的音樂檔案卻是分散在緒亂無章的資料夾裡
該如何有效率的統整TAG,建構系統化的音樂資料庫
手頭上愛用的隨身聽或是手機該如何匯入無損檔案/轉換支援的檔案
本篇將一一為你說明


前言


整理非難事,只缺時間與耐心

  整理音樂就像整理房間一樣,常常整理負擔就小,不常整理就會越懶得整理,每次看到雜亂的音樂檔案總想著要好好把它整頓一番,那也只是「想」而已,動起你的手吧,找一天充滿精神的早晨,把手頭上自己最愛的音樂完美的歸檔,那份成就感是你所無法想像的!


音樂有著識別證?

  現今許多的音樂檔案都有TAG能力,TAG就是音樂檔案的metadata,metadata是什麼?他是一種中繼資料,用於紀錄資料的內容特色,使其檔案支援索引能力,讓使用能夠依據metadata再透過檔案總管快速的找到想要的資料。
  而這種metadata在音樂標籤上又分為許多版本。目前市場主流是ID3系列,這系列分很多種版號:ID3v1/ID3v2/ID3v2.3/ID3v2.4其中受支援最廣的是ID3v2與ID3v2.3,這都是能被WMP接受的標籤格式,能夠被檔案總管讀取到,其他的非主流metadata像是APEv2 tag、WMA tag、Vorbis comment等也都能透過後述的軟體轉換格式或編輯成主流TAG格式。


完整的TAG是音樂整理的核心所在

  網路上流通的資源常常有TAG不健全,metadata寫入的系統語系不同所造成惱人的亂碼問題,有些人是得過且過,反正音樂有聲音就好,但是竟然你被這篇文章吸引住,已經讀到了這裡,很明顯的你不是那種人。
  TAG能夠記錄一首歌是誰唱的、哪個樂團、歌名、哪時候發售的、這張專輯有幾首歌甚至更多的資訊都可以被保存,一首歌有了健全的TAG,恭喜你,你已經成功一半了,往後的所有作業將依靠著這個完整的TAG運作下去


支援標籤的檔案有哪些?CUE又是什麼?

  支援標籤的主流音訊檔案有AAC、APE、FLAC、MP3、MPEG-4(mp4/m4a/m4b)、OGG、TAK、TTA、WMA。其中注意的是WAV檔本身不支援標籤能力,有些程式仍然可以寫入標籤訊息,但是會有unicode編碼問題。
  CUE全名為CUE腳本,是一個紀錄整軌音訊檔案分割處的腳本檔,能夠透過該檔案虛擬的分割音軌而不是直接分割原始檔案,通常用於燒錄音樂CD,或是音樂CD映像檔的腳本(用於掛載,音源通常為無損品質)。CUE的本質是一般的純文字文件,一般使用ASCII為其文字編碼,但部分軟體支援UTF-8的文字編碼,既然稱作腳本檔案,其內容也具有一定的撰寫規格。


本篇

零、著手準備


  本教學裡面會使用到的軟體與其主要功能。

mp3TAG

  首屈一指的TAG整理軟體,免費,支援現在所有具有TAG能力的音樂檔案,編輯寫入讀取沒話說,健全的UNICODE讀寫,支援檔名與標籤互轉,大幅的縮減整理時間,並且支援正規表示式,能夠以特定格式匯出標籤資訊(像是HTML,RTF,CSV,XML等),具有TAG線上音樂資料庫比對像是從Freedb或亞馬遜匯入標籤資訊,也可以手動搜尋或是加入標籤來源。其中不可忽略的重要功能:歸檔,也是靠這個軟體完成的,同時也是音樂整理作業中核心的角色,有關於這個軟體的應用將會占這個教學相當的篇幅。

foobar2000

  稍稍涉略音樂播放軟體與音訊編碼的玩家應該對這個程式熟悉不過。foobar2000是一個老牌高效能專業的音訊播放程式,別看他介面簡陋,這即是代表它的介面可塑性高,除了支援上百種的音樂格式以外,也支援各種插件,最著名的例如繞過內部音效卡的WASAPI直接輸出音訊數位訊號、許多精美的theme插件等,重要的是它的轉檔能力具有一定的專業性,一定要自己找codec來轉檔,除了參數能夠更客製化以外,一方面更能確保轉換後的音樂品質,這篇教學的轉檔部分絕對少不了它,而且重要的忘了說,它、免費。

notepad++

  內建語系轉換的純文字編譯軟體,與腳本或是系統語言類別的文件有絕佳相性的免費軟體,本篇用來編輯CUE檔案。


一、來源檔案分析


檔案整理流程圖:


  首先檔案要知道是單軌還是整軌,如果是整軌必須轉成單軌以便歸檔與管理,而原本的整軌檔案可以另外備份下來,再來的分類條件就是檔案是否為可記錄標籤的種類,一切以轉換成單軌可標籤檔案為目的開始整理

1.CUE去亂碼篇

  CUE去亂碼後基本上標籤已經完成60%了,剩下的部分都是寫入封面圖片與AlbumArtist大項目的分類,而CUE檔案最惱人的問題就是亂碼,也就是寫入時的系統語系問題,如果以ASCII儲存後在不同語系的系統讀取就會有轉換上的問題而成為亂碼,這時候notepad++就是發揮他功能的時候了,一起來看教學。


▲亂碼的CUE檔案甚至連播放都有問題


▲透過notepad++把CUE打開一探究竟。(為了眼睛舒適所以小編我有改過配色,功能上還是一樣的)


▲利用notepad++內建的語系變換功能轉換CUE的讀取語系
 「Encoding」→「Character sets」→選擇有可能的語系
 在語系上的選擇要一些經驗,雖然說是經驗,不過也是有技巧可循,這裡就不透露太多。


▲按下去立即把所有亂碼都修正了。這時候可以粗略的整理TITLE、PERFORMER不過接下來就要分割成可標籤的單軌所以此步驟可有可無,因為最後一樣要進入mp3tag編輯一次。


▲之後要注意的是,「FILE "..." WAVE」這段,這段就是紀錄此腳本檔案是指向哪個音訊檔的檔名,也就是也就是整軌的路徑檔案名稱,有時候解壓縮的過程會遺失字元,所以修改此項時也要一併修改整軌的檔案名稱,兩者要吻合,否則會出現「Unable to open item for playback (Object not found)」的錯誤


▲最後的重要步驟,將CUE轉存成UTF-8格式,就大功告成。(在我認識notepad++之前可是用Applocale選語系開啟記事本再轉存UTF-8,有notepad++真是太好了,一個軟體解決所有問題)


2.檔案轉換篇

  本篇教學重點在於,將單檔無法標籤的檔案與整軌的檔案分割成可標籤單檔以利編輯與歸檔方便,而前文說過,foobar的轉換檔案是必須自己選擇編碼的,比起其他軟體的轉換步驟稍多,品質也可以獲得控制。
  這裡提供三種格式轉換的教學,分別是FLAC、ALAC (iOS唯一支援的可標籤無損格式*)、MP3,ALAC採用QAAC編碼,MP3採用lame編碼;QAAC屬Apple自行研發的編碼,專門用來轉換成Apple Lossless檔案,開源後也可以透過GUI介面或是指令列來轉換,而MP3的lame編碼屬目前公認轉換品質最好的MP3編碼,FLAC就不用說了,自2001年後就沒有多大的變更。
  foobar內建轉換模組支援FLAC與MP3格式的轉換,ALAC則需要另外新增模式,包含轉換參數與分類,理解的差不多的話教學就開始囉...(本篇示範皆以64位元Windows系統為主)
原則上iOS也支援WAV與AIFF檔案的無損播放,不過實際上WAV是沒有紀錄標籤的能力,而AIFF算是WAV的變體,但也不具備標籤能力,在iTunes以外的軟體管理困難,而小編我早就唾棄iTunes了,在iOS上面能夠識別WAV與AIFF是iTunes將WAV曲目的訊息寫入到iOS Music Player的Database裡,並不是直接附加在檔案上。iTunes對大量音樂的管理來說非常的方便,但是缺點是軟體本身過於肥大,且在Windows上面執行非常吃資源 (以一個音樂播放軟體來說),而且本身對於Hi-Res檔案的支援度半斤八兩,最重要的是他不支援WASAPI,對於專業玩家有外接DAC器材來說不夠實用,所以自從小編把檔案以嶄新的模式歸檔之後,就徹底捨棄iTunes了...


開始之前要先準備一些檔案

轉換成MP3檔
  準備lame的編碼檔案
  官網:http://lame.sourceforge.net/
  編碼下載:lame3.99.5-64.rar
轉換成FLAC檔
  準備FLAC的編碼檔案
  官網:https://xiph.org/flac/
  編碼下載:FLAC.rar
轉換成ALAC檔
  準備QAAC的編碼檔案
  官網:https://sites.google.com/site/qaacpage/
  編碼下載:QAAC x64.rar



▲選定要轉換的檔案後右鍵「Convert」→「...」


▲出現轉換設定的視窗,這禮簡單的介紹一下每個選項的意義
Current settings底下的「Output format」與「Destination」是我們這次較常使用到的
 「Output format」
   可以調整輸出的種類與參數
 「Destination」
   檔案輸出的路徑與命名規則
Saved presets可以將設定儲存起來,下次使用只要一鍵轉換
現在先按下藍字的「Output format」選擇你要輸出的類型


▲選擇你要輸出的種類雙擊左鍵進入轉換參數視窗


▲FLAC可以調整壓縮等級,效果如翻譯所示,壓縮等級越高在播放時較耗效能(即較耗電),壓縮等級低占空間,播放時較不吃資源,而LV1~10的壓縮都不會影響音樂品質,同為無損音質
 ALAC (Apple Lossless) 則沒有提供選項可以選,這裡就不放圖
 MP3 (lame) 可以調整碼率,相信這個大家都很熟悉了

調整輸出品質後→「OK」設定完後→「Back」回到Converter Setup選擇「Destination」


▲依照需求調整輸出位置與複寫規則,命名格式建議選擇個別命名,這裡的命名規則是依照原始檔案的TAG運作的,這裡只是初步的轉換,後來還是要用MP3TAG統整過一次,「...」則可以在輸出時製造資料夾以便快速分類


▲選擇命名檔案時是否製作資料夾,與輸出檔案的標準格式樣板選擇,這裡小編推薦「nn. title」這個選項,選擇好之後直接關掉視窗回到路徑按「Back」回到Converter Setup首頁


▲全部就緒之後按中間的「Save」,這時會跳出對話窗選擇「Create a new preset」,左欄會出現待命名的專案,設定自己習慣的名稱後立即可以儲存


▲對以儲存的專案右鍵可以作進階編輯


▲命名完成後就可以按下「Convert」,第一使用會要你指定lame編碼的位置


▲因為我沒有設定固定的輸出路徑,所以每次轉換時他都會問我


注意看左上角視窗的標題,這時要你指定編碼的位置,根據你轉換的種類選擇,選定之後開啟舊檔就會開始轉換,選過一次之後除非編碼檔案路徑變換,不然不會再出現這個視窗。
 FLAC→flac.exe
 ALAC→QAAC.exe
 MP3→lame.exe


▲轉換中


▲轉換完成

二、整理標籤

總算到了整篇教學的中核「標籤整理」單元了,這裡會使用MP3TAG作為整理標籤的軟體,這個軟體介面簡單,並且支援繁體中文介面(ctrl+O→Language→正體中文),就算沒有特別的教學也適合自己摸索,你將會發現這個軟體在ID3標籤的處理可說是無所不能。
  這次教學涵蓋手動整理與自動搜尋兩部分,手動整理包含批次整理與檔案名稱取代法,自動搜尋仰賴Amazon的音樂資訊伺服器(music ID database)搭配MP3TAG比對寫入功能,並且教你如何加入系統內建以外的資料庫插件。

1.手動整理教學

  有時候要整理的音樂表面上檔名很正常,曲目與標題都有標上,可是實際在播放時卻是沒有寫入標籤的,這時候就需要MP3TAG的標籤轉檔能力,沒錯,標籤也是可以轉檔的,不管是從檔案名稱轉進標籤,還是從標籤資料按照指定格式更改檔名,MP3TAG都辦的到。
  有時已經附上的曲目資訊有誤,可能加了不需要的底線或是沒有存在意義的額外內容,例如composer或是filetype等無用的標籤,都可以透過MP3TAG一次移除掉一首以上的指定內容
  這裡就找一張DJ.Okawari Kaleidoscope的專輯做示範,這次教學涵蓋手動整理與檔案名稱取代法


▲表面上檔案名稱與軌號都有標記,不過先丟進去MP3TAG看得更詳細一點再說


▲丟進MP3TAG後發現裡面竟然空空如也,所有標籤都是空的...


▲全選後右鍵→「標籤」


▲裡面果然都空空如也(你要重覆幾次),這時候新增檔案資訊,按下紅框的新增鈕,「欄位」的下拉式選單選擇「ALBUM」新增專輯名稱,「數值」內填入專輯名稱之後「確定」。
 相同的步驟也寫入ARTIST或是ALBUMARTIST*
這裡解釋一下Artist與AlbumArtist有什麼不同,簡單來說AlbumArtist性質有點像樂團名稱,而Artist就類似主唱歌手是誰,以「東京事変 - 大人」這張專輯來說AlbumArtist就應該填「東京事変」Artist就應該填「椎名林檎」。在系統分類中AlbumArtist的範圍是比Artist還要大的,也就是指不同的Artist只要有相同的AlbumArtist就會被分類在同一張專輯中,以同人音樂界來說,V家每一首歌可以有初音ミク或是鏡音リン(Artist)等不同人演唱,但是P主(AlbumArtist)都是同一人,就可以此分別,另外也可以用AlbumArtist來分類各種動畫的OP/ED,即是用AlbumArtist來紀錄動畫名稱方便分類。



▲兩個重要資訊完成後「確定」,標題與軌號我們從檔案名稱轉換過來


▲回頭觀察檔名的命名規則,可以發現他是照著以下的規則命名的
 「軌號. 標題 (Feat. 主唱)
 這張專輯有些純音樂mix曲就沒有主唱,剛好可以演示一下剛剛說的Artist與AlbumArtist的差別


▲先選擇具有同樣規則歌曲轉換,之後右鍵→「轉換」→「檔案名稱 - 標籤」


▲這裡是非常重要的部分,要利用到表示式作資料函數的轉換
 剛剛所說到的這些檔案的命名規則「軌號. 標題 (Feat. 主唱)」
 要在這裡轉換成系統能夠分辨的函數


▲按下旁邊的「>」按鈕,這個列表內的都是常用的標籤索引


▲按下相對應的類別之後會自動加入相關的函數,而本身非含數的部分要自己加上去
 例如「.」「(空格)」「_」「feat.」之類的,以範例來說最後呈現起來應該要像這樣
 「%track%. %title% (Feat. %artist%)」括號與Feat.跟空格都要手動加上去
 不然最後出來那些東西都會涵蓋在標籤裡面,我們只取實際含有變數的內容部分即可
 下面有每個資訊預覽的內容,中間有一條很淺的線是用來校對每個欄位的內容是不是前面有空白沒有取代掉,我認為這個功能非常貼心
 格式確定之後就按下「確定」看看神奇的事發生吧...


▲當初選擇部分的title、track、artist都直接填入標籤裡面,剩下的就是照表操課,把其他曲目也填補起來



▲文字資料完成之後就是最後步驟,插入美美的專輯封面了*
專輯封面選擇的格式盡量以JPEG為主,大小不拘,切記有些撥放器不支援PNG或是BMP的封面圖片,而封面盡量以播放裝置螢幕大小來調整,畢竟圖片被包含在音樂檔案中,圖片本身檔案大小還是存在的,加上較低階的撥放器記憶體相當有限,解析度過高的封面圖片會有讀取延遲,瀏覽專輯列表時的不順暢情況,能夠在前置作業避免就盡量避免。



▲最後就是在撥放器中觀賞自己整理完成完美的成果了


三、歸檔並且建造自己的音樂資料庫

終於來到最最後階段了,檔案的歸檔,這個技術其實才是我寫這篇文的動機,前面我們有說到MP3TAG具有將檔名轉換成標籤的能力,相反當然也有將標籤轉換成檔名的能力,這裡我們就要利用這個特質讓MP3TAG幫我們依照音樂檔案的標籤製造相對應的資料夾並且以樹狀目錄的結構儲存音樂檔案,這個大前提就是檔案本身標籤的完整性要非常足夠,所以前面才會花這麼大的篇幅教大家寫入與整理標籤。
  本篇教學會大量應用MP3TAG本身內建的函數,包括表示式等程式語言相關的邏輯應用,不過本篇不會太深入,只教學「歸檔」這個技巧會觸及的範圍,遵循教學按部就班即可達到效果,更深入的函數應用可以參考MP3TAG官方網站的函數解說

前面我們有提到使用%夾注的函數

  %albumartist%
   直接填入ALBUMARTIST的值
  %artist%
   直接填入ARTIST的值
  %album%
   直接填入ALBUM的值
  %title%
   直接填入TITLE的值
  %track%
   直接填入TRACK的值

現在我們加入其他運算符與函數

  $validate(filename,_)
   如果filename包含無效的字符(不可作為檔名的符號),則取代為「_」
    例:Title=我們*之間
      $validate(%title%,_)→我們_之間
  $if2(x,y)
   如果x是有效的(有內容物),則輸出x,否則輸出y
    例:Title=星空 Artist=小白 Album=(無)
      $if2(%album%,%artist%)=小白
  $num(x,y)
   用(y-1)個零加在x前,x通常為數字,此功能多用於軌號
    例:Title=星空 Track=3
      $num(%track%,2)=03

  稍為介紹一下這次為何要挑出這幾個函數來教學,還有要如何使用來達成歸檔的目的。
  基本上在分類音樂的時候,都是以Artist作為最前端的分類,少數只玩純音樂的玩家會以曲風(Genre)來分類,不過一般聽流行樂的聽眾除非有鑽研過音樂史,不然真的很難分辨現代音樂到底屬哪種曲風,而且現在也很多歌手在一張專輯內同時放入一種以上的曲風,所以以曲風來當作最大項目分類反而會增加索引與尋找的難度。而使用Artist作為最前端的分類又會與AlbumArtist產生混淆,所以必須要在分類上建立一個判斷準則,前面的文章說過AlbumArtist的範圍是比Artist還要大的,所以在分類上要以AlbumArtist為優先,如果AlbumArtist沒有這個值,就以Artist作為分類命名,這就需要用到「$if2」這個函數來實現我們的目的。最後就是「$validate」這個函數,這個值用於重新命名檔案的時候將檔案系統不允許的字元取代掉,避免被系統警告而影響作業,並且要常態存在在每個會成為路徑名稱的函數外層,而「$num」算是我個人喜好加入的值,最近發現某些撥放器在排序數字的時候是「字元排序」而不是「值排序」*,利用「$num」將前導零加入命名中,讓檔案在兩種不同排序模式中都能正確排列軌號。
「字元排序」與「值排序」:
  假設同個目錄中有三個檔案,名稱為「1.txt、6.txt、50.txt、10.txt、18.txt、111.txt」則兩種排序演算則會衍生不同的順序
字元排序:
 1.txt
 10.txt
 18.txt
 111.txt
 50.txt
 6.txt
值排序:
 1.txt
 6.txt
 10.txt
 18.txt
 50.txt
 111.txt

  綜合以上的觀點,我們就利用MP3TAG「轉換」→「標籤 - 檔案名稱」利用路徑的反斜線「\」讓MP3TAG依照我們設計的函數自動將我們具有完整標籤的檔案移動到與標籤內容相符的資料夾

 首先是以AlbumArtist與Artist為第一層資料夾名稱,利用「$if2」來篩選優先程度
   ...\$if2(%albumartist%,%artist%)

 第二層資料夾以專輯名稱來分類
   ...\$if2(%albumartist%,%artist%)\%album%

 第三層再重新命名一次音樂檔案,並且套用「$num」來加入前導零
   ...\$if2(%albumartist%,%artist%)\%album%\$num(%track%,2). %title%

 最後加入「$validate」迴避掉受限制的字元,而且所有項目都要加入
   ...\$validate($if2(%albumartist%,%artist%),_)\$validate(%album%,_)\$num(%track%,2). $validate(%title%,_)

  前面的「...」可以加入任意的路徑,後面的那串函數可以直接複製起來用,使用過一次之後系統會紀錄起來,下次只要TAG已經編寫完成就可以直接「標籤 - 檔案名稱」確定後直接歸檔。


▲已經自動以「Superfly」為資料夾名稱「Superfly BEST」為專輯名稱創造資料夾然後把檔案放進裡面了,對於有大量音樂收藏的玩家來說是一大福音啊!


▲利用foobar2000加入音樂資料庫,超高效率瀏覽超大量音樂。


最後

啊....總算把這篇文章結束掉了,這篇文章可是寫了快一年的時間啊(其實總共只花5個小時左右),最後有個機會能夠把自己整理音樂的方法告訴各位,真的很開心,希望我教學的用詞對各位來說不會太深奧。而寫這篇文章的時候我也一邊聽著示範音樂寫心得,能夠把自己所學的技術弄成教學真的很棒,我自己看了也很滿意啊!文章就到這邊,等我有其他靈感的時候再見吧,祝各位音樂多到硬碟爆掉(奔