2024-06-29 17:58 6 4353 5 mins

在NAS搭建自己的音乐服务器才是正经事

好的又用这个烂俗的句式了。
请注意,本篇并非教程,只是使用心得。

01 / On

去年夏天,入手了第一台 NAS(极空间 Z2 Pro)。选中这款,心动的理由是能在预算范围内体验体验 Docker 模块。鼓捣 NAS 的第一需求当然是整理整理散落在各个硬盘里的小哥哥文件。而重启音乐人 A-Z 分类评级计划自然也是硬需求之一啦。

关于在 NAS 上搭建音乐服务器,有很多种选择,如 PlexJellyfinAirsonicFunkwhaleLMSPolarismStream 等。最终我选择 Navidrome。至于为什么不用极空间自带的极音乐,原因是它太弱智,从颜值到文件读取再到自定义,全是槽点。

02 / Navidrome

Navidrome 真是一见倾心。

曾经对 MusicBee 也是如此,当时还雄心勃勃地想把所有的专辑都按艺术家好好整理一遍,结果就没坚持几天。毕竟还是个本地软件。Navidrome 就不同,它就是属于自己的 Spofity。搭建好音乐服务器后,总算彻底告别了往手机导专辑的繁琐操作,24 小时随时畅听音乐。

在 NAS 上使用 Docker 安装 Navidrome 非常简便,设置好文件路径,添加管理员帐户,即可开始听——音——乐。功能设置上选项很少,主打一个开箱即食,但其实可以在环境变量中根据个人喜好进行各种自定义。有人说 Navidrome 抓取能力很弱、显示文件很乱,根本不是这么回事。Navidrome 的逻辑是这样:你的音乐文件原本是什么样的,那么就会显示成什么样的。其实也就是在导入前,要稍微整理一下音乐文件的 ID3 信息。(这部分在后面再展开)

Navidrome 环境变量中还是有一些可以改改的:

名称
ND_ARTISTARTPRIORITY artist.*, album/artist.*, external
说明:更改艺术家图片读取顺序
ND_COVERARTPRIORITY cover.*, folder.*, front.*, embedded, external
说明:更改专辑封面读取顺序
(我习惯读取 folder 文件,就把 folder.* 放在第一位)
ND_COVERJPEGQUALITY 75
说明:调整专辑图片的质量(只限 JPG)
ND_DEFAULTLANGUAGE en
说明:默认语言(简体中文则是 zh-Hans)
ND_ENABLEDOWNLOADS true
说明:是否允许下载(禁止下载则改 false,下同)
ND_ENABLEGRAVATAR true
说明:使用 Gravatar 头像
ND_ENABLESHARING true
说明:开启分享功能
ND_LASTFM_ENABLED true
说明:开启 last.fm 接口
ND_LASTFM_APIKEY
说明:在 last.fm 设置里获得
ND_LASTFM_SECRET
说明:在 last.fm 设置里获得
ND_LASTFM_LANGUAGE en
说明:last.fm默认语言
ND_PASSWORDENCRYPTIONKEY 自定义
说明:给 Navidrome 的 DB 文件加密
ND_SCANNER_GENRESEPARATORS 例:; / ,
说明:设置音乐风格的分隔符
ND_SCANNER_GROUPALBUMRELEASES false
说明:是否合并再版专辑(填 true 会将初版和再版专辑合并为一个条目,填 false 则是两个独立的条目;这里的再版专辑定义为音乐人和专辑名皆相同,发行年份不同)
ND_UILOGINBACKGROUNDURL
说明:设置登录页背景图片地址(默认为 Unsplash 随机“音乐”主题图片)
ND_UIWELCOMEMESSAGE 自定义
说明:设置登录页欢迎信息

我永远都喜欢 No-Man

Navidrome 网页端简洁实用,筛选排序检索都很好用。所有专辑、随机专辑、收藏、评分、最近添加、最近播放、最多播放、艺术家、歌曲、电台、分享、歌单,板块已足够一个听音爱好者日常使用。如果切换至 Spotify-ish 皮肤,那么做一个伪装分子也不成问题。

服务器搭建好后,剩下要做的就都是往指定文件夹搬运专辑了。一些关键信息显示,都无须在 Navidrome 这边修改,直接修改音乐文件的 ID3 信息即可,服务器会自动扫描、更新。能改 ID3 的软件有很多,在此我推荐 Tag&Rename。

03 / Tag&Rename

Tag&Rename 是我用了很多年的必备工具。功能非常强大,在此不一一列述,可自行摸索体验。就说一点,文件夹重命名掩码编辑器很满足我强迫症需求,按 [音乐人 - 年份 - 专辑] 排列,符合时间规律。其他同类产品,可选择 MP3TagKid3TagScanner 等。

因为 Navidrome 直接读取音乐文件的 ID3 信息,部分信息栏的空缺或错乱将反映在最终的专辑显示效果上,所以 ID3 信息的规范非常重要。

Navidrome 只抓取一些关键信息,所以改起来并不费劲。导入前稍微过一遍 ID3 即可。

下面是一些主要的 ID3 信息:

[艺术家]:指歌曲的表演者(Performer)。
[专辑]:所属专辑名称。
[标题]:歌曲名称。
[年份]:专辑发行年份。(注意只填四位年份数字,月日删去)
[流派]:专辑的主要风格。(用英文逗号或分号或斜杠号隔开)
——我基本都参考 RateYourMusic 的风格标签。该信息填好,方便日后风格漫游。
[音频编号]:歌曲在专辑中的序号。(基本上不会有错)
[光盘编号]:即 Disc 1、Disc 2……单碟专辑留空为佳,多碟专辑采用分数形式,以双碟专辑举例,碟 1 标“1/2”,碟 2 标“2/2”。
[注释]:建议清空。一些下载专辑的注释都是网址广告。
[合辑的一部分]:顾名思义,如果勾选此项,那么在 Navidrome 的筛选栏选择“合辑”就能列出所有的合辑专辑。
[专辑歌手]:大部分情况下 [艺术家] 和 [专辑歌手] 是一样的。Navidrome 是优先以 [专辑歌手] 作为音乐人的聚合指引,所以建议确认 [专辑歌手] 信息是否完整,与 [艺术家] 是否一致。对于两者不同的情况(比如 Remix 专辑、合辑),我采取的是括号备注法,将参与歌曲表演或再创作的艺术家以“(feat. xxx)”“(with xxx)”“(xxx Remix)”的形式标注在歌曲名称里,而把 [艺术家] 统一改成跟 [专辑歌手] 一致。这样的好处是既让版面整洁,又方便 last.fm 记录。

除了上述这些,Tag&Rename 还可以给音乐文件嵌入专辑/单曲封面。如果在 Navidrome 环境变量修改过专辑封面读取顺序,那么不给文件附加封面图片也可以。比如把 folder.* 或 cover.* 放在读取顺序首位,那么只要专辑文件夹内有这类命名文件,Navidrome 将优先读取。最好从 bandcamp 下载专辑封面图,一是尺寸足够大,二是文件不大,方便读取。

至于 Navidrome 的音乐人页面,只要接入了 last.fm,音乐人的头像和简介都是直接读取 last.fm 那边的信息。当然你要是对音乐人头像不满意,也可以根据环境变量里的设定,自己在对应的文件夹里上传 artist.* 文件。

一个符合自己审美和使用习惯的音乐服务器搭建好了后,接下来就是畅享音乐世界。那么离开电脑、局域网,怎样在外网访问 Navidrome 呢?

04 / Cloudflared

如果公网 IP 没有申请下来,这些自建服务离开了局域网都是无法通过外网访问的。实现内网穿透的方法有很多,最后我选择了 Cloudflared,原因是免费、简单好用。(←本质是你技术不行)

NAS 服务器端的 Cloudflared 部署教程可自行再搜索一下,我记得有两个地方需要自定义。Cloudflare 网页端的设置在首页左边栏 Zero Trust → Networks → Tunnels。创建一个加密隧道,与对应服务器的连接建立好后,就可以在 Public Hostname 栏下面将 Navidrome 服务器 IP、端口和自定义域名绑定在一起。然后就可以在外网通过这个域名访问 Navidrome 啦。

域名买一个最便宜的就行,解析到 Cloudflare。利用二级域名,可以实现一个域名绑定不同的服务。

需要注意的是,Cloudflare 的加密隧道访问速度可能不是太理想。整个体验下来,我感觉它时好时坏。因为用于音乐流媒体,音乐文件的质量直接影响缓冲速度。但有的时候直接读取 Flac 文件也很流畅。另外,在科学上网环境下访问,速度有显著提升。这是国内访问 Cloudflare 的本质问题,只能适应。

总体而言,使用 Cloudflared 实现外网访问带来的幸福感足以让我忘却一切烦恼。

05 / Symfonium

Navidrome 是库,是基地,Cloudflared 是桥,是钥匙。那么随时随地听音这个美梦也不远了。

Navidrome 并没有官方的手机 App,虽然手机浏览器(Web UI)也能正常播放,但体验还是有点别扭。好在 Navidrome 支持 Subsonic 协议,在 iOS、Android、桌面端都有不少第三方应用可用,具体可在官方列表中查看。

试用一堆后,最终我选择付费应用 Symfonium(买断制,不贵的)。

不用怀疑,这就是安卓端最好的音乐应用!从颜值、品质、功能到自定义,各方面都超级满意。它支持添加多种媒体源,不仅可以当成本地音乐播放器,还能充当主流音乐服务器(Plex、Jellyfin、Subsonic)、主流网盘(OneDrive、Box、Google Drive、Dropbox、pCloud)、WebDAV、Samba 协议的流媒体播放器。

而我只需要添加 Navidrome 媒体源就好,做一个纯粹的流媒体播放器。数据信息基本同步,无须再整理。可调的无非主题、颜色、字体、视图等细节。非常中意 Navidrome 的一点是它的波浪线进度条,活泼,想随音乐舞动。

Symfonium 每个页面的模块从显示/隐藏、视图到排序、筛选都能自定义,极其能满足一个颜控的强迫症需求。

硬要说槽点,部分翻译还有些奇怪。比如选择年份,显示“2024 张专辑”,应该是“2024 年专辑”。无伤大雅。

还有一个情况,如果 Navidrome 接入了 last.fm(并且服务器端开启了记录),那么手机上就不要再对 Symfonium 进行 last.fm 记录,否则会重复记录两次。(手动删了半年重复记录的人后知后觉路过……)

06 / Off

整理音乐专辑是一项大工程。按音乐人 discography 的喜好来整理,倒是别有一番成就感。收集齐全,石头落地。

看看谁才是占硬盘大户

曾经用 MusicBee 整理聚合所有音乐专辑的计划,现在用 Navidrome 取代。

曾经挚爱的、装机必备的 PlayerPro 被 Symfonium 取代。

后浪总把前浪拍。但音乐不是这样,越听新的东西,就越想回到过去,回到那个特定情绪、特定氛围的时光漩涡。在循环中,循环念旧。