MENU

iTunesの全楽曲&プレイリストをNASに移行しました。

ふと思いつき、1ヶ月ほどかけて、デスクトップPCのiTunes(現「ミュージック」アプリ)にローカル保存している楽曲データ&プレイリストを、NASに移行しました。

NAS(Network Attached Storage)とは、ざっくり言えば遠隔でアクセスできる外付けハードディスク、あるいは自家製のクラウドストレージのようなものです。小型の箱状のデバイスで、自宅やオフィスのネットワークに繋げて設置します。

音楽鑑賞といえば時代はサブスクですが、筆者は古馴染みの曲を永久に聴くのが好きなので、所有している楽曲データに今後もより便利にアクセスできるようになりたい!というモチベーションでした。

筆者がiTunesの楽曲&プレイリストをNASに移行したモチベーション

  • 子供の頃からコツコツCDから取り込んできた楽曲たちを、いつでもどこでも再生できるようになりたい。
  • 実家のデスクトップPCにしか保存していない楽曲データを、バックアップの取りやすいNASに移動しておきたい。
  • 実家のデスクトップPCからだけでなく、ノートPCからも、CD取り込みができるようにしたい。
  • iPhoneからAndroidスマホに近々買い換えたいので、Apple依存から少しずつ脱却していきたい。

今後同じようなことをされる方がいるかもしれないと思い、記録として本記事を書きました。iMacのOSが古いので「iTunes」ですが、現「ミュージック」アプリもライブラリの構成はだいたい同じようなので、同様の手順になるかと思います。

なお、本記事は以下を前提としています。

  • NASサーバを構築済みで、移行元のPC(iMacなど)からストレージにアクセスできる。
    • ※NAS以外のストレージ(外付けハードディスクなど)にも移行は可能ですが、ストレージ上の楽曲ファイルを再生する手段が別途必要です。
  • NASクライアント(スマホなど)からNAS上の楽曲ファイルを再生できる。
  • NASクライアント(スマホなど)からNAS上のM3Uファイルを元にプレイリストを参照でき、再生できる。
筆者

ぜひ、ご参考にどうぞ!!

目次

0. 移行元・移行先の情報

  • 移行元:デスクトップPC(iMac 13,2、2012年製)
    実家に設置してあり、CDを取り込み続けて12年以上、全8,715件の楽曲ファイルをローカル保存しています。環境の詳細は脚注1を参照。
  • 移行先:NASサーバ(Synology DS218、2017年製)
    同じく実家に設置してあります。Synology社は、インターネット経由でNAS上の楽曲ファイルを再生できる「Audio Station」というアプリケーションを提供しています。環境の詳細は脚注2を参照。
  • 楽曲再生クライアント:スマートフォン(iPhone 12 mini、2020年製)
    Synology社製の「DS Audio」というクライアントアプリで、インターネット経由でNAS上の「Audio Station」サーバにアクセスできます。「Audio Station」はPCなどのWebブラウザ上でも楽曲を再生できますが、PC上で楽曲を再生するケースは個人的にはほとんどないので、本記事ではスマートフォン上での楽曲再生のみを目的としています。環境の詳細は脚注3を参照。

1. 楽曲データの移行

1.1. 移行元のフォルダパスを特定(iTunesの全楽曲データを格納している場所)

iTunes(現「ミュージック」アプリ)上で、適当な1曲を選択して右クリックし、「Finderで表示」をクリックすると、Finder上で元データの楽曲ファイルを特定することができます。

図1.1. iTunes上の1曲を選択して右クリック

複数のファイルについて同じことをすれば分かりますが、iTunesでは全楽曲データが以下のようなパスのフォルダにまとめて格納されています。(加えて、Appleデバイス上の動画やアプリ、ゲームといったデータも含まれています。)

移行元のフォルダパス: /Users/<Macのユーザ名>/Music/iTunes/iTunes Media

現「ミュージック」アプリでも同様の手順で確認できますが、フォルダパスは上記と異なります。

「Finder」アプリ上で、ファイルパス(またはフォルダパス)をコピーすることができます。ファイルを右クリックしてメニューを表示させた状態で「option」キーを押したままにすると、メニューのうち「”<ファイル名>”をコピー」が「”<ファイル名>”のパス名をコピー」に変わるので、「option」キーを押したままその項目をクリックします。

1.2. NASのマウント

移行元のフォルダを特定したので、次は移行先のフォルダを決定したい所ですが、そのために「Finder」アプリ上でNASの中身にアクセスできるようにしておきます。

いくつか方法があるかと思いますが、今回はNASサーバ上でSambaサーバを立てて、Mac上のSambaクライアントでマウントする方法を採用しました。

初めはSambaではなくWebDAVを利用しようとしましたが、実験的に移行したファイルの権限や最終更新日が変更されてしまったので、WebDAVは採用しませんでした。

1.2.1. NASサイド:Sambaサーバの起動(Synology DSM)

