如何使用 metaflac 管理音樂標籤

2019-11-16 09:36:00

使用這個強大的開源工具可以在命令列中糾正音樂標籤錯誤。

很久以來我就將 CD 翻錄到電腦。在此期間,我用過幾種不同的翻錄工具,觀察到每種工具在標記上似乎有不同的做法,特別是在儲存哪些音樂後設資料上。所謂“觀察”,我是指音樂播放器似乎按照有趣的順序對專輯進行排序,它們將一個目錄中的曲目分為兩張專輯,或者產生了其他令人沮喪的煩惱。

我還看到有些標籤非常不明確,許多音樂播放器和標籤編輯器沒有顯示它們。即使這樣,在某些極端情況下,它們仍可以使用這些標籤來分類或顯示音樂,例如播放器將所有包含 XYZ 標籤的音樂檔案與不包含該標籤的所有檔案分離到不同的專輯中。

那麼,如果標記應用和音樂播放器沒有顯示“奇怪”的標記,但是它們受到了某種影響,你該怎麼辦?

Metaflac 來拯救!

我一直想要熟悉 metaflac,它是一款開源命令列 FLAC 檔案後設資料編輯器,這是我選擇的開源音樂檔案格式。並不是說 EasyTAG 這樣出色的標籤編輯軟體有什麼問題,但我想起“如果你手上有個鎚子……”這句老話(LCTT 譯註:指如果你手上有個鎚子,那麼所有的東西看起來都像釘子。意指人們慣於用熟悉的方式解決問題,而不管合不合適)。另外,從實際的角度來看,帶有 ArmbianMPD 的小型專用伺服器,音樂儲存在本地、執行精簡的僅限音樂的無頭環境就可以滿足我的家庭和辦公室的立體音樂的需求,因此命令列後設資料管理工具將非常有用。

下面的截圖顯示了我的長期翻錄過程中產生的典型問題:Putumayo 的哥倫比亞音樂組合顯示為兩張單獨的專輯,一張包含單首曲目,另一張包含其餘 11 首:

Album with incorrect tags

我使用 metaflac 為目錄中包含這些曲目的所有 FLAC 檔案生成了所有標籤的列表:

rm -f tags.txtfor f in *.flac; do        echo $f >> tags.txt        metaflac --export-tags-to=tags.tmp "$f"        cat tags.tmp >> tags.txt        rm tags.tmpdone

我將其儲存為可執行的 shell 指令碼(請參閱我的同事 David Both 關於 Bash shell 指令碼的精彩系列專欄文章,特別是關於迴圈這章)。基本上,我在這做的是建立一個檔案 tags.txt,包含檔名(echo 命令),後面是它的所有標籤,然後是下一個檔名,依此類推。這是結果的前幾行:

A Guapi.flacTITLE=A GuapiARTIST=Grupo BahiaALBUMARTIST=Various ArtistsALBUM=Putumayo Presents: ColombiaDATE=2001TRACKTOTAL=12GENRE=Latin SalsaMUSICBRAINZ_ALBUMARTISTID=89ad4ac3-39f7-470e-963a-56509c546377MUSICBRAINZ_ALBUMID=6e096386-1655-4781-967d-f4e32defb0a3MUSICBRAINZ_ARTISTID=2993268d-feb6-4759-b497-a3ef76936671DISCID=900a920cARTISTSORT=Grupo BahiaMUSICBRAINZ_DISCID=RwEPU0UpVVR9iMP_nJexZjc_JCc-COMPILATION=1MUSICBRAINZ_TRACKID=8a067685-8707-48ff-9040-6a4df4d5b0ffALBUMARTISTSORT=50 de Joselito, LosCumbia Del Caribe.flac

經過一番調查,結果發現我同時翻錄了很多 Putumayo CD,並且當時我所使用的所有軟體似乎給除了一個之外的所有檔案加上了 MUSICBRAINZ_* 標籤。(是 bug 麼?大概吧。我在六張專輯中都看到了。)此外,關於有時不尋常的排序,我注意到,ALBUMARTISTSORT 標籤將西班牙語標題 “Los” 移到了標題的最後面(逗號之後)。

我使用了一個簡單的 awk 指令碼來列出 tags.txt 中報告的所有標籤:

awk -F= 'index($0,"=") > 0 {print $1}' tags.txt | sort -u

這會使用 = 作為欄位分隔符將所有行拆分為欄位,並列印包含等號的行的第一個欄位。結果通過使用 sort 及其 -u 標誌來傳遞,從而消除了輸出中的所有重複項(請參閱我的同事 Seth Kenlon 的關於 sort 程式的文章)。對於這個 tags.txt 檔案,輸出為:

ALBUMALBUMARTISTALBUMARTISTSORTARTISTARTISTSORTCOMPILATIONDATEDISCIDGENREMUSICBRAINZ_ALBUMARTISTIDMUSICBRAINZ_ALBUMIDMUSICBRAINZ_ARTISTIDMUSICBRAINZ_DISCIDMUSICBRAINZ_TRACKIDTITLETRACKTOTAL

研究一會後,我發現 MUSICBRAINZ_* 標籤出現在除了一個 FLAC 檔案之外的所有檔案上,因此我使用 metaflac 命令刪除了這些標籤:

for f in *.flac; do metaflac --remove-tag MUSICBRAINZ_ALBUMARTISTID "$f"; donefor f in *.flac; do metaflac --remove-tag MUSICBRAINZ_ALBUMID "$f"; donefor f in *.flac; do metaflac --remove-tag MUSICBRAINZ_ARTISTID "$f"; donefor f in *.flac; do metaflac --remove-tag MUSICBRAINZ_DISCID "$f"; donefor f in *.flac; do metaflac --remove-tag MUSICBRAINZ_TRACKID "$f"; done

完成後,我可以使用音樂播放器重建 MPD 資料庫。結果如下:

Album with correct tags

完成了,12 首曲目出現在了一張專輯中。

太好了,我很喜歡 metaflac。我希望我會更頻繁地使用它,因為我會試圖去糾正最後一些我弄亂的音樂收藏標簽。強烈推薦!

關於音樂

我花了幾個晚上在 CBC 音樂(CBC 是加拿大的公共廣播公司)上收聽 Odario Williams 的節目 After Dark。感謝 Odario,我聽到了讓我非常享受的 Kevin Fox 的 Songs for Cello and Voice。在這裡,他演唱了 Eurythmics 的歌曲 “Sweet Dreams(Are Made of This)”。

我購買了這張 CD,現在它在我的音樂伺服器上,還有組織正確的標籤!