はじめに

今まではGoogle Play Musicで手持ちの音楽ファイルをアップロードして聴いていたのだが、いよいよ2020年末でサービスが終了するとのこと。
Google的にはYoutube Musicへ移行してほしいということなのだが、自分のような「手持ちのファイルをいつでもどこでも低コストで聴きたい」というニーズには、あまり応える気がないらしく、とにかく使いづらかった。
色々調べた結果、Jellyfinを利用することにした。

Jellyfin

Jellyfinは、音楽を聴く為のプロダクトではなく、テレビや動画なども含めたさまざまなメディアに対応しているプロダクトだ。
類似プロダクトとしては、KodiPlexとかに似ているのかも。

Google Play MusicやYoutube Musicのようなクラウドサービスではなく、自前のサーバーにインストールして使うタイプ。
メンテナンスとかはちょっと面倒にはなるのだけども、そもそも今までのGoogle Play Musicが太っ腹過ぎだっただけで、ある程度自分もコストが掛かるのはしょうがないかなという気持ち。

自分はたまたま自宅でラズパイが稼働していたし、そもそもそのラズパイがファイルサーバーも兼ねていて、音楽ファイルもそこにあったので、手っ取り早く同居させてしまうことにした。

インストール

公式のDownloadページに手厚い案内があるので、その通りにやったら詰まるところはないと思う。
自分もRaspbianを使っているだけなので、普通にDebianと同じ感じでインストールしたら問題なくできた。
aptリポジトリを追加して、aptコマンド経由でインストールすることが出来るので、とても楽ちんだ。

ALACからMP3へ変換

いざライブラリーに追加しても、フォーマットがどうとかってエラーが出て再生することができない。
まさかと思い調べてみたら、ALACが対象外とのこと。
自分は手持ちの音楽をALACで管理しているので、このままでは音楽をほとんど聴くことができない。
ということで、手持ちのALACファイルを全てMP3に変換するスクリプトを書いて対応することにした。
MP3自体にはそんなにクオリティを求めないので、ffmpegでガーッとエンコードすることに。

スクリプト自体はこんな感じのものを用意。

#!/usr/bin/env bash

source_dir="/path/to/alac/directory"
target_dir="/path/to/mp3/directory"
logfile="${0##*/}.log"
tmpfile="${0##*/}.tmp.mp3"

find "${source_dir}" -type f -name '*.m4a' | while read m4a; do
  mp3="${m4a//.m4a/.mp3}"
  mp3="${target_dir}/${mp3#${source_dir}/}"

  if [[ -e "${mp3}" ]]; then
    echo "$(date +'%Y-%m-%d %H:%M:%S') skipped ${m4a}" | tee -a  ${logfile}
    continue
  fi

  mkdir -p "${mp3%/*}"
  ffmpeg -y -i "${m4a}" -ab 256k -loglevel panic ${tmpfile} < /dev/null
  mv ${tmpfile} "${mp3}"
  echo "$(date +'%Y-%m-%d %H:%M:%S') converted ${m4a}" | tee -a ${logfile}
done

何度も実行することを考えて、既にコンバートしたファイルはスキップする感じにしてみた。
自分の場合、ALACファイルが2万曲ぐらいあったので、一応ログを出力して進捗がある程度わかるようにもしておいた。

結局2日半ぐらい掛けて全曲変換完了。
変換後のファイルはちゃんと再生できることも確認できた。

Androidアプリで次の曲が自動再生されない

ありがたいことにAndroidアプリも存在する。
実際に使ってみると、普通にインストールしただけでは、次の曲が自動的に再生されなくて、とても困った。
色々触っていると、電池の最適化を無効にしたら、ちゃんと次の曲が再生されるように。
このあたりのチューニングはまだまだかもしれないけど、一旦無効化したまま利用している。

おわりに

個人的に、Youtube Musicより断然使いやすく満足している。
アーティスト名からアルバム一覧も見ることができるし、もちろん曲からも辿っていくことができる。
Google Play Musicで出来ていた最低限の検索性は、担保されている感じ。
アルバムジャケットに関しても、Google Play Musicより頑張って取得してくれるように見受けられる。

とにかくオープンソースで無料でこのクオリティは本当にすごいと思う。
当面は、Jellyfinをイジっていくつもり。