Synology社製のNASサーバでは、GUI(DSM)上からSambaサービスを起動できます。
以下のURLをWebブラウザで開いて、NASサーバのDSMにアクセスします。管理者権限を持つユーザでログインすることで、アプリ「コントロールパネル」を開くことができます。
http://QuickConnect.to/<NASサーバに設定したQuickConnect ID>

アプリ「コントロールパネル」 > メニュー「ファイルサービス」 > タブ「SMB」を開き、「SMBサービスを有効化」のチェックボックスを付けて「適用」することで、起動が完了します。

図1.2. Synology DSM上でのSambaサービスの起動

1.2.2. Macサイド:Sambaクライアントによるマウント

Mac上で「Finder」アプリを開き、上部メニューから「移動」>「サーバへ接続」をクリックします。「サーバアドレス」の入力を求められるので、上の図1.2.に指示のある通り、以下のURLを入力します。
smb://diskstation

図1.3. Finderから「サーバへ接続」

接続できればユーザ認証を求められるので、NASユーザのログインIDとパスワードを入力します。これにより、「Finder」上で、以下のようなフォルダパスとしてNASの中身にアクセスできるようになります。
/Volumes/<NASサーバ上のトップフォルダ>

図1.4. Finder上でNASの中身にアクセスできる

私の環境では、iMacとNASサーバが同じネットワークにある(同じWi-Fiルータに接続している)ので、上記手順でアクセスできました。
別のネットワークにある場合は、「Tailscale」といったサービスを利用して安全なVPN網を構築することで、インターネット経由でマウントすることができるはずです。本記事では「Tailscale」の設定手順は紹介しませんが、その場合に「Finder」から接続するサーバアドレスは以下です。
smb://<Tailscaleで発行したNASサーバのIPアドレス>

1.3. 移行先のフォルダパスを決定(全楽曲データを新しく格納する場所)

「Finder」上でNASの中身をブラウズできるようになったので、移行先のフォルダパスを決めておきます。

Synology社製の楽曲再生サービス「Audio Station」が管理する楽曲ファイル用フォルダは、デフォルトで/musicとなっています。そこに今回の移行用のフォルダを作成して、以下のパスのフォルダを移行先とすることとしました。

移行先のフォルダパス: /Volumes/music/iTunes_backup_2025_04

1.4. NASへの全楽曲データのコピー

移行元と移行先が決まったので、実際にデータをコピーします。

対象のデータサイズが大きいことから、全てコピーし切るまで10時間を超えることが予想できます。その中で万一、途中で処理が落ちてしまったら最初からやり直しになってしまいます。また、処理が完了したあとに、本当に全てのファイルが漏れなく破損なく複製できているのかを、大切なファイルだからこそ確認したいです。

そこで、iMacの画面上でコピペ作業をするのではなく、ターミナル上でrsyncコマンドを使ってコピーしました。その手順は以下の別記事にまとめましたので、ご参照ください。

1.5. NASの楽曲再生アプリでの再生チェックと対処

今回の移行の最終目的は、Synology社が提供するスマートフォンアプリ「DS Audio」上で、NAS上の楽曲ファイルを再生することです。「DS Audio」は多くの形式の楽曲ファイルに対応していますが、一部形式のファイルは再生できません(詳細は「Audio Station」の技術仕様4を参照ください)。したがって、ファイル形式ごとに問題なく再生できるかどうかを確認する必要があります。

1.5.1. コピーしたファイルの拡張子一覧の確認

ファイル形式の全容を把握するため、まずは拡張子一覧を確認します。

iMac上で「ターミナル」アプリを開き、以下のコマンドを実行します。これにより、今回移行したファイルについて、拡張子とその件数を一覧で確認できます。

COPY_DESTINATION_PATH='<移行先のフォルダパス>'
find "$COPY_DESTINATION_PATH" -type f | awk -F/ '{print $NF}' | awk -F. '{print $NF}' | sort | uniq -c | sort -r

筆者の環境では、以下のようになりました。

表1.1. 筆者が移行したファイルの拡張子一覧

拡張子ファイル件数「DS Audio」対応
m4a5,965△:M4Aファイルは、格納している楽曲のコーデックにより再生可否が分かれます。
mp32,725○:MP3ファイルはそのまま再生可能。
mp4134△:動画ファイルは再生不可のため要変換。
ipa120 – :iOS向けのアプリケーションのファイルで、楽曲情報を含まないので削除対象。
m4v97△:動画ファイルは再生不可のため要変換。
strings29 – :Mac上で使われるテキストファイルで、楽曲情報を含まないので削除対象。
wav23○:WAVEファイルはそのまま再生可能。
m4p2△:M4Pファイルは著作権保護されているため、Apple IDで認証されたデバイス以外では再生不可。
MP32○:MP3ファイルはそのまま再生可能。

なお、特定の拡張子を持つファイルの一覧を確認したい場合は、「ターミナル」アプリで以下のコマンドを実行します。

COPY_DESTINATION_PATH='<移行先のフォルダパス>'
TARGET_EXT='<対象の拡張子(ドットより右側)>'
find "$COPY_DESTINATION_PATH" -type f -name "*.$TARGET_EXT"

