rekordboxのコレクションをCUE情報などを維持したままmp3にエンコードする手順
対象者
- rekordboxに既存の音楽ライブラリ(iTunesなど)をまとめて放り込んで使っている
- 既存の音楽ライブラリがmp3ではない
- 既に大量にCUE打ちをしており今更やり直したくない
- 今後もmp3ではない形式で基本的に管理し、適宜mp3にしたい
- Windowsユーザー(本記事ではpowershellスクリプトを使用します)
背景
元々iTunesで曲を管理していたのですが、興味本位でrekordboxをインストールした際にそのままiTunesライブラリをコレクションに入れてそのまま運用していました。
そしてiTunesはwavのタグを読み取れない大変歴史あるソフトのため、可逆圧縮であるALACで管理していました。
rekordbox自体や一部のDJ機材はALACでも読み取れますが、USB書き出しをして持ち運ぶとなるとmp3一択になります。
ということでCUE打ちなどのデータを何も失わないまま、全データをmp3にする手順を確立する必要がありました。
そして今後も楽曲管理はiTunesかつALACで行いたいため、ある程度気軽に全楽曲の変換が出来る必要があります。
ただし、所持楽曲は1万曲を超えるため、毎回全ての楽曲ファイルのエンコードはしたくありません。あくまで必要な範囲でのエンコードに留める必要があります。
要件
必須事項
- 元のライブラリは破壊しない
- 元のライブラリのフォルダ構造を全て維持したまま、mp3以外をmp3に変換する
- 毎回全ファイルのエンコードが走らない
- 元ファイルの場所が移動したら追従する(ミラーリング的な)
- 元ファイルのタグデータが変更されたら追従する
- mp3であればハッシュ比較をし、違ったらコピーする(エンコードはしない)
- それ以外であれば主要なタグを比較する
無理なこと
- マイタグ情報 (rekordbox.xmlにマイタグ情報が載らないため無理)
- どうせいわゆるCDJ系ではマイタグが見れないので許容します
- SYNCMANAGERによる同期 (コレクションに対してしか使えないため)
手順
環境作り
必要なもの
エンコードにはffmpegを、音楽ファイルのタグデータ読み取りにtaglib#を使ってます。
後者は特に理由はなく、もっと早いものがあれば変えたい。
ライブラリ変換
何はともあれまずは既存のライブラリを変換する必要があります。
以下のPowershellスクリプトを実行します。
- 元となるライブラリのパス & 出力先にするパス を適宜変えてください。
- ffmpegのパスやtaglib-sharpのパスは適宜変えてください。
- mp3、m4a、wav以外の拡張子は無視してます。適宜変えてください。
- ログを吐くので、全部済んだらffmpegでエラーが出ていないかなど軽く見てあげてください。
- メモ
- mp3のハッシュ比較はあくまで比較さえ出来ればいいのでMD5でやる(デフォルトのSHA256は遅すぎる)
- ファイル名に特殊文字(ワイルドカード系)があっても動作するように
-LiteralPath
で諸々やる - 音楽ファイル以外に対して処理しないよう弾く
- タグ比較の際、うまくタグが取得できず同一なのにエンコードが走ることがあるが、許容できる頻度なので無視
rekordbox.xmlの準備
rekordboxからxmlを出力し、パスをエンコード済ライブラリを指すように置換します。
出力はメニューにあるので実行するだけ。
あとはそれを開いてVSCodeとかで正規表現ONにして置換すればOK。
F:/Musics/iTunes/iTunes%20Media/Music/(.*)\.(mp3|m4a)
F:/Musics/convertedLibrary/$1.mp3
rekordboxからxmlを読み込ませる
設定から編集済のxmlのパスを指定すればOK。
そうすると、ライブラリにいつものコレクションと変換済のmp3ライブラリが同時に見えるようになります。
ちゃんと曲をロードするとCUEなどの情報は残っています。大成功!
あとはUSBにエクスポートすればOK!
さいごに
必要な分だけエンコードが走るので、初回は時間がかかりますが2回目以降はそれなりに早いです。
mp3以外でやってるなら大変だぞと言われ続けていたので、思ったよりあっさり変換できて安心しました。
可逆圧縮という言葉が好きなので、これからも楽曲はALACで管理していこうと思います。
Discussion