flac を alac に変換する
created: 2021/3/6
背景
諸事情あって Youtube Music から Apple Music に音楽ライブラリを移行することになった
Apple Music に手元の音楽ライブラリをアップロードするには、どうやらまず Music.app に音楽ライブラリをインポートし、Music.app の機能を使って Apple Music と連携させる必要があるらしい
一方で、Music.app は flac の読み込みに一切対応していない
最近音源をflacで取り込むようにしたので、これだと困る
どうしよう…
方針
flac を諦める
Apple ははるか昔から flac と同じロスレスフォーマットである alac を押していて、flac に対応する気のない状況が少なくとも10年続いているようだった
今後近いうちに Music.app が flac をサポートすることはまず無いと思われるので、flac を諦めるのが妥当
手元の flac を alac に変換する
これで Music.app にインポートできるようになる
どちらもロスレスフォーマットなので、変換による音質の劣化の心配はないはず (あってる? / まあ若干劣化があっても人間には気にならないものであろう…)
もし Apple Music から脱出することになったら、その時は alac => flac に変換し直せば良い
メタデータを維持したまま alac に変換する
メタデータが全部消えて付け直しになると悲惨なことになるので、メタデータは維持したい
一部欠損があっても良いけど、少なくとも変換後の音源をMusicBrainzに読み込んだ際に、その音源がMusicBrainz上のどのデータと対応するかに関するメタデータは残しておきたい
これさえあれば、一部のメタデータが欠損しても、MusicBrainzで自動で付与し直せるはず
MusicBrainz のメタデータを維持したまま alac to flac してくれる converter は実はあまりない
ffmpegで実験したところ、titleやartist、albumなど主要なメタデータしか維持してくれなかった
色々なツールを試してみたところ、XLD は MusicBrainz のメタデータを維持したまま変換してくれるようだったので、XLD を使って変換することに
flac を alac に変換する
まず現在のディレクトリ構成を確認する。MusicBrainzのファイル名変更機能でディレクトリ構成を管理しているので、以下のような感じで整ったディレクトリ構成になっている。過去にCDの取り込み方を何度か変えた関係で、.mp3/.m4a/.flacの3つのフォーマットが混在している。
code:text
$ exa --tree music/main
music/main
├── 2011-02-02-コネクト
│ ├── 01 コネクト.mp3
│ ├── 02 Dreamin'.mp3
│ ├── 03 キミとふたり.mp3
│ └── 04 コネクト -TV MIX-.mp3
├── 2019-05-29-セイシュンゼミナール _ Never Give It Up!!
│ ├── 01 セイシュンゼミナール.m4a
│ ├── 02 Never Give It Up!!.m4a
│ ├── 03 セイシュンゼミナール (Remix Ver.).m4a
│ ├── 04 Never Give It Up!! (Remix Ver.).m4a
│ ├── 05 セイシュンゼミナール (Instrumental).m4a
│ └── 06 Never Give It Up!! (Instrumental).m4a
├── 2020-07-15-芽ぐみの雨
│ ├── 01 芽ぐみの雨.flac
│ ├── 02 彼は誰星.flac
│ ├── 03 芽ぐみの雨 _instrumental_.flac
│ └── 04 彼は誰星 _instrumental_.flac
...
code:console
$ # セットアップ
$ git clone git@github.com:mizdra-sandbox/flac2alac.git
$ cd flac2alac
$ yarn install
$ # 変換前に flac が何ファイルあるのか確認
$ find music/main -name '*.flac' | wc -l
1143
$ # 変換 (マシンの CPU 数に応じて XLD のプロセスを並列で立ち上げて変換してくれる)
$ yarn run flac2alac music/main dist-alac/
$ # ちゃんと flac のファイル数と対応しているか確認
$ find alac -name '*.m4a' | wc -l
1143
変換前後で一部メタデータが欠けてしまっているはずなので、dist-alacをD&Dして MusicBrainz に読み込ませ、欠けてしまったメタデータを付け直す。mizdra.icon の場合はISRCとMusicBrainz トラック IDが欠けていた。それ以外のメタデータは無事だったので、D&Dした際に自動で MusicBrainz 上のデータと突き合わせてくれて、一瞬でメタデータの付け直しを終えることができた。良かった。
https://gyazo.com/e02dce106d370cc35a294a5f75fc1939
ここまで来れば flac はもう不要なので削除してしまう。さっきセットアップしたお手製ツールに削除コマンドも bundle されているので、これを使って削除する。
code:console
$ find music/main -name '*.flac' | wc -l
1143
$ yarn run rmflac music/main
(削除する前に削除するファイルを一覧してくれるので、間違いがないか確認して y を入力する)
$ find music/main -name '*.flac' | wc -l
0
おわり。