 Mutagen:5分鐘批量整理上千首歌曲的音頻標(biāo)簽處理完整指南)
從零開始玩轉(zhuǎn) Mutagen5分鐘批量整理上千首歌曲的音頻標(biāo)簽處理完整指南【免費(fèi)下載鏈接】mutagenPython module for handling audio metadata項(xiàng)目地址: https://gitcode.com/gh_mirrors/mut/mutagen你是一個擁有幾千首歌的數(shù)字倉鼠嗎從各種渠道攢下來的 MP3、FLAC、M4A 混在一起歌名是亂碼、歌手是空白的、專輯信息殘缺不全想手動補(bǔ)全幾乎是不可能的任務(wù)。好消息是有一個叫Mutagen的 Python 模塊就是專門為音頻標(biāo)簽處理而生的——它用一套幾乎統(tǒng)一的代碼就能讀寫幾乎所有主流音頻格式的元數(shù)據(jù)。在開始之前先給新手解釋一下術(shù)語元數(shù)據(jù)就是藏在音頻文件里的身份證信息包括標(biāo)題、歌手、專輯、年份、封面等文字描述而音頻標(biāo)簽處理就是對這些信息進(jìn)行讀取、修改、刪除的操作。 場景開場與其一首首改不如交給代碼想象一下這個場景你剛導(dǎo)入了 3000 首 FLAC 無損音樂發(fā)現(xiàn)它們?nèi)紱]有專輯封面和曲目編號手機(jī)和播放器里亂成一團(tuán)。手動用編輯軟件一首首改那得花上一整天。而用 Mutagen 寫一個小腳本全自動批量補(bǔ)全喝杯咖啡的時(shí)間就能跑完。Mutagen 最讓人舒服的一點(diǎn)是它的 API 設(shè)計(jì)得像 Python 字典——讀標(biāo)簽就像查字典寫標(biāo)簽就像往字典里放東西幾乎沒有學(xué)習(xí)曲線。下面我們開始動手。? 三步完成環(huán)境配置最快的安裝方式Mutagen 純用 Python 編寫不依賴任何第三方庫所以安裝極其簡單。第一步確認(rèn) Python 版本Mutagen 支持 Python 3.10 及以上版本CPython 和 PyPy 均可在終端輸入以下命令檢查python --version第二步用 pip 一鍵安裝推薦pip install mutagen第三步從源碼安裝可選適合想讀源碼的進(jìn)階用戶git clone https://gitcode.com/gh_mirrors/mut/mutagen cd mutagen python setup.py install安裝完成后用python -c import mutagen; print(mutagen.version_string)驗(yàn)證一下能輸出版本號就說明環(huán)境 OK 了。 第一個實(shí)戰(zhàn)小任務(wù)一行命令讀取全部標(biāo)簽并批量體檢我們先寫一個音樂庫體檢腳本掃描一個文件夾里的所有音頻文件自動識別格式、讀取標(biāo)題/歌手/專輯并報(bào)告沒有標(biāo)簽的裸奔文件。新建一個scan_music.py文件粘貼以下代碼import os import mutagen from mutagen import File folder your_music_folder # 改成你自己的音樂文件夾 for name in os.listdir(folder): path os.path.join(folder, name) # File() 會自動識別文件類型MP3/FLAC/M4A...識別不了就返回 None audio File(path) if audio is None: print(f[無法識別] {name}) continue # audio.info 是流信息對象包含時(shí)長、碼率、采樣率等 length audio.info.length info audio.tags if info is None: print(f[無標(biāo)簽] {name} (時(shí)長 {length:.0f} 秒)) continue # 標(biāo)簽按字典訪問取不到就返回默認(rèn)值 title info.get(title) or info.get(TIT2) or 未知標(biāo)題 artist info.get(artist) or info.get(TPE1) or 未知歌手 print(f{name} | {artist} - {title} | {length:.0f}秒)運(yùn)行python scan_music.py你會看到類似輸出01.flac | 坂本龍一 - Merry Christmas Mr. Lawrence | 306秒 02.mp3 | 未知歌手 - 未知標(biāo)題 | 253秒 track.m4a | [無標(biāo)簽] track.m4a (時(shí)長 240 秒)代碼里有兩行需要解釋一下File()是 Mutagen 的萬能入口它會自動探測文件類型并返回對應(yīng)格式對象info.length是音頻時(shí)長秒info.bitrate是碼率。Vorbis 系格式用title/artist這樣的鍵名而 MP3 的 ID3 標(biāo)簽用TIT2/TPE1這樣的四字代碼所以代碼里用了or兜底。?? 進(jìn)階編輯技巧用 EasyID3 批量補(bǔ)齊 ID3 標(biāo)簽體檢之后就要動手修了。MP3 的 ID3 標(biāo)簽四字代碼對新手不友好好在 Mutagen 提供了EasyID3這個傻瓜接口把復(fù)雜的幀代碼包裝成了易記的鍵名上手幾乎沒有門檻。下面這段代碼演示如何給一批 MP3 批量補(bǔ)上標(biāo)題、歌手和專輯并統(tǒng)計(jì)每首歌的時(shí)長from mutagen.easyid3 import EasyID3 from mutagen.mp3 import MP3 files [song1.mp3, song2.mp3] # 你的文件列表 for path in files: # EasyID3 打開文件會自動創(chuàng)建不存在的標(biāo)簽 tags EasyID3(path) tags[title] 一首新的歌 # 對應(yīng) TIT2 幀 tags[artist] 你的名字 # 對應(yīng) TPE1 幀 tags[album] 我的第一張專輯 # 對應(yīng) TALB 幀 tags[tracknumber] 1/12 # 曲目號/總曲目 tags.save() # 關(guān)鍵保存才生效 # 順便讀出時(shí)長和碼率驗(yàn)證一下 info MP3(path).info print(f{path} - {info.length:.0f}秒, {info.bitrate // 1000}kbps)幾個必須知道的參數(shù)細(xì)節(jié)tags.save()不帶參數(shù)時(shí)默認(rèn)寫入 ID3v2.4 并兼容 ID3v1如果想兼容老設(shè)備可以傳v12, v2_version3寫成 ID3v2.3。tags[title]返回的是一個字符串列表因?yàn)槎鄶?shù)標(biāo)簽格式支持一值多存所以tags[title].append(另一首)這種寫法在 EasyID3 里會報(bào)錯正確做法是先取出來、改完再整體賦值。中文標(biāo)簽不用做任何編碼處理Mutagen 全格式支持 Unicode直接寫中文就行。對 FLAC、Ogg Vorbis、APE 這類 Vorbis 注釋格式的文件同樣代碼只需把第一行換成from mutagen.flac import FLAC或?qū)?yīng)的格式類title/artist這些鍵名完全一致。? 能力地圖Mutagen 一次能搞定多少種格式下面這張表讓你一眼看清 Mutagen 的勢力范圍格式分類支持的格式對應(yīng)模塊相對路徑MP3 系列MP3、MPEG-2/2.5含 Xing 頭解析mutagen/mp3/無損格式FLAC、APE、WavPack、TAK、OptimFROG、Monkeys Audiomutagen/flac.py、mutagen/apev2.py 等Ogg 系列Ogg Vorbis、Ogg Opus、Ogg FLAC、Ogg Speex、Ogg Theoramutagen/ogg*.py 等Apple 系MP4 / M4A / M4B支持封面與章節(jié)mutagen/mp4/微軟系WMA / ASFmutagen/asf/專業(yè)/其他AIFF、WAV、DSD(DSF/DSDIFF)、AAC、AC3、MIDI(SMF)、True Audio、Musepack對應(yīng)模塊同目錄通用標(biāo)簽全版本 ID3v2、APEv2 可跨格式讀寫mutagen/id3/、mutagen/apev2.py除了格式豐富還有兩個值得一提的隱藏能力流信息讀取audio.info.length、audio.info.bitrate、audio.info.sample_rate是所有格式通用的屬性做音頻分析非常方便。音頻標(biāo)簽處理工具的現(xiàn)成命令項(xiàng)目還內(nèi)置了mid3v2命令行編輯 ID3、mid3iconv批量轉(zhuǎn)換編碼、mutagen-inspect查看文件信息等實(shí)用工具裝完 Mutagen 就能在終端直接用。? 常見問題速答新手最容易踩的 3 個坑Q1運(yùn)行時(shí)報(bào)NoBackendError或File()返回 None怎么辦這通常意味著文件格式 Mutagen 不認(rèn)識或者文件頭損壞。先確認(rèn)文件是不是正常音頻用播放器打開試試再用File(path, easyTrue)試一次如果文件確實(shí)是特殊編碼的容器可能就是真的不支持。另外注意別把.mp3文件用.flac后綴重命名Mutagen 主要靠文件頭判斷類型但后綴錯誤也可能導(dǎo)致識別失敗。Q2修改后重新打開文件標(biāo)簽還在但播放器不顯示多半是播放器只認(rèn)舊版本標(biāo)簽。比如你寫入的是 ID3v2.4而老播放器只支持 v2.3。保存時(shí)改成tags.save(v2_version3)或者檢查一下是不是同時(shí)存在新舊兩套標(biāo)簽互相覆蓋必要時(shí)用tags.delete()清掉舊標(biāo)簽再重新寫。Q3給文件寫中文標(biāo)簽后變成亂碼Mutagen 本身全 Unicode 支持亂碼幾乎都發(fā)生在命令行傳參環(huán)節(jié)。Windows 的 cmd 默認(rèn) GBK 編碼建議在 Python 代碼里直接寫中文文件保存為 UTF-8或者用mid3iconv工具把舊標(biāo)簽編碼統(tǒng)一轉(zhuǎn)換成 UTF-8。記住用str傳值 Mutagen 會按 UTF-8 處理所以源碼文件務(wù)必保持 UTF-8 編碼。 更多資源與收尾引導(dǎo)想深入探索這幾份資料都在倉庫里直接按相對路徑查閱入門指南docs/user/gettingstarted.rst —— 官方最簡入門覆蓋基礎(chǔ)讀寫和 Unicode 說明用戶手冊docs/user/index.rst —— 包括 ID3、Vorbis 注釋、MP4 標(biāo)簽的詳細(xì)專題API 參考docs/api/index.rst —— 每個格式模塊的完整類與方法文檔可運(yùn)行示例docs/user/examples/fileobj-iface.py —— 教你用文件對象接口處理標(biāo)簽核心源碼mutagen/ —— 想搞清楚File()的探測邏輯看 mutagen/_file.py 準(zhǔn)沒錯回到開頭的場景那個對著 3000 首裸奔 FLAC 發(fā)呆的你現(xiàn)在只需寫一個循環(huán)腳本就能在幾分鐘內(nèi)完成批量補(bǔ)封面、統(tǒng)一曲目編號、清理亂碼標(biāo)簽的全部工作。處理完標(biāo)簽后再順手用audio.info.length統(tǒng)計(jì)一下整個曲庫的總時(shí)長成就感直接拉滿。Mutagen 的學(xué)習(xí)曲線真的只有一行代碼那么長現(xiàn)在就打開你的終端跑一遍上面的腳本去馴服你的音樂庫吧【免費(fèi)下載鏈接】mutagenPython module for handling audio metadata項(xiàng)目地址: https://gitcode.com/gh_mirrors/mut/mutagen創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考