前回の「プレイリストのワナ」でお伝えした顛末について、実際にどんなコマンドで何を解決したのか、技術的な処方箋をまとめておきます。同じ状況で困っている人の手がかりになれば幸いです。by Claude.AI
全体の流れ
- iTunesでプレイリストをm3u形式でエクスポート
- パス(Windows形式)をLinux形式に変換
- 文字コード・改行コードの問題がないか確認
- 音楽プレーヤーにインポートして動作確認
このうち、実際にハマりやすいのは2と3です。順番に見ていきます。
手順1:エクスポートされたm3uファイルの中身を確認する
iTunesからエクスポートしたm3uファイルは、こんな見た目のテキストファイルです。
#EXTM3U
#EXTINF:184,Bang-A-Boomerang - ABBA
\\Homeserver\data\JUKEBOX\Music\ABBA\ABBA\Bang-A-Boomerang.mp3
#EXTINF:190,Hasta Manana - ABBA
I:\JUKEBOX\Music\ABBA\ABBA\Hasta Manana.mp3
#EXTINFで始まる行は曲情報(コメント扱い)、その次の行が実際のファイルパスです。この事例のように、ネットワークパス形式(\\Homeserver\...)とドライブレター形式(I:\...)が混在することがあるので注意してください。
手順2:改行コードを確認する
パスを書き換える前に、まずファイルの改行コードを確認します。Windows由来のテキストファイルは、Linuxで一般的なLF(\n)ではなく、CRLF(\r\n)になっていることが多いです。目に見えない\rが残っていると、この後のsedの行末指定($)が正しく機能しなくなります。
file マイベスト.m3u
結果に with CRLF line terminators と出たら、CRLF形式です。以下のコマンドで、LF形式に変換しておきます。
sed -i 's/\r$//' マイベスト.m3u
これは今後の全ての作業の土台になるので、必ず最初に済ませておくことをおすすめします。
手順3:パスをLinux形式に一括変換する
NASを/mnt/nasにマウントしている場合、必要な変換は次の3種類です。
| 変換内容 | 変換前 | 変換後 |
|---|---|---|
| バックスラッシュ→スラッシュ | \ | / |
| ネットワークパス | \\Homeserver\data | /mnt/nas |
| ドライブレター | I: | /mnt/nas |
これを1行にまとめると、こうなります。
sed -i 's/\r$//; s/\\/\//g; s#^I:#/mnt/nas#; s#//Homeserver/data#/mnt/nas#' マイベスト.m3u
コマンドの読み方:セミコロン(;)区切りで複数の置換を1回のsed呼び出しで実行しています。
s/\r$//: 行末のCRを削除(改行コード統一)s/\\/\//g:\をすべて/に変換(gは行内すべてに適用の意味)s#^I:#/mnt/nas#: 行頭(^)がI:の場合、/mnt/nasに置き換えs#//Homeserver/data#/mnt/nas#://Homeserver/dataという文字列を/mnt/nasに置き換え
s#パターン#置換後#のように、区切り文字に#を使っているのは、パス自体に/が含まれるため、s/パターン/置換後/の形だと/が混同して読みにくくなるのを避けるためです(動作上は/のままでも問題ありませんが、可読性のための工夫です)。
複数のm3uファイルをまとめて処理したい場合は、ファイル名の部分をワイルドカードにするだけです。
sed -i 's/\r$//; s/\\/\//g; s#^I:#/mnt/nas#; s#//Homeserver/data#/mnt/nas#' *.m3u
実行前に必ずバックアップを取ってください。 -iオプションはファイルを直接上書きするため、想定外の変換が起きても元に戻せなくなります。
mkdir backup
cp *.m3u backup/
手順4:変換結果を確認する
変換後、狙った行が正しく書き換わっているか確認します。
grep -A1 "確認したい曲名" マイベスト.m3u
さらに、変換後のパスに実際のファイルが存在するかも確認しておくと安心です。
ls "変換後のフルパス"
ファイルが見つかれば、そのパスは正しく変換できています。
ハマりやすい落とし穴:Windowsのパス長制限
まれに、変換後もファイルが見つからない曲があります。その場合、パス自体ではなくファイル名そのものが途中で切れていることがあります。
.../10 チェンバロ協奏曲第5番ヘ短調BWV.1056 - 第2
これは、Windows環境でのパスの文字数制限(合計260文字程度)に、元のファイルパスが引っかかり、iTunesのエクスポート処理でファイル名の情報が欠落したケースです。特に、長いアーティスト名・アルバム名・曲名が重なるコンピレーションアルバムで発生しやすいです。
対処法は、実際のフォルダの中身を見て正しいファイル名を確認し、該当行だけ手動で修正することです。
ls "該当フォルダのパス"
で正しいファイル名を確認したら、
sed -i 's#/10 チェンバロ協奏曲第5番ヘ短調BWV.1056 - 第2$#/10 チェンバロ協奏曲第5番ヘ短調BWV.1056 - 第2楽章 ラルゴ.m4a#' マイベスト.m3u
のように、行末指定($)を使って、欠落パターンの行だけを狙い撃ちで修正します。
音楽プレーヤー側の設定:AACが再生できないとき
パス変換が完了しても、m4a(AAC)ファイルが再生できない場合は、GStreamer関連のパッケージとキャッシュを確認します。
sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-tools
デコーダー自体の存在は、以下で確認できます。
gst-inspect-1.0 | grep -i aac
avdec_aacやfaadが表示されればデコーダー自体は正常です。それでも再生できない場合は、プラグイン情報のキャッシュが古い可能性があるので、キャッシュを削除してアプリを再起動してください。
rm -rf ~/.cache/gstreamer-1.0
Elisaでライブラリ全体を扱う設定
Kubuntu標準搭載の音楽プレーヤー「Elisa」は、デフォルトでは~/Musicフォルダしか見ません。NAS上のライブラリを追加するには、アプリ右上のハンバーガーメニューから「Elisaを設定」を開き、「音楽フォルダー」欄で「新しい場所を追加」からNASのマウントパス(例:/mnt/nas/JUKEBOX/Music)を指定します。
ライブラリの参照方式を採用しているアプリのため、m3uインポートに起因する表示不具合(前回の記事参照)は発生しません。
おまけ:iPhoneへオフライン用に音楽を転送する
NASにもクラウドにも頼らず、iPhone単体でオフライン再生したい場合は、無料アプリ「VLC」のWi-Fiアップロード機能が使えます。
- iPhoneでVLCを起動し、設定から「Wi-Fi共有」をON
- 表示されたURL(例:
http://192.168.1.xx:6689)をPC側のブラウザで開く - ブラウザ上に音楽ファイルをドラッグ&ドロップして転送
数十GB程度の初回一括転送は時間がかかるため、KubuntuならUSB接続してDolphinから直接ファイル共有する方法(libimobiledevice, usbmuxd, ifuseパッケージを利用)の方が高速です。
sudo apt install libimobiledevice-utils usbmuxd ifuse
まとめ
| 症状 | 原因 | 対処 |
|---|---|---|
| sedの置換が効かない | CRLF改行コード | s/\r$//で除去 |
| ファイルが見つからない | パス変換漏れ | ネットワークパス・ドライブレターの両方を変換対象に含める |
| ファイル名が途中で切れる | Windowsのパス長制限 | 実フォルダを確認し手動修正 |
| AACが再生できない | GStreamerキャッシュ | ~/.cache/gstreamer-1.0を削除 |
| タイトル/アーティストが逆表示 | プレーヤー側のm3uインポート仕様 | ライブラリ参照型のプレーヤー(Elisaなど)に乗り換える |
一つ一つは地味な作業ですが、順を追って切り分けていけば、必ず解決にたどり着けます。同じ壁にぶつかっている方の参考になれば幸いです。
コメント