大量轉換 iTunes 歌曲名稱的繁簡體中文的 AppleScript
是否曾經煩惱看不習慣 iTunes 裡顯示的曲目名稱是你看不懂的中文字體呢?例如你購買了一張大陸歌手的專輯,但 iTunes 抓到的曲目名稱是你所不習慣的簡體中文。Windows 有 ConvertZ 可以做到這件事,但 Mac OS X 可不能執行 ConvertZ 啊。
雖然我們知道在 Mac OS X 的「服務」功能表裡面,有「中文字轉換程式」,可以把中文在簡體和繁體之間轉換,但僅適用於可以反白選擇的文字範圍,就算你在 iTunes 裡選擇曲目,再執行 iTunes 功能表 → 服務 → 中文字轉換程式 → 轉換所選的簡體中文文字,但你會發現,IT DOES NOT WORK AT ALL!
一首一首改?你有更好的工具。
—
必備的工具及條件
- 終端機軟體。
可以使用內建的終端機 (位在 應用程式 → 系統工具 → 終端機),或使用開放原始碼的 iTerm。 - MacPorts 套件管理系統。
可以在這裡下載安裝,選擇 dmg 格式;在安裝之前,你要先安裝 Xcode。 - 你的帳號要有系統管理員的權限。
- 要轉換的歌曲名稱必須是 UTF-8 編碼
也就是你在 iTunes 看到的曲目名稱不可以是亂碼。你可以使用 ID3MOD2 來進行編碼更正。
下文所提及的「指令」都是在終端機軟體裡面操作的。
安裝 zh-autoconvert (libhz)
首先請下載並安裝 zh-autoconvert (libhz),這是一套可以在 BIG5 和 GB2312 編碼之間轉換的程式,轉換的同時還會自動轉換繁體和簡體。MacPorts 並沒有這套程式,官方網站上提供的 Tarball (.tar.gz) 解開來直接 make 編譯卻會發生編譯錯誤,所以只好抓 SCM 上面的原始碼回來編譯。不過 libhz 使用的 SCM 是 git,所以在抓回原始碼之前,要先透過 MacPorts 安裝 git:
sudo port install git-core
安裝的時間隨電腦硬體能力而異 (因為 MacPorts 安裝的軟體是要從頭開始編譯的)。
裝完了就可以透過 git 來取得 libhz 的原始碼:
git clone git://gitorious.org/libhz/mainline.git
接著你應該會在目前路徑裡看到一個名為 mainline 的資料夾,切換進去:
cd mainline
然後打入以下指令來編譯並安裝 libhz:
./autogen.sh
./configure
make
sudo make install
# [然後輸入你的密碼]
這樣 libhz 就裝好了。可以把 mainline 資料夾砍掉。
—
下載我寫的 AppleScript
請在這裡下載我爆肝寫出來的 AppleScript :
iTunes Song Name Converter between Chinese Varients Variants.zip
授權: GNU GPL v2.0
版權沒有,歡迎亂改 (不過改出來的東西也得是 GPL 相容的授權)
下載回來之後解壓縮開來,是一個 AppleScript 檔案,按兩下檔案,會開啟工序指令編寫程式。此時建議先按一下工序指令編寫程式視窗最下面的「Event 記錄」,切換到 Log 檢視,等下如果執行階段發生錯誤可以看。
—
操作方法
首先在 iTunes 裡選擇你要轉換歌曲名稱的曲目。同時不可以選擇繁體字和簡體字,我不知道會發生什麼事XD
然後回到工序指令編寫程式,按下工具列上的「執行」鈕 (綠色 Play 圓鈕),會詢問你轉換的方向:
選擇你要的方向,就可以進行轉換了。轉換過程出現的訊息與錯誤會出現在下方窗格的 Event 記錄裡面:
接著再回到 iTunes ,看看成果吧
—
已知問題
眼尖的你應該會發現,有少數一些曲目轉換出來的字會有問題。我想這可以是 BIG5 傳說中的許功蓋問題,遇到這種情況只能手動打字了。至於範例裡的「泵叉」,是因為我在做這個示範的時候,先把繁體 (「掙扎」) 轉換成簡體,就出錯了。
另外,因為轉換的過程是直接 call Shell Script,所以如果曲目名稱裡面有雙引號 (“),則執行過程會發生錯誤而停止。這個時候也只能針對出錯的曲目名稱手動打字。我知道這裡可以用 Escape Character 的方式來解決,不過我目前試不出來 XD
—
技術細節
其實我是在尋找如何透過 AppleScript 呼叫 Safari 執行 JavaScript 的時候,意外發現 AppleScript 可以執行 Shell Script,又剛好前幾天 PTT 的 Mac 板有人提問說怎麼做歌曲名稱的繁簡轉換 (#19LxF9jS),這會兒就讓我想到可以直接把轉換的程序丟給 Shell Script 做。
問題就在於,哪來的繁簡轉換程式?既然系統服務功能表裡面的中文字轉換程式是無法使用的,那就勢必要丟給第三方程式來做。上網搜尋了好久,終於讓我找到這篇文章裡面提到 iconv 的轉換秘技:
iconv是用来转换编码的小工具。现在的iconv在执行编码从gb2312到big5的转化时,实现了简繁转换。
我試了一下,發現 Mac OS X 內建的 iconv 並不支援這項秘技 (而 Ubuntu Linux 的 iconv 是有支援的),因此只好試試看 zh-autoconvert (libhz)。又因為 zh-autoconvert 在 Mac OS X 沒有 Binary Package 也沒有被收進 MacPorts ,又費了好一番工夫才搞到原始碼,編譯出來,的確可以進行繁簡轉換。
最後就是 AppleScript 怎麼寫的問題了。我從沒寫過 AppleScript,不過實際在網路上抄參考範例的時候,發現 AppleScript 真的很像英文…。所以就這樣搞了一個晚上…XD
—
應該要有的改進
事實上,透過轉換編碼的方式來轉換繁簡體,根本是偷吃步的招數。最佳解應該是有一個只接受 UTF-8 輸入輸出的程式,這個程式有一張繁簡對照表,透過這個表來轉換,也不用擔心什麼許功蓋的問題。當然我們知道在服務功能表裡面就有這個小程式,不過它的使用困難已經在前文提及了。OpenVanilla 的打簡出繁/打繁出簡不知道能不能用啊?
我的期望是,它應該是一個具備 GUI 的程式,有一個拖曳區,從 iTunes 或 Finder 拖曳歌曲進來 (這意味著需要轉換的曲目不一定要在同一個 Playlist 或顯示範圍) ,然後選擇要轉換的方向,它就會把曲目名稱、專輯名稱、演唱者和檔名都幫你轉好了。不過我不會 Cocoa Programming,這對我來說還是太難了一點。希望有人可以做出完整解就是了ˊˋ
update: 另請參考 uranusjr 所寫的 GUI 版本
—
抄來的參考程式碼
本程式的完成仰賴以下範例:
- 简繁转换 – Linux Wiki
- Applescript Forums | MacScripter / Check if file exists
- Working With AppleScript
- Doug’s AppleScripts for iTunes ♫ AppleScript Basics








耶,純手工,看起來很不錯。推!
還好我簡體的歌不多,所以我就在服務選單的簡繁轉換設了快速鍵,直接在 iTunes 裡改歌名。
有空也要來玩 AppleScript。
Chun
2009 年 一月 15 日 星期四 at 16:08:54
好久不見XD (你大概不記得我了, 很久以前有來過, 很久以前….)
原來你就是 ptt 的 duckseven 嗎?
關於 GUI, 蘋果有提供 AppleScript Studio, 可以用 AppleScript 來簡單操縱 Cocoa 介面, 達成事件導向和表格更新的功能, 也可以拖拉放, 應該可以滿足你這邊的需要.
如果你有灌 Developer Suite, 可以去 /Developer/Examples/AppleScript Studio/ 裡面看看, 有很多例子, 包括拖拉放的實作. 有興趣的話也可以討論看看, ptt 也有 MacDev 板, 雖然台灣玩這個東西的人好像不太多就是了…
uranusjr
2009 年 二月 10 日 星期二 at 14:46:12
@uranusjr:
對啊 我就是 PTT 的 ducksteven …XD
原來有範例啊,有空的話我再來玩玩看 :D
謝謝啊^^
Chitsaou Yorkxin
2009 年 二月 10 日 星期二 at 15:36:51
後來想想這真的沒必要動用到 AppleScript Studio, 我做了個 AppleScript Droplet bundle
http://dl.getdropbox.com/u/207871/Convert.zip
這個 app bundle 加上了 droplet 功能, 直接把 iTunes 歌曲或 Finder 項目拖到 app 圖示上就可以自動轉好
如果雙擊直接啟動, 那功能和本來的一樣, 除了一個部份:
為了增加可攜性和便利性, 我改用 Richard 編譯的 autoconvertx 取代了本來的繁簡轉換命令列程式, 並包在 app 裡面. 詳細的資訊都在程式碼裡, 直接用 Script Editor 打開 .app 就可以看到, 我附在檔頭
有另外的問題也可以直接問, 我稍後會在我自己家(點 id)寫關於這方面的內容.
對了, 不知道有沒有人講過, 你的程式名拼錯字, Chinese 寫成 Chiese XD
uranusjr
2009 年 二月 10 日 星期二 at 19:55:45
[...] 這是我從 Yorkxin(duckseven @ ptt.cc)那邊偷來的。他用 AppleScript 和兩個命令列程式寫了一個繁簡轉換程式,但他認為還需要改善。 [...]
Smaller Things » iTunes 歌曲名稱繁簡轉換
2009 年 二月 10 日 星期二 at 20:26:18
@uranusjr:
Cool!!
我把你的文章連結放到我的文裡好了 XD
然後因為我是熬夜寫這篇的 = = 所以有很多地方寫錯字囧
Chitsaou Yorkxin
2009 年 二月 10 日 星期二 at 20:35:04