个人数据保全计划:搭建私有音乐库

程序设计实验室

共 7144字,需浏览 15分钟

 ·

2023-10-13 17:40

前言

现在听歌比以前方便了很多,有各种在线服务,可能大部分人都不像之前一样需要自己下载音乐导入到MP3或者手机里了。

但还是那句话,数据永远是自己掌握才好,你永远不知道你喜欢的歌曲哪一天就在音乐平台上变灰,所以遇到喜欢的歌曲,为了防止版权失效,就尽早下载到本地吧。

本文记录搭建私有音乐库的过程,包括:下载、整理、搭建流媒体服务、本地播放器等。

下载

我大部分的歌单都在网抑云里,所以目前我使用 pyncm 这个工具来下载。

探索过程

我先后使用了这几个工具

  • Beadd/Creamplayer - 基于electron,比较简陋,能下载,但经常出错,用了一下就放弃了
  • Java-S12138/Music_Download - 看起来是基于PyQt开发的,我用了之后发现无法下载,弃用了
  • magicdawn/yun-playlist-downloader - 基于node的命令行工具,可以批量下载歌单里的音乐,还不错,我用这个工具下载了一批歌曲,但好像无法写入元数据,最后还是弃用
  • mos9527/pyncm - 最终使用这个,比较方便,功能都有,也可以写入元数据,登录自己的账号(前提是有会员)之后可以下载VIP歌曲

还有一个是网友推荐的,但我还没试过

QQFlacMusicDownloader - 可以用来下载无损音乐

pyncm

这是基于Python的命令行工具,同时也可以通过Python代码调用。

安装

pip install pyncm
pip install mutagen
pip install tqdm
pip install coloredlogs

后面三个补充功能的依赖

  • mutagen : 为下载的音乐添加元数据
  • tqdm : 显示实时下载进度
  • coloredlogs : 彩色日志输出

使用

不登录,使用匿名账号下载歌单里的歌曲

pyncm "https://music.163.com/playlist?id=123908306&userid=82133129" -m 4 -t "{artists} - {track}" --quality exhigh --no-overwrite

参数说明:

  • -m 4 - 同时下载4首
  • -t "{artists} - {track}" - 文件名格式为「歌手 - 歌曲名」
  • --quality exhigh - 下载音质为较高
    • hires
    • lossless - 无损
    • exhigh - 较高
    • standard - 标准
  • --no-overwrite - 不覆盖已有音乐

登录账号

pyncm --phone 123456 --pwd 123456 --save "login-session.conf"

使用手机号和密码登录,然后把登录信息保存在文件里

下次下载的时候,可以使用 --load xxx.conf 参数,读取登录信息。

整理

本地整理

在本地整理音乐,可以使用 mp3tag 这个应用

可以直接使用 scoop 安装(推荐Windows用户使用这个包管理器)

如果没有 scoop 的话,可以去官网下载: https://www.mp3tag.de/en/

scoop install mp3tag

安装之后可以执行以下命令把它添加到右键菜单,方便使用

PS:具体路径要根据scoop安装后的提示来

start 'regsvr32' -Verb 'RunAs' -Args @("C:\Users\Deali\scoop\apps\mp3tag\current\Mp3tagShell.dll"'/s')

打开之后就可以编辑歌曲的元数据了。

image-20230928114003919

私有云

音乐库当然是得搭配 NAS 使用最好。

当把音乐文件放在 NAS 上面之后,再使用本地的元数据软件来管理就显得不太方便,这时搭建一个在线服务就会方便很多。

本文推荐的是 xhongc/music-tag-web 这个项目

使用 docker-compose 部署

version: '3'

services:
  music-tag:
    image: xhongc/music_tag_web:latest
    container_name: music-tag-web
    ports:
      - "8001:8001"
    volumes:
      - /path/to/your/music:/app/media:rw
      - /path/to/your/config:/app/data
    command: /start
    restart: always

直接一把梭启动就完事了,更多的操作看项目主页的文档。

搭建流媒体服务

流媒体这块,我参考了许多网友的经验

v2上的 jasonyang9 老哥提供了一个很详细的思路