1.5.2. 不要なファイルの削除

表1.1.で確認した通り、いくつか不要なファイルがあるので、NASから削除します。

  • iTunesで使われていた楽曲以外のファイル(*.ipa、*.strings)
    不要なのでそのまま削除しました。
  • 動画ファイル(*.mp4、*.m4v)
    内容をすべて確認したところ、楽曲に相当する動画ファイルは1つもなかったので、今回はMP3ファイルなどの楽曲ファイルに変換することはしませんでした。必要な動画は別のフォルダに移動して保管し、それ以外の動画は全て削除しました。
  • M4Pファイル
    M4Pファイルは著作権保護(DRM)がかかっているため、Apple IDで認証されたデバイス以外では再生できません。今後はApple依存から脱却していきたいことと、そもそも「DS Audio」アプリがM4Pアプリの再生をサポートしていないこともあるので、M4Pファイルは削除しました。

iTunesで購入した古いM4Pファイルは著作権保護がかかっていない場合もあるようなので、拡張子を変えてM4Aファイルにするなどして、一度再生を試してみるほうがよいかもしれません。筆者の場合は、同じ楽曲が別のアルバムのM4Aファイルとして存在していたので、潔く削除に踏み切れました。

もしM4Pファイルを削除せずに再生できるようにしたい場合は、著作権保護(DRM)を解除せずに、新規MP3ファイルとして再収録するツールがあるようです。著作権保護(DRM)を解除することは違法になる場合があるようなので、私的利用の範囲でもやめておきましょう。

1.5.3. MP3ファイルの再生テスト

不要なファイルを除くと、筆者の所有する楽曲ファイルは、MP3ファイル・WAVEファイル・M4Aファイルの3種であることがわかりました。

MP3ファイルのデータは「MP3」コーデックしかないので、「Audio Station」の技術仕様[4]にて、iOS上での再生がサポートされている、と記載されている以上問題ありません。実際にいくつかを「DS audio」アプリ上で再生してみましたが、問題ありませんでした。

コーデックとは、楽曲データを変換してファイルにまとめる方式のことです。なぜ変換する必要があるかというと、生の楽曲データよりも小さいデータサイズに変換することで、ファイルを保管したり送受信したりしやすくなるからです。データサイズをなるべく小さくすることと、楽曲の品質をどれだけ生データのままにできるかがトレードオフになるので、需要に応じて様々なコーデックが存在します。

Synology社製のNASサーバの場合、楽曲ファイルを新しく格納したあとに「再インデックス」をしないと、「Audio Station」アプリ上で楽曲が正しく認識されない場合があります。アプリ「コントロールパネル」 > メニュー「サービスにインデックスを付けています」を開き、「再インデックス」ボタンをクリックします。

1.5.4. WAVEファイルの再生テスト

MP3ファイルと異なり、WAVEファイル・M4Aファイルはコンテナフォーマットと呼ばれるもので、「箱」として様々なコーデックのデータを格納することができます。なので、どのコーデックの楽曲データが入っているかは一見して分かりません。

とはいえ、標準的なWAVEファイルには、「LPCM」というコーデックのデータが格納されていることが多いようです。また「Audio Station」の技術仕様[4]においても、iOS上での再生がサポートされていると記載されているため、基本的には再生できるものと思われます。実際に23ファイル全てを「DS audio」アプリ上で再生してみましたが、問題なく聴くことができました。

1.5.5. M4Aファイルのコーデック一覧の取得

一方で、M4Aファイルの標準的なコーデックは「ALAC」または「AAC」です。

このうち「ALAC」はApple Lossless Audio Codecの略で、基本的にはAppleデバイス上で再生するためのコーデックです。よって、「Audio Station」の技術仕様[4]に記載の通り、iOS上での再生はサポートされていますが、Android上では再生がサポートされないです。筆者はiPhoneからAndroidスマホに近々買い換えたいと思っているので、所有するM4Aファイルにどの程度「ALAC」コーデックのファイルが含まれるのかを知っておきたいです。

そこで、「ターミナル」アプリで、以下のコマンドを<Macのユーザ名>を書き換えた上で実行し、Bashスクリプトを作成して簡単にチェックしていきます(複数行に渡っていますが、1つのコマンドです)。このBashスクリプトにより、全M4Aファイルが「ALAC」なのか「AAC」なのか「その他のコーデック」なのかを判別できます。

echo '#!/bin/bash

# 第一引数が指定されているか確認
if [ -z "$1" ]; then
  echo "使用方法: $0 <フォルダパス>"
  exit 1
fi

TARGET_DIR="$1"

# ffprobeのパスを明示(必要に応じて調整)
FFPROBE="/Users/<Macのユーザ名>/Downloads/ffprobe"

