CorrectRoadH 8b18e066e2 feat: 弹幕增量更新(三段式策略 + 换源检测 + 手动刷新)
视频下载完成后按发布年龄分段持续刷新弹幕:新鲜期高频、成熟期中频、
老化期低频;超过冷冻阈值后触发最后一次更新并冻结,不再自动刷新(手动
仍可触发)。默认关闭,保持向后兼容。

主要内容:
- DB: page 表新增 danmaku_last_synced_at / danmaku_sync_generation /
  danmaku_cid_snapshot 三列(SQLite 拆分独立 ALTER)
- 配置: DanmakuUpdatePolicy 三段式参数 + 校验
- 决策: 纯函数 should_sync_danmaku + stage_for_age helper,覆盖单元测试
- 调度: 主下载结束后挂一次 refresh_danmaku_incremental(策略关时零开销)
- 换源检测: 每视频拉一次 view_info,对比 cid/duration/dimension;cid
  变化时保留弹幕位 OK 但清掉其他子任务位 + video 完成位,让主流程重抓
  MP4/SRT 等本地资产,避免本地资产与新内容错配
- 弹幕写入: 原子 rename,避免播放器读到半截 ASS
- API: POST /api/videos/{id}/refresh-danmaku(best-effort)
       POST /api/pages/{id}/refresh-danmaku(严格模式,失败 4xx/5xx)
- 前端: 设置页弹幕 Tab 增加策略表单;视频详情页加"刷新弹幕"按钮 +
  分页层弹幕阶段 Badge + 单页刷新

设计细节:
- 候选过滤遵循项目"disabled = 不动"的统一约定,跳过未启用源的视频
- 仅在策略启用时才在主下载路径写同步元数据,避免老视频被误标 Frozen
- 手动刷新 cap 在 Cold 阶段,不会把 Mature/Cold 视频意外回退或冻结

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 18:16:22 +08:00

bili-sync

简介

Note

查看文档 加入 Telegram 交流群

bili-sync 是一款专为 NAS 用户编写的哔哩哔哩同步工具,由 Rust & Tokio 驱动。

效果演示

管理页

管理页

媒体库概览

媒体库概览

媒体库详情

媒体库详情

播放(使用 infuse

播放

文件排布

文件

功能与路线图

  • 使用用户填写的凭据认证,并在必要时自动刷新
  • 支持收藏夹与视频列表/视频合集的下载
  • 自动选择用户设置范围内最优的视频和音频流,并在下载完成后使用 FFmpeg 合并
  • 使用 Tokio 与 Reqwest对视频、视频分页进行异步并发下载
  • 使用媒体服务器支持的文件命名,方便一键作为媒体库导入
  • 当前轮次下载失败会在下一轮下载时重试,失败次数过多自动丢弃
  • 使用数据库保存媒体信息,避免对同个视频的多次请求
  • 打印日志,并在请求出现风控时自动终止,等待下一轮执行
  • 提供多平台的二进制可执行文件,为 Linux 平台提供了立即可用的 Docker 镜像
  • 支持对“稍后再看”内视频的自动扫描与下载
  • 支持对 UP 主投稿视频的自动扫描与下载
  • 支持限制任务的并行度和接口请求频率
  • 支持单个文件的分块并行下载
  • 支持使用 Web UI 配置,查看并管理视频、视频源

参考与借鉴

该项目实现过程中主要参考借鉴了如下的项目,感谢他们的贡献:

Description
由 Rust & Tokio 驱动的哔哩哔哩同步工具
Readme 66 MiB
Languages
Rust 53.7%
Svelte 38.7%
TypeScript 6.2%
CSS 0.6%
Python 0.3%
Other 0.4%