diff --git a/daily/2026-06-20.md b/daily/2026-06-20.md index ed4bb18..1291369 100644 --- a/daily/2026-06-20.md +++ b/daily/2026-06-20.md @@ -1,45 +1,51 @@ -# 2026-06-20 Audiobookshelf 部署 + 章节排序经验 +# 2026-06-20 有声书服务全线搭建 -## Audiobookshelf 部署 +## Audiobookshelf 章节排序三层同步铁律 -- Docker 容器:ghcr.io/advplyr/audiobookshelf:latest (v2.35.1),端口 13378 -- docker-compose 管理,路径:`/home/ubuntu/audiobookshelf/` -- Caddy 反代:podcast.xybkwd.top -- 数据目录:config/ metadata/ audiobooks/ podcasts/ +只改文件名不生效,Audiobookshelf 按三层数据排序: -## 章节排序三层同步铁律 - -Audiobookshelf 的章节显示依赖三层数据: - -| 层 | 数据位置 | 关键字段 | +| 层 | 字段 | 规则 | |:---|:---|:---| -| 文件系统 | 文件名 `01-标题.mp3` | 数字前缀保证字母序 | -| books.chapters (SQLite) | JSON 数组 | `start` 时间戳递减 | -| books.audioFiles (SQLite) | JSON 数组 | `index` 顺序递增 | +| 文件系统 | 文件名 `01-标题.mp3` | 数字前缀 | +| books.chapters | `start`(秒) | 必须连续递增 | +| books.audioFiles | `index` | 必须 1→2→3→... | -**只改文件名不生效**,必须三条线同步。 - -## 完整工作流 +## 完整下载→归档工作流 ``` -yt-dlp 下载 → --print upload_date 获取发布时间 - → 按 upload_date 排序 → 生成 01~N 前缀 - → 重命名 01-源端完整标题.mp3 - → 放入 /home/ubuntu/audiobookshelf/audiobooks/专辑名/ - → watcher 自动检测(不重启容器) - → 验证 chapters.start + audioFiles.index 顺序正确 +yt-dlp 下载(带 --print upload_date) + → 按 upload_date 排序 → 加 01-N 前缀 + → 放入 audiobooks/节目名/ + → archive_old_audio.sh <节目> 3 (淘汰旧集到 archive_pending/) + → sync_archive.sh (SCP到 D:/服务器备份/有声书/) + → watcher 自动检测 → 希声同步 ``` -## B站下载要点 +## 服务架构 -- 需 cookies 认证(从本地 Firefox cookies.sqlite 提取 → SCP 上传 /tmp/bilibili_cookies.txt) -- B站无纯音频流,用 `-f worstvideo+worstaudio/worst -x` 最小化下载量 -- 每集 ~40-50MB(音频),下载速度 6-14 MB/s(日本 CDN 节点) -- 服务器带宽 1.5TB/月,完全够用 +| 组件 | 位置 | +|:---|:---| +| Audiobookshelf | podcast.xybkwd.top :13378 | +| 滚动保留 | 每节目 3 集 | +| 待归档 | /home/ubuntu/audiobookshelf/archive_pending/ | +| 本地归档 | D:/服务器备份/有声书/ (392G 可用) | +| 淘汰脚本 | /home/ubuntu/audiobookshelf/scripts/archive_old_audio.sh | +| 同步脚本 | D:/服务器备份/有声书/sync_archive.sh | ## 踩坑记录 -1. `rm` 数据库必须先问用户 - 造成账号数据丢失 -2. Audiobookshelf 章节排序不是靠文件名,是靠 start 时间戳 -3. 操作文件前不要盲目 rm,先用 ls 确认 -4. 容器不需要频繁重启,watcher 会自动检测文件变化 +1. 数据库误删 - 未先问用户,教训:任何 DB/cache 操作必须先确认 +2. 章节排序 - 不是靠文件名字母序,是靠 chapters[].start 时间戳 +3. SCP 中文路径 - 含空格的目录需用临时路径中转 +4. 容器无需频繁重启 - Audiobookshelf watcher 自动检测文件变化 +5. B站无纯音频流 - 用 `-f worstvideo+worstaudio/worst` 最小化下载量(每集 ~40MB) +6. Gitea 凭证 - 固定为 beast API token: `bb731ed7d0d267b98a1c7d082de6c8fc0329ac21` + +## 当前内容 + +| 节目 | 集数 | 来源 | +|:---|:---|:---| +| 渤海小吏·八王之乱 | 5集 | B站 | +| 纵横四海 | 3集 | B站 | +| 翟东升 | 3集 | YouTube | +| Elon Musk | 99集 | 本地导入 |