预处理:

  • 预处理-转码:不建议转码,流服务器会自动帮助客户端动态处理
  • 预处理-拆分:CUE 到每音轨 MP3 等,mp3splt
  • 预处理-拆分(例外):Enigma 之类的专辑不拆分,音轨之间有过渡内容
  • 预处理-标签:Picard 全自动或半自动打标签
  • 预处理-标签规范:albumartist-date-album-tracknumber-title-genre
  • 预处理-统一回放增益:mp3gain ,aacgain

流服务器:Navidrome ,Lightweight Music Server ,Gonic ( Docker 或编译安装)等

客户端:任何支持 Subsonic ,Airsonic ,Madsonic 的播放器 客户端推荐:DSub ( Android ),Strawberry ( Linux ),Clementine (目前唯一支持 Win7 的老古董)

Navidrome 和 Gonic 我都试着部署了,用下来还是 Navidrome 比较好用。

使用 docker 部署 Navidrome

我是按照官网提供的配置来的

version: "3"
services:
  navidrome:
    image: deluan/navidrome:latest
    user: 1000:1000 # should be owner of volumes
    ports:
      - "4533:4533"
    restart: unless-stopped
    environment:
      # Optional: put your config options customization here. Examples:
      ND_SCANSCHEDULE: 1h
      ND_LOGLEVEL: info  
      ND_SESSIONTIMEOUT: 24h
      ND_BASEURL: ""
    volumes:
      - "/path/to/data:/data"
      - "/path/to/music:/music:ro"

启动之后就会自动扫描音乐

网页版UI

还能直接在网页上播放

image-20230929115927629

挺不错的,跟jellyfin这类软件差不多。

客户端

到了开源社区发力的时候了,Navidrome支持多种协议,比如Subsonic ,Airsonic ,Madsonic这些,所以只要支持这些协议的客户端都可以使用。

以下是我在网络上搜集到的一些客户端列表,可以根据自己需求进行选择。

  • iOS: play:Sub, substreamer, Amperfy and iSub
  • Android: DSub, Subtracks, substreamer, Ultrasonic and Audinaut
  • Web: Subplayer, Airsonic Refix, Aurial, Jamstash and Subfire
  • Desktop: Sublime Music (Linux) and Sonixd (Windows/Linux/macOS)
  • CLI: Jellycli (Windows/Linux) and STMP (Linux/macOS)
  • Connected Speakers:
    • Sonos: bonob
    • Alexa: AskSonic
  • Other:
    • Subsonic Kodi Plugin
    • Navidrome Kodi Plugin
    • HTTPDirFS

Android 客户端

我主要试用了几个手机上的客户端,体验都不错。

大部分都是开源的,Android上的开源App建议使用 F-droid 商店来下载。

PS: Obtainium 也不错,可以自行把开源App项目的 GitHub、Gitlab 主页添加进去,直接跟踪项目的更新。

tempo

这 App 的界面还是不错的,就是有点容易闪退,不知道是不是我的手机问题。

image-20230929221730668

subtracks

开源的,不错的,不过好像没有全部音乐列表,都是以专辑或歌手的形式展现。

image-20230929221008986

substreamer

这个没有开源,需要在 Google Play 下载

官网: https://substreamerapp.com/

substreamer Your Music. Your Way.

The best free client app for the subsonic music server. Get your music, your way with subsonic and substreamer.

image-20230929220839032

小结

总算又把「个人数据保全计划」推进了一步,这套方案也许不是最完美的,但行之有效,可以把喜爱的音乐自行管理起来,再也不用担心某天突然变灰下架了~

互联网是每个人的,但却又不是每个人都能控制的。

几个 Android 的流媒体客户端用下来,体验都挺一般的,或许把音乐复制到手机上再搭配本地播放器会有比较好的体验(比如椒盐音乐)。

现在的手机存储空间都很大,而且我的还可以用储存卡(mate系列传统),1000首无损音乐也就几十个GB,对于现在白菜价的储存空间来说还是比较轻松的~

参考资料

  • https://v2ex.com/t/964870
  • 音乐迁移计划 - https://blog.wayner.cn/music-go
  • https://github.com/QiuChenlyOpenSource/QQFlacMusicDownloader
  • https://github.com/mos9527/pyncm
  • 2023 年还在坚持本地听歌:Android 音乐播放器还有哪些好选择?
  • Navidrome – 开源音乐服务器,自建云端音乐播放器


浏览 102
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报