# 指定フォルダ以下のすべての .m4a ファイルを検索
find "$TARGET_DIR" -type f -name "*.m4a" | while IFS= read -r file; do
  # ffprobe で音声コーデック名を取得
  codec=$("$FFPROBE" -v error -select_streams a:0 -show_entries stream=codec_name \
    -of default=noprint_wrappers=1:nokey=1 "$file")

  # コーデック名で分類
  case "$codec" in
    alac)
      echo "$file <-> ALAC"
      ;;
    aac)
      echo "$file <-> AAC"
      ;;
    *)
      echo "$file <-> その他のコーデック ($codec)"
      ;;
  esac
done

echo "$0 process done!"
' > print_codec_of_m4a_files.sh

ここで作成したBashスクリプトprint_codec_of_m4a_files.shを実行するためには、「FFprobe」というツールを実行環境(Mac)にダウンロードする必要があります。以下のWebページを開き、「FFprobe」のセクションからffprobe-xxxxxx-xxxxxxxxxxx.7zといった7Zファイルをダウンロードし、解凍します。すると、実行ファイルが/Users/<Macのユーザ名>/Downloads/ffprobeとして配置されます。
https://evermeet.cx/ffmpeg/

引き続き以下のコマンドを実行し、Bashスクリプトを実行します。

COPY_DESTINATION_PATH='<移行先のフォルダパス>'
chmod +x ./print_codec_of_m4a_files.sh

./print_codec_of_m4a_files.sh "$COPY_DESTINATION_PATH" \
> ./codec_$(date +%Y%m%dT%H%M%S).log \
2> ./codec_error_$(date +%Y%m%dT%H%M%S).log

コマンドが完了するまで待機します。筆者の場合、5,965件のM4Aファイルのコーデックを書き出すのに5分程度かかりました。完了したら、以下のコマンドで標準出力ログファイルの末尾を確認します。

ls -l ./codec_????????T??????.log

tail <↑で確認した標準出力のログファイル名>

./print_codec_of_m4a_files.sh process done!と最後に表示されていれば、正常に実行完了しています。以下のコマンドを実行し、念のため標準エラー出力のログも確認しておきます。何か致命的なエラーが表示されていなければ問題ないです。

ls -l ./codec_error_????????T??????.log

cat <↑で確認した標準エラー出力のログファイル名>

以下のコマンドを実行することで、「ALAC」コーデックや「その他のコーデック」のファイルを一覧で確認できます。

grep 'ALAC' <↑で確認した標準出力のログファイル名>

grep 'その他のコーデック' <↑で確認した標準出力のログファイル名>

結論、筆者の環境では「ALAC」コーデックや「その他のコーデック」のファイルは1件もなく、全て「AAC」コーデックであることがわかりました。

Androidスマホで「ALAC」コーデックの楽曲ファイルを再生したい場合は、以下のような対応をする必要があるかもしれません。
・Androidスマホに、ALAC再生に対応しているクライアントアプリを別途インストールする。
・「ALAC」コーデックの楽曲ファイルをすべてMP3など再生できるコーデックに変換する。

1.5.6. M4Aファイル(AACコーデック)の再生テスト

ここまでで筆者の環境では、M4Aファイル=「AAC」コーデックということがわかりました。

「AAC」で注意が必要なのは、2023年8月1日以降はSynology社製のNASサーバ上でのトランスコーディングが非対応になっていることです。ただし、以下のプレスリリース5にもある通り、現在ではほぼすべてのデバイス側で再生が可能になっているということなので、基本的にこれが問題になることはなさそうです。

AACでエンコードされたコンテンツは、現代のデジタルメディアとともに数年前から主流になり、スマートフォン、タブレット、スマートテレビを含むほぼすべてのデバイスによって再生できます。そのため、サーバー側のトランスコーディング サポートは過剰な機能となりました。

— サーバー側のAACトランスコーディング提供中止について | Synology Inc.

筆者の所有するM4Aファイルは5,965件存在するので、さすがに全てを再生テストしてみる訳にはいかないのですが、適当に数十曲をスマートフォンで再生テストしてみると、確かに問題なく再生できることを確認しました。

1.5.7. 再生できないM4Aファイルの対処

ところが、(これは偶然見つけたのですが、)ある一部のM4Aファイルだけ再生できないことがわかりました。再生できるM4Aファイルとの差異を考察したところ、「Windowsの『メディアプレーヤー』アプリで、『AAC』コーデックでCDから取り込んだ楽曲ファイル」であることがわかりました。

どうやら、「AAC」コーデック自体にも「AAC-LC」や「HE-AAC」といった複数のプロファイルがあり、互換性がないものも存在するようです。よって、Microsoft社製のWindowsでエンコードした「AAC」コーデックの楽曲ファイルを、Apple社製のiPhoneで再生できない、ということはあり得るように思えます。実際の原因についてはわかっていません。

いくつかの方法で再生できるように変換・修正を試みたのですが、いずれも上手くいきませんでした。(成功した方法がないので、本記事には記載しません。)

