把 200 張專輯的 cue 分軌轉成單曲檔:我留下的腳本與代價

这篇内容暂时只有 繁體中文 版本,以下是原文。

整理硬碟時翻出一批 2012 年前後抓的無損專輯,大多是整軌 FLAC 加一個 .cue。播放器換過幾輪之後,這些檔案在手機上只剩一個 40 分鐘的長條,跳歌要手動拖。我決定把它們拆成單曲,順便把 tag 補齊。

環境是 macOS,工具用 shnsplit 加 cuetag,兩個都在 mac 上要自己編。先確認 cue 的編碼——這批有一半是 Big5,直接用會亂碼:

for f in *.cue; do
  iconv -f BIG5 -t UTF-8 "$f" > "${f%.cue}.utf8.cue" 2>/dev/null || cp "$f" "${f%.cue}.utf8.cue"
done

拆分本體:

shnsplit -f album.utf8.cue -o flac -t "%n - %t" album.flac
cuetag album.utf8.cue *.flac

-t 的格式字串決定檔名,我用「軌號 - 曲名」,因為之後要丟進 foobar2000 排序,前綴留著比較好抓。代價是檔名會出現 ? 和 /,得再清一輪:

for f in *.flac; do mv "$f" "$(echo "$f" | tr '/?*' '___')"; done

為什麼不乾脆用圖形工具?我試過兩套,遇到 cue 裡沒有 INDEX 01 或 PREGAP 寫法不一致就會整張失敗,而且失敗時不告訴你是哪一行。命令列至少錯在哪看得見。另一个取捨是 shnsplit 按 frame 切,遇到 live 專輯的 seamless 段落會有極短的爆音,這是它和原始整軌的差異,不是檔案壞了。

失效的地方我踩過幾個:cue 裡 FILE 指向的檔名和實際檔案不一致時,shnsplit 會直接找不到;多檔案的 cue(一張專輯拆成 track01.flac、track02.flac)不能這樣跑,要改成逐檔對應;還有日文專輯的 cue 用 Shift-JIS,iconv 要換成 SHIFT-JIS,我當初傻傻用 BIG5 硬轉,出來的曲名全是問號,只能整批重跑。另外 cuetag 只讀 cue 裡的 TITLE 和 PERFORMER,專輯層的年份、genre 它不管,那些我事後用 foobar2000 的 masstagger 補。

200 張跑完大概四十分鐘,中間手動修了十幾張失敗的。腳本沒有做成通用工具,因為每批 cue 的髒法都不一樣,與其寫一個什麼都吃的大程式,不如留這幾行,下次遇到再改。

想問的是:你們遇到 cue 跟音檔對不上、又不想整張重抓的時候,是手動改 cue 還是直接放棄分軌?我目前是前者,但改到第五張就開始懷疑人生。

0
赞同度 100% · 0 条评论 · 4 阅读

0 条评论

支持 Markdown · 回复会实时推送给对方

还没有评论,写下第一条。