mirror of
https://github.com/amtoaer/bili-sync.git
synced 2026-07-14 00:52:03 +08:00
8b18e066e21af203650d9bf3f33880df16f16acf
视频下载完成后按发布年龄分段持续刷新弹幕:新鲜期高频、成熟期中频、
老化期低频;超过冷冻阈值后触发最后一次更新并冻结,不再自动刷新(手动
仍可触发)。默认关闭,保持向后兼容。
主要内容:
- 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>
…
…
…
…
简介
Note
bili-sync 是一款专为 NAS 用户编写的哔哩哔哩同步工具,由 Rust & Tokio 驱动。
效果演示
管理页
媒体库概览
媒体库详情
播放(使用 infuse)
文件排布
功能与路线图
- 使用用户填写的凭据认证,并在必要时自动刷新
- 支持收藏夹与视频列表/视频合集的下载
- 自动选择用户设置范围内最优的视频和音频流,并在下载完成后使用 FFmpeg 合并
- 使用 Tokio 与 Reqwest,对视频、视频分页进行异步并发下载
- 使用媒体服务器支持的文件命名,方便一键作为媒体库导入
- 当前轮次下载失败会在下一轮下载时重试,失败次数过多自动丢弃
- 使用数据库保存媒体信息,避免对同个视频的多次请求
- 打印日志,并在请求出现风控时自动终止,等待下一轮执行
- 提供多平台的二进制可执行文件,为 Linux 平台提供了立即可用的 Docker 镜像
- 支持对“稍后再看”内视频的自动扫描与下载
- 支持对 UP 主投稿视频的自动扫描与下载
- 支持限制任务的并行度和接口请求频率
- 支持单个文件的分块并行下载
- 支持使用 Web UI 配置,查看并管理视频、视频源
参考与借鉴
该项目实现过程中主要参考借鉴了如下的项目,感谢他们的贡献:
- bilibili-API-collect B 站的第三方接口文档
- bilibili-api 使用 Python 调用接口的参考实现
- danmu2ass 本项目弹幕下载功能的缝合来源
Description
Languages
Rust
53.4%
Svelte
39%
TypeScript
6.2%
CSS
0.6%
Python
0.3%
Other
0.4%