対処としては、対象の楽曲ファイルを改めてCDからMP3として取り込み直す方法をとりました。具体的には、「Windowsの『メディアプレーヤー』アプリで、『MP3』コーデックでCDから取り込む」ことをして、これにより無事スマートフォン上で再生できるようになりました。これで、(全ての再生テストはしていないので、理論上は)移行した全ての楽曲ファイルが再生できる状態となりました。

もしかすると同様の事象として、今後スマートフォンをiPhoneからAndroidに変えたときに、iTunesで「AAC」エンコードされたM4AファイルがAndroidスマートフォン上で再生できない、といったトラブルが発生するかもしれないので、そこは気をつけておきます。

1.6. NASユーザごとに楽曲ファイルを振り分け(手作業)

正常にスマートフォン上で再生できる状態で、移行が完了したので、次に楽曲ファイルをNASユーザごとに振り分ける作業を実施しました。iTunes上では家族全員が同じライブラリに個々人のCDを取り込んでいたので、すべての楽曲がごちゃ混ぜになっています。例えば、筆者が個人的に聴きたいアニメソングや参考書に付属しているCDなどを、家族全員が聴ける状態になっています。

Synology社製の「Audio Station」アプリは、NASのユーザごとのプライベートな楽曲ライブラリと、全員が再生できる共有の楽曲ライブラリをサポートしています。プライベートライブラリは別のユーザからは見えません。(プライベートライブラリを有効にするには、「Audio Station」の設定で「個人のライブラリを有効にする」をONにしておく必要があります。)

楽曲ファイルの振り分け作業は自動化ができないので、/Volumes/music/iTunes_backup_2025_04配下の全楽曲について、アーティストごとに手作業で以下のフォルダに振り分けました。

共有ライブラリの楽曲: /Volumes/music/Music/<アーティスト名>/<アルバム名>/<楽曲ファイル>
ユーザ1のライブラリの楽曲: /Volumes/homes/<ユーザ1のユーザ名>/music/Music/<アーティスト名>/<アルバム名>/<楽曲ファイル>
ユーザ2のライブラリの楽曲: /Volumes/homes/<ユーザ2のユーザ名>/music/Music/<アーティスト名>/<アルバム名>/<楽曲ファイル>
:

2. プレイリストの移行

2.1. M3Uファイルについて

Synology社製の「Audio Station」アプリ上でプレイリストを作成すると、以下のようなM3Uファイル(拡張子:*.m3u)が作成されます。M3Uファイルとは、世界で標準的に利用されているメディアプレイリストのファイル書式です(ただし、厳密に規格や仕様が取り決められている訳ではないようです)。内容は、単純に楽曲ファイルのパスを1行ずつ列挙したシンプルなテキストファイルになっています。

# 相対パスの記述例  <-- このように、コメントを「#」を付けて追加できます。
../Music/Artist_One/Album_One/Song_One.mp3
# 絶対パスの記述例
/volume1/music/Music/Artist_Two/Album_Two/Song_Two.m4a
:

文字コードが「UTF-8」の場合は、拡張子が「*.m3u8」である場合もあるようです。

楽曲ファイルのパスを絶対パスで記載するパターンと、相対パスで記載するパターンがあるようですが、Synology社製の「Audio Station」アプリにおいては、相対パスしかサポートされていません6(絶対パスを指定した場合、楽曲の読み取りエラーになり再生できません)。

また、Synology社製のNASサーバでは、楽曲ファイルと同様にプレイリストについても、共有プレイリストとプレイベートプレイリストを作成することができます。

共有のプレイリスト: /Volumes/music/playlists/<プレイリスト名>.m3u
ユーザ1のプレイリスト: /Volumes/homes/<ユーザ1のユーザ名>/music/playlists/<プレイリスト名>.m3u
ユーザ2のプレイリスト: /Volumes/homes/<ユーザ2のユーザ名>/music/playlists/<プレイリスト名>.m3u
:

2.2. iTunesのプレイリストのエクスポート

iTunesにおいても、既存のプレイリストをM3Uファイルとしてエクスポートできます。そのエクスポートしたM3Uファイルを加工して、NAS上の/volume1/music/playlists/などに配置することで、iTunes上のプレイリストをNASに移行できるはずです。

iTunes上で対象のプレイリストを選択した状態で、上部メニューから「ファイル」>「ライブラリ」>「プレイリストを書き出し」を選択すると、ファイル保存のための画面が表示されるので、「M3U」の書式で適切な場所に保存します(そのままの内容ではNASサーバ上で認識できないので、いったん一時的なフォルダに入れて保管しておきます)。

図2.1. iTunes上のプレイリストをM3Uファイルとしてエクスポートする

筆者の場合は184個のプレイリストをiTunes上で作成していたので、この操作を184回繰り返しました。エクスポートしたM3Uファイルは、以下のようなNAS上の任意の場所にまとめて格納しておきます。

/Volumes/homes/<任意のユーザ>/iTunesからエクスポートしたM3Uファイル

2.3. M3Uファイル上の楽曲ファイルパスの置換

iTunesからエクスポートしたM3Uファイルでは、記載されている楽曲ファイルのパスが、iTunesがインストールされているPC上のパスになっています。よって、これらすべてをNAS上のパスに置き換える必要があります。

