面對數百首從 CD 轉錄、檔名雜亂、標籤缺失的鳥鳴音訊檔,你會選擇手動一首首修改,還是開發一套具備「生物學智商」的自動化系統?
我起初的想法很單純:在野外走動時,如果聽到鳥聲,我希望能有機會辨識出那是哪隻鳥。於是,企鵝給了我一大包鳥鳴音檔。我只是想找個容易的方式,能隨時翻出想聽的聲音來學習,結果為了這個簡單的願望,就乾脆擼出了這套工具。
這篇文章記錄了 birdsong-processing-kit 的誕生過程:我們如何利用 Gemini AI 與 iNaturalist 生物資料庫,將 816 首混亂的 MP3,轉化為具備「綱、目、科、屬」專業階層、內嵌高清封面與詳細標籤的數位資產。
🎯 核心目標:建立聲音的「數位孿生」
我們擁有的原始資料非常雜碎:有的檔名是「3-55」,有的標籤是日文,有的則是空白。這次自動化改裝的核心目標有三:
- 結構化分類:按生物學階層(綱/目/科/屬)重新組織目錄。
- 資訊厚化:自動注入 iNaturalist 的標準中文名、學名、以及物種封面圖片。
- 溯源管理:在 ID3 標籤中保留原始路徑,確保搬移後依然能追蹤來源。
🛠️ 實作方法:身分校對三部曲 (Identity Cascade)
在開發過程中,我們建立了一套名為「識別決策瀑布」的邏輯,以達到準確度與成本的平衡:
1. 文字優先 (Text-First Discovery)
過度依賴 AI 聽音辨位既昂貴又緩慢。系統會先遍歷原始 ID3 標籤與檔名,清洗掉序號與雜訊,產生候選清單,並優先查詢 iNaturalist API。只要文字比對能獲得精確分類,就不啟動 AI。
2. AI 聽聲辨位 (Gemini 2.5-flash)
針對完全沒有名稱資訊的音軌,系統會自動上傳音訊至 Gemini 2.5-flash。透過 Flash 模型強大的多模態理解力,讓 AI「聽完」後回傳 JSON 格式的識別報告,作為識別的最強墊底方案。
3. 分類中文化校正
iNaturalist 的高階分類(如目、科)往往只有英文或拉丁文。我們另外調用了 Gemini 2.5-flash 針對識別出的學名清單進行批次翻譯,確保目錄結構呈現如「鴞形目/鴟鴞科」這樣的純中文專業觀感。
🚧 遇到的挑戰與克服之道
挑戰 A:AI 成本與處理速度的矛盾
困境:全量 800 多筆若全部上傳辨識,不僅 Token 消耗大,且速度緩慢。
克服:實施「文字預檢」機制。透過 mutagen 深度挖掘 ID3 標籤中的「隱藏資訊」,將 80% 的檔案在文字階段就完成對合,剩餘的 20% 才交由 AI 處理。
挑戰 B:生物分類的標準性
困境:iNaturalist 的資料在不同 locale 下回傳不一。 克服:建立標準化 translation 腳本,手動建立高頻「目/科」對照表,輔以 AI 全面校對,達成 100% 的綱目科中文化。
挑戰 C:瑣碎資料與無盡的 Debug
困境:別看最後的目錄整整齊齊,開發過程其實極其煩躁。原始資料非常瑣碎、非標準化,且 iNaturalist API 的回傳結果充滿例外狀況(例如查「麻雀」跑出「鴞形目」的聯集窘境)。 克服:這沒什麼高深技術,純粹是靠著「遇到 bug 殺一個、遇到瑣碎資料補一條規則」的耐心。中間經歷了多次邏輯推倒重來,才慢慢把這團亂麻理順。
📦 釋出策略與私下協作
考慮到音訊版權與隱私問題,birdsong-processing-kit 目前採取「非公開釋出,私下分享」的策略:
- 工具包與資料分離:釋出時分為兩個壓縮檔:
birdsong-processing-kit.zip:包含所有 Python 處理腳本、README、使用手冊與技術報告。BIRDSONGS_REORGANIZED_POC.zip:包含實際重構後的音訊資料夾。
- 跨環境移植指南:在工具包中附帶了詳細的 README,說明其他使用者如何透過全局取代絕對路徑,在自己的電腦上接手執行。
💡 結語
開發這個工具包不只是為了整理硬碟,更是一次將 AI 幕僚長融入日常資料管理流程的實踐。透過「狀態機管理 (State Management)」確保執行穩定,透過「AI 翻譯」校準語感。現在,只要輸入一個指令,我的電腦就能變身為專業的鳥鳴點歌機。
如果您對這套自動化編目流程有興趣,歡迎私下與我交流。