Subsonic用のDockerコンテナを作ってHE-AACを聞く

何年か前から運用したりやめたりしていたSubsonic*1環境を作り直しました。
悪銭苦闘の結果はこちら。
https://bitbucket.org/aose/docker_subsonic


Subsonicとは?

自前のサーバから音楽配信できるソフトウェアです。
クライアントとしてはPCのWebブラウザAndroid用などがリリースされています。
そんなもの定額制の聴き放題サービスがあるじゃん。と思うでしょうか。えぇ、思いましたとも。
でも、聴き放題サービスでは聴きたい曲に限って見つからないし、
どうせハイレゾ音源を購入してるのでそれが使えたほうがラクだという結論に至りました。


さて、今回のSubsonic環境作り直しのテーマは以下2点です。

  • Dockerコンテナ化
  • トランスコーディングによるハイレゾHE-AAC変換
  • Dockerコンテナ化

最近は自宅サーバ環境を順次Dockerコンテナ化しています。
コンテナだと途中からやり直しが効くので不慣れなサーバ構築もハードルが下がる感じがあります。

ハイレゾ音源を購入する機会も増えてきて、スマホで直接再生できないことが多くなりました。
スマホの音質もハイレゾが必要そうなスペックでもないし、圧縮音源で十分でしょう。
ハイレゾ音源が勝手に圧縮されるといいですよね。できればHE-AACあたりで。

トランスコーディングが鬼門だった

エンコードといえばffmpeg
ここまでは知っていましたが、Ubuntuで用意されているffmpegHE-AACに対応してないのは知りませんでした。
HE-AACはライセンス等の関係上自分でビルドするしかないとのこと。
結局HE-AAC付きのffmpegをコンテナ作成時にビルドすることになりました。

HE-AACエンコードするには

Subsonicのトランスコーディング設定でffmpegを指定します。

Android配信向けのオプション

ffmpeg -i %s -vn -c:a libfdk_aac -profile:a aac_he -ab 256k -ar 44100 -ac 2 -afterburner 1 -movflags +faststart  pipe:0.aac

WEBブラウザ向けのオプションは…作ってみましたが、動かないソースもありました。よく分からぬ…

ffmpeg -i %s -c:a libfdk_aac -profile:a aac_he -ab 256k -ar 44100 -ac 2 -afterburner 1 -movflags +faststart -f flv -

ということで

どこでも自分の聴きたい音楽が手に入る環境は素晴らしいですね!

*1:※ライセンスは昔購入したので€10だったけど、いまは月額制に劣化したみたい。。。正直どうかと思う