2.1.節に記載したように、Synology社製の「Audio Station」アプリでは、M3Uファイルに記載するパスは相対パスにする必要がありますが、今回は以下のような3段階での置換を実施しました。

理由としては、上記①~③を同時に実施すると操作が複雑になるからです。今回は楽曲ファイルとM3Uファイルの両方の格納場所を、ユーザごとに複数箇所に振り分けるため、同時に実施する場合、各楽曲ファイルと各M3Uファイルとの相対位置関係を考慮して置換後のパスを決定する必要があります。

上記のように分けて実施することで、まず①で各楽曲がNAS上のどこに格納されているかを特定し、存在を確認した楽曲ファイルパスを③で相対パスに置換する、というシンプルなステップになります。

2.3.0. NASサーバの端末にログイン

ここまでの作業は全てMac上で実施してきましたが、本節以降はNASサーバ上で作業をしていきます。なぜなら、M3Uファイルに記載するべき楽曲ファイルのパスは、NASをマウントしたMac上のパスではなく、NASサーバ上の実体のパスだからです。

NASをマウントしたMac上のパス: /Volumes/music/Music/<アーティスト名>
NASサーバ上の実体のパス: /volume1/music/Music/<アーティスト名>

NASサーバの端末に、SSHなどでログインします。Synology社製のNASサーバの場合は、「ターミナル」や「コマンドプロンプト」のような自身の端末にログインするGUIのアプリケーションは用意されていないので、外部からSSHログインする必要があります。

Synology社製のNASサーバにSSHログインするためには、DSMの画面上でSSHサービスを有効化しておく必要があります。アプリ「コントロールパネル」 > メニュー「端末とSNMP」 > タブ「端末」を開き、「SSHサービスを有効化する。」のチェックボックスを付けて「適用」することで、SSHログインを許可します。SSHサービスのポート番号もこの画面で設定できます。

Macの「ターミナル」アプリやWindowsの「PowerShell」アプリを開き、以下のコマンドを実行することで、NASサーバにログインできます。パスワードが求められるので、ユーザ名に対応するパスワードを入力してログインします。

ssh <NASサーバのユーザ名(管理者)>@<NASサーバのIPアドレス> -p <NASサーバ上のSSHサービスのポート番号>

Synology社製のNASサーバのIPアドレスは、DSMの画面上で確認できます。アプリ「コントロールパネル」 > メニュー「情報センター」 > タブ「ネットワーク」を開き、項目「IPアドレス」の値を確認します。

2.3.1. ①NAS上の絶対パスへの置換

楽曲ファイルを複数ユーザに振り分けて格納したため、M3Uファイル上の各楽曲ファイルが現在NAS上のどこに存在するのかは、ユーザ数+共有フォルダの複数候補が存在します。

その中から、NAS上に実際に存在する楽曲ファイルパスを特定して、M3Uファイル上の移行前のパスをNAS上で特定した絶対パスに置換するスクリプトを、今回はPythonで実装しました。

図2.2. Pythonスクリプトの機能

NASサーバ上に最新のPythonをインストールし、以下のレポジトリのスクリプトreplace_heads_of_audio_paths_in_m3u.pyを実行しています。詳細な実行方法は、レポジトリのREADME.mdを参照してください。

Synology社製のNASサーバ上に新しいバージョンのPythonをインストールする場合は、DSMの画面上で操作して、サードパーティのコミュニティ「SynoCommunity」を別途追加する必要があります。
DSMに管理者ユーザでログインし、「パッケージセンター」アプリを開いたら、「設定」ボタン>「パッケージソース」タブ>「追加」ボタンで、以下を入力して、「OK」ボタンを押します。
・名前:SynoCommunity
・場所:https://packages.synocommunity.com/
すると、「パッケージセンター」アプリのサイドメニューに「コミュニティ」が追加され、そのメニュー内からPythonの新しいバージョンをインストールすることができます。(実行コマンドは通常のpythonではなく、python3.12などのようにバージョンを含めます。)

設定ファイルの例は以下です。この設定でPythonスクリプトを実行した場合、事前に作成しておいたフォルダ/volume1/homes/<任意のユーザ>/存在する絶対パスに置換したM3Uファイルにパス置換後のM3Uファイルが生成されます。

DIR_PATH_FOR_INPUT_M3U_FILES: /volume1/homes/<任意のユーザ>/iTunesからエクスポートしたM3Uファイル
DIR_PATH_FOR_OUTPUT_M3U_FILES: /volume1/homes/<任意のユーザ>/存在する絶対パスに置換したM3Uファイル
BASE_PATHS_BEFORE_REPLACE:
  - /Users/<Macのユーザ名>/Music/iTunes/iTunes Media  # 置換前(元のiTunesのライブラリフォルダ)
