自托管服务
advplyr/audiobookshelf avatar
advplyr/audiobookshelf

Audiobookshelf:自托管有声书与播客服务器,目录结构是它的命门

自托管有声读物和播客服务器。 Kindle) 打开播客和有声读物的 RSS 源 您需要什么功能吗?

14,323 个 Star1,166 个 ForkJavaScriptGPL-3.0

秒懂

它是什么?
Audiobookshelf 是一个开源的、自托管的有声书和播客服务器,支持多用户进度同步、RSS 订阅和电子书阅读。它的核心约束在于对目录结构和文件命名有严格要求,部署前需要先想清楚媒体库的组织方式。
适合谁用?
Audiobookshelf 适合愿意按既定目录规范整理媒体文件的个人或家庭用户,尤其是同时管理有声书和播客、需要跨设备同步进度的人。不适合那些希望"丢进去就能用"、拒绝重命名文件或目录的用户,因为它的元数据匹配高度依赖目录结构和命名。
能商用吗?
可以,但有条件。GPL-3.0 是 copyleft 许可证:如果你分发包含它的软件,就必须以同一许可证公开该软件的源代码。只在内部运行、不对外分发,则不会触发这项义务。
还在维护吗?
在维护。仓库最近一次提交在 4 天前。
用什么语言写的?
主要是 JavaScript(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题,谁需要它

Audiobookshelf 解决的是自托管媒体库的碎片化问题。你有大量有声书和播客文件,散落在硬盘或 NAS 上,想在一个界面里统一播放、记录每个用户的收听进度,并在手机和网页之间同步。它提供多用户权限、自动发现媒体更新、元数据抓取和 RSS 订阅。适合家庭用户、小团体,以及不想把收听数据交给商业平台的人。它的 Android 和 iOS 应用仍在测试阶段,iOS 测试名额已满,所以移动端体验要打折扣。

目录结构不是建议,是硬性要求

README 明确写着:目录结构和文件夹名称对 Audiobookshelf 很重要。这不是可选的优化,而是元数据匹配和媒体识别的基础。官方文档有专门的 libraries 分类来规定支持的目录结构和命名约定。换句话说,如果你现有文件的组织方式不符合规范,要么先重新整理,要么接受元数据抓取失败。这一点在同类工具中并不少见,但 Audiobookshelf 把它提到了 README 最显眼的位置,说明它对不规范输入的容忍度很低。部署前不读这部分文档,后面会遇到大量手动修正。

工作方式:从文件扫描到进度同步

Audiobookshelf 的服务端用 Node.js 构建,客户端是 Vue,但 README 说明前端正在重写为 React,旧 Vue 前端的 pull request 已不被接受。它按库(library)来组织媒体,每个库对应一种媒体类型,比如有声书或播客。服务端会监视库目录,自动检测新增或修改的文件,无需手动触发重新扫描。每个用户有独立的进度记录,并通过 WebSocket 在设备间同步。对于有声书,它还支持章节编辑、章节查找(通过 Audnexus API)、将多个音频文件合并为单个 m4b,以及把元数据和封面嵌入音频文件。这些功能说明它不只是播放器,而是一个媒体管理工具。

安装与运行:从 Docker 到源码

官方推荐通过 Docker 安装,具体命令在安装文档中,README 只给出了文档链接。反向代理是常见部署方式,但 README 特别警告:Audiobookshelf 需要 WebSocket 连接。如果你用 Nginx 或 Caddy 做反向代理,必须配置 WebSocket 升级,否则播放和同步会失败。子文件夹部署被支持,但路径必须固定为 /audiobookshelf,且不可更改,这是一个硬限制。从源码运行需要 Node.js 20 和 FFmpeg,先创建 dev.js 配置文件,再执行 npm ci 和客户端构建命令。开发模式下客户端默认运行在 localhost:3333,端口可在 dev.js 中修改。

功能边界:电子书与 RSS 的局限

Audiobookshelf 的电子书支持是基础级别:支持 epub、pdf、cbr、cbz,并有一个内置阅读器,还能把电子书发送到 Kindle 等设备。但 README 没有提及任何批注、书签同步或复杂排版功能,所以它不适合作为主力阅读器。RSS 订阅功能面向播客和有声书,可以开放给外部订阅者,但 README 没有说明如何控制订阅权限或限制带宽。如果你需要精细的订阅者管理,这可能是短板。另外,iOS 应用测试名额已满,且没有明确的正式版时间表,移动端支持目前主要靠 Android 和 PWA。

维护与升级成本

项目活跃,最近一次发布是 2026 年 7 月的 v2.36.0,距离上一个版本约两个月。GPL-3.0 协议意味着你可以自由使用和修改,但如果分发修改版本,必须开源。前端重写正在进行,这是一个重要的维护信号:如果你打算基于现有 Vue 前端做二次开发,现在不是好时机,因为官方不再审查 Vue 前端的 pull request。升级方面,项目提供自动化每日备份和元数据备份,这降低了升级失败时的风险,但备份策略的具体配置需要查阅文档。整体上,维护成本中等,主要成本在于初始的目录整理和反向代理配置。

替代方案与差异

同类工具中,Jellyfin 是常见的媒体服务器,但它主要面向视频,有声书支持是附加功能,目录结构和元数据处理方式不同。Jellyfin 更宽容,但也更少针对有声书的专门功能,比如章节编辑、m4b 合并和 Audnexus API 集成。另一个方向是直接用 Navidrome 或 Airsonic 管理音频,但它们更侧重音乐,对播客和有声书的支持较弱。如果你只需要播客下载,可以单独用 Podgrab 这类工具,但不提供进度同步。Audiobookshelf 的独特之处在于把有声书和播客放在同一个库中,并针对有声书做了深度优化,这是其他通用媒体服务器没有的。

编辑结论

Audiobookshelf 适合愿意按既定目录规范整理媒体文件的个人或家庭用户,尤其是同时管理有声书和播客、需要跨设备同步进度的人。不适合那些希望"丢进去就能用"、拒绝重命名文件或目录的用户,因为它的元数据匹配高度依赖目录结构和命名。部署前先阅读官方 library 文档,确认你的媒体文件组织方式符合要求,并测试从浏览器到服务器的 WebSocket 连接是否畅通。若你只想要一个简单的播客下载器,或对电子书支持要求很高,Audiobookshelf 的电子书功能只是基础级别,可能需要另寻工具。它的 GPL-3.0 协议意味着修改后分发必须开源,但自用不受影响。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记