BASE_PATHS_AFTER_REPLACE:
  - /volume1/music  # 置換後(候補1:楽曲を共有ライブラリに格納した場合)
  - /volume1/homes/<ユーザ1のユーザ名>/music  # 置換後(候補2:楽曲をユーザ1のライブラリに格納した場合)
  - /volume1/homes/<ユーザ2のユーザ名>/music  # 置換後(候補3:楽曲をユーザ2のライブラリに格納した場合)

なお、1.5.2項などで削除した楽曲ファイルが含まれるプレイリストは置換が失敗するので、エクスポートしたM3Uファイル上で該当楽曲ファイルの行を削除するか、そのプレイリスト自体を移行対象外とすることで対処しました。

2.3.2. ②各NASユーザのフォルダにM3Uファイルを振り分け(手作業)

楽曲ファイルと同様に、プレイリストについても以下のように手作業で振り分けます。楽曲ファイルの振り分けとは独立して考えてよいので、たとえば共有ライブラリの楽曲が含まれているプレイリストを個人用にすることは可能です。

共有のプレイリスト: /volume1/homes/<任意のユーザ>/存在する絶対パスに置換したM3Uファイル/共有
ユーザ1のプレイリスト: /volume1/homes/<任意のユーザ>/存在する絶対パスに置換したM3Uファイル/ユーザ1
ユーザ2のプレイリスト: /volume1/homes/<任意のユーザ>/存在する絶対パスに置換したM3Uファイル/ユーザ2
:

振り分けが完了したら、以下の本来のフォルダにM3Uファイルをそれぞれコピーして格納します。このあとこのファイルを直接書き換えてしまうので、前項で振り分けたファイルは万が一のために作業フォルダに残しておきます。

共有のプレイリスト: /volume1/music/playlists/<プレイリスト名>.m3u
ユーザ1のプレイリスト: /volume1/homes/<ユーザ1のユーザ名>/music/playlists/<プレイリスト名>.m3u
ユーザ2のプレイリスト: /volume1/homes/<ユーザ2のユーザ名>/music/playlists/<プレイリスト名>.m3u
:

2.3.3. ③絶対パスを相対パスに置換

端末上で以下のようなコマンドを実行して、各M3Uファイル上の絶対パスを相対パスに置換していきます。置換はM3Uファイルを格納しているフォルダごとに実施します。(以下はユーザ1のフォルダに格納されている全プレイリストに対しての一括置換の例です。)

# 変換対象のM3Uファイルの格納フォルダパス
M3U_FILES_DIR='/volume1/homes/<ユーザ1のユーザ名>/music/playlists'

# (1)共有ライブラリの楽曲ファイルパスを相対パスに置換
# 楽曲ファイルの親フォルダの絶対パスの文字列
REPLACE_STR_FROM='/volume1/music/Music'
# 楽曲ファイルの親フォルダの相対パスの文字列(対象のM3Uファイルの格納フォルダを基点)
REPLACE_STR_TO='../../../../music/Music'
# M3Uファイルの一括書き換えを実行
find "$M3U_FILES_DIR" -type f \( -name "*.m3u" -o -name "*.m3u8" \) -print0 \
| xargs -0 sed -i "$(printf 's|%s|%s|g' "$REPLACE_STR_FROM" "$REPLACE_STR_TO")"

# (2)ユーザ1のライブラリの楽曲ファイルパスを相対パスに置換
REPLACE_STR_FROM='/volume1/homes/<ユーザ1のユーザ名>/music/Music'
REPLACE_STR_TO='../Music'
find "$M3U_FILES_DIR" -type f \( -name "*.m3u" -o -name "*.m3u8" \) -print0 \
| xargs -0 sed -i "$(printf 's|%s|%s|g' "$REPLACE_STR_FROM" "$REPLACE_STR_TO")"

# (3)ユーザ2のライブラリの楽曲ファイルパスを相対パスに置換
REPLACE_STR_FROM='/volume1/homes/<ユーザ2のユーザ名>/music/Music'
REPLACE_STR_TO='../../../<ユーザ2のユーザ名>/music/Music'
find "$M3U_FILES_DIR" -type f \( -name "*.m3u" -o -name "*.m3u8" \) -print0 \
| xargs -0 sed -i "$(printf 's|%s|%s|g' "$REPLACE_STR_FROM" "$REPLACE_STR_TO")"

:

2.4. M3Uファイル上の拡張情報の記載の削除

Synology社製の「DS audio」アプリ上でプレイリストの内容を確認すると、以下の図の左側のように「<曲名> – <アーティスト名>」が各曲に表示されます。そして、この状態で再生しようとしても、「アーティスト不明」と表示されて再生できず、スキップされてしまいます。

図2.3. 拡張M3Uの拡張情報削除前後のプレイリストの表示

これは、iTunesからエクスポートしたM3Uファイルが「拡張M3U」という書式で記載されているからです。実際のM3Uファイルの中身を確認してみると、以下のように冒頭に#EXTM3Uとコメントが記載されていて、各曲の直前に#EXTINFから始まるコメントがそれぞれ挿入されています。これらのコメントは、拡張M3Uに対応しているデバイスにおいて特殊なコメントとして内容が読み取られ、曲の表示などを変えることができます。

#EXTM3U
#EXTINF:259,Over Drive - JUDY AND MARY
../Music/JUDY AND MARY/The Great Escape -COMPLETE BEST-/1-01 Over Drive.m4a
#EXTINF:335,ラッキープール - JUDY AND MARY
../Music/JUDY AND MARY/The Great Escape -COMPLETE BEST-/1-02 ラッキープール.m4a
:

「Audio Station」アプリでは、#EXTINFは、「曲の長さ」(秒)と「曲のタイトル」をカンマ区切りで指定することで、プレイリスト上で表示することができるようです。一方で、iTunesからエクスポートしたM3Uファイルでは、#EXTINFは「曲の長さ」と「<曲のタイトル> – <アーティスト名>」をカンマ区切りで記載する書式になっているようで、その違いが悪さをしているようでした。

#EXTINFについて、複数のWebサイトで異なる値の指定方法が紹介されているので、拡張M3Uについても世界共通の仕様はないのかもしれません。

表記がおかしくなることは良いとしても、なぜプレイリストの曲が再生できないのかはわかりませんでしたが、試行錯誤の末、#EXTINFで始まる拡張情報の行を削除することで、図2.3.の右側のように正しく表示され、再生もできることが判明しました。

端末上で以下のようなコマンドを実行して、各M3Uファイル上の文字列#EXTINFで始まる行を削除していきます。行削除は、M3Uファイルを格納しているフォルダごとに実施します。(以下はユーザ1のフォルダに格納されている全プレイリストに対しての行削除の例です。)

M3U_FILES_DIR='/volume1/homes/<ユーザ1のユーザ名>/music/playlists'
find "$M3U_FILES_DIR" -type f \( -name "*.m3u" -o -name "*.m3u8" \) -print0 \
| xargs -0 sed -i '/^#EXTINF/d'

2.5. プレイリストの再生テスト

スマートフォンのアプリ上で各プレイリストが問題なく再生されることを、共有プレイリストと個人のプレイリストについてテストします。再生できない場合は、相対パスに問題がある(2.3.3.項)、または拡張情報を削除できていない(2.4.節)といった原因が考えられるので、M3Uファイルの内容を確認して修正します。

Synology社製のNASサーバの場合、M3Uファイルを新しく格納or修正したあとに「再インデックス」をしないと、「Audio Station」アプリ上でプレイリストが正しく認識されない場合があります。アプリ「コントロールパネル」 > メニュー「サービスにインデックスを付けています」を開き、「再インデックス」ボタンをクリックします。

図2.4. iTunes(ミュージック)からAudioStation(DS audio)へのプレイリストの移行
筆者

iTunesの全楽曲&プレイリストの移行手順は以上です。ここまで読んでいただき、ありがとうございました!

脚注

  1. 移行元の環境情報
    ・デスクトップPC: iMac 13,2 (2012)
    ・MacOS: 10.13.6 High Sierra (2017)
    ・iTunes: 12.8.3.1 (2019)
    ・Bash: 3.2.57(1)-release
    ・Homebrew: 4.4.24
    ・rsync: 3.4.1
    ・FFprobe: N-119686-gae0f71a387-tessus
    ・総楽曲ファイル数: 8,715件
    ・総プレイリスト数: 178件 ↩︎
  2. 移行先の環境情報
    ・NAS: Synology DS218 (2017)
    ・DSM: 7.2.2-72806 Update 3 (2024)
    ・Linux: diskstation 4.4.302+ (2024)
    ・Bash: 4.4.23(1)-release
    ・Samba: 4.15.13
    ・Audio Station: 7.2.0-5516 (2024)
    ・Python: 3.12.10 ↩︎
  3. 楽曲再生クライアントの環境情報
    ・スマートフォン: iPhone 12 mini (2020)
    ・iOS: 18.4.1 (2025)
    ・DS audio: 5.17.1 (2024) ↩︎
  4. “Audio Station テクニカルスペック | Synology Inc.”, https://www.synology.com/ja-jp/dsm/software_spec/audio_station. ↩︎
  5. “サーバー側のAACトランスコーディング提供中止について | Synology Inc.”, https://www.synology.com/ja-jp/company/news/article/AAC_PR. ↩︎
  6. “全般設定 | Media Server – Synology ナレッジセンター”, https://kb.synology.com/ja-jp/DSM/help/MediaServer/application_mediaserver_general. ↩︎

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

筆者

ユーマン
在籍: 大手SIer企業
職務: Python歴7年の開発職
大学: ロボ設計/PV制作 @NHKロボコン優勝サークル
大学院: 学会発表にて2度優秀賞 @AI研究
目標: ふと思いついたモノを何でもつくれちゃう人
好き: Python / Excel / 定時退社 / カフェ作業 / 自己分析 / 友達と遊ぶこと / ホラー映画 / '00年代アニメ / 散歩or登山 / スキー / Mr.Children / 笑顔がステキな方
目次