BiliFlow 0.7.0 发布:番剧下载来了,个人归档的最后一环补齐

平时刷 B 站,我会有意识地收藏一些值得反复看的视频:技术分享、纪录片、老番。平台内容下架、UP 主删稿的事情见多了,就养成了一个习惯——对自己真正喜欢的内容,留一份本地归档。市面上的下载工具不少,但真正对着「个人归档」这个场景把细节做顺手的并不多。这就是我做了 BiliFlow(仓库名 bilibili-downloader)的原因:一个面向个人归档的 B 站桌面下载工具,GUI 和 CLI 都有,Python 写的,MIT 协议开源。

BiliFlow 0.7.0 发布:番剧下载来了,个人归档的最后一环补齐

今天发布 0.7.0,把这盘棋最重要的一块补上了:原生支持番剧下载,包括 ep 单集和 ss/md 整季解析。

项目仓库:https://github.com/itsVicOC/bilibili-downloader

0.7.0 带来了什么

这个版本的核心是番剧支持,而且是原生实现,没有引入 yt-dlp 或 BBDown 作为运行时依赖。具体做了这些事:

  • 番剧 ep 单集与 ss/md 整季解析:直接粘贴番剧单集链接或者季度页链接就能识别,不需要先转成 BV 号。
  • 整季批量预览:解析整季时会列出正片和 PV、花絮、特别篇等附加章节,默认只勾选正片;确实想要附加内容的话,手动勾选或者 CLI 加 --include-extras。
  • PGC 播放权限判断:番剧和普通 UGC 视频的权限体系不一样,这个版本加了完整的播放权限、试看、地区受限、无流和 DRM 状态判断。账号看不了完整内容的,工具会直接停下来,不做任何绕过。
  • schema v2 元数据:归档时写出的 JSON 元数据升级了结构,番剧信息、分集关系都包含在内。
  • 首次下载版权确认:第一次真正创建下载任务时会弹出版权提示,确认之后才会建立任务和媒体文件;CLI 场景可以用 --acknowledge-copyright 跳过交互。

核心能力一览

能力 说明
多来源解析 BV、AV、ep/ss/md、Bilibili 完整 URL、b23.tv 短链、UP 主合集与系列、收藏夹
完整媒体规格 240P 到 8K,HDR、Dolby Vision,AVC / HEVC / AV1 编码,自动匹配音轨
本地归档输出 MP4、M4A 或 Hi-Res FLAC,可同时保存 ASS 弹幕、SRT 字幕、封面和 JSON 元数据
可恢复任务中心 等待、暂停、失败、完成的记录都持久化保存,异常退出后接着下
批量与多 P 多 P 单选全选、批量预览筛选、来源分页、精确去重、1 到 8 路并发
安全登录 扫码或 Cookie 登录,只保留白名单字段,优先写入系统凭据库
跨平台界面 PySide6 桌面端,900×640 响应式布局,跟随系统日间夜间主题

合规边界是设计出来的,不是口号

做下载工具,绕不开一个问题:边界在哪。我的答案写进了代码和文档里:

不绕过任何权限。 会员、付费、地区限制、DRM、账号权限,一律不碰。接口只返回试看内容、或者没有完整未加密流的时候,任务直接停止。账号能看,是下载的前提,而不是工具要攻克的技术障碍。

凭据尽量少碰。 登录 Cookie 只保留白名单字段,优先存进系统凭据库(macOS Keychain、Windows Credential Manager 这类);凭据库不可用的时候,只在当前进程内存里留着,重启就重新登录。Cookie 不会写进配置文件、任务数据库、元数据、日志,也不会发给媒体 CDN。

日志全面脱敏。 0.7.0 把脱敏范围扩展到了全部允许 Cookie、PGC 播放 URL 和签名参数,排查问题时贴日志不用先手动打码。

这个立场上,工具可能「不好用」——想白嫖会员内容的人会觉得它难用。但它能长期维护下去,这是前提。

为什么要自己做一个

现有的工具不是不能用,是对不上「归档」这个词的要求。

命令行工具功能强大,但每次用都要现查参数,下载完拿到的是裸视频文件,弹幕、字幕、封面、元数据要自己想办法补。在线解析站点的体验更是碰运气,广告、限速、不稳定是常态,归档到一半源站挂了,任务记录跟着消失。

我对「归档」的要求具体是四条:拿到手的是当前账号权限内最高质量的未加密流;相关素材(弹幕、字幕、封面、元数据)一并落地,目录结构可自定义;任务状态持久化,电脑重启、网络中断都能接着下;凭据和日志里不出现不该出现的东西。BiliFlow 就是照着这四条做的,0.7.0 把番剧这个此前只能靠第三方工具处理的品类也纳进了同一条流水线。

任务中心和断点续传值得单独说

下载工具最常见的崩溃场景是「下到 87% 软件闪退了,一切从头再来」。BiliFlow 的任务中心把所有任务状态写进本地数据库:等待、暂停、失败、完成都有记录,断点缓存按内容身份持久化。异常退出后重新打开软件,没下完的任务直接点继续,已下完的分片不会重下。

批量场景下这个设计更实用:一个收藏夹几百个视频,不可能一次下完。任务可以排队、暂停、筛选,1 到 8 路并发自己按网络情况调。番剧整季加入队列后,每一集就是一个独立任务,某一集失败了不影响其他集。

五分钟上手

预构建包在 GitHub Releases 页面,macOS(Apple Silicon)和 Windows 10/11 都有 full 和 lite 两个版本。full 包内置了从固定源码构建的最小 FFmpeg,解压就能用;lite 包体积小,需要自己装 FFmpeg。每个 Release 都附 SHA256SUMS 校验文件和 SBOM,full 包里的 FFMPEG-NOTICE.txt 记录了 FFmpeg 的构建参数和许可证。

GUI 的流程很直白:粘贴链接,点「开始解析」,选分 P、画质、编码和归档附加项,加入下载队列,去任务中心看进度。

命令行也能用,几个例子:

# 只解析元数据,不下载
python -m bilibili_downloader test BV1GJ411x7h7

# 下载当前账号可完整播放的番剧单集
python -m bilibili_downloader download ep123 --quality 80

# 整季下载,默认只下正片
python -m bilibili_downloader download \
  "https://www.bilibili.com/bangumi/play/ss123" \
  --include-extras

几个高频问题

为什么有些画质或编码选不了?
工具能下到什么规格,取决于作品本身有没有这个流、当前账号有没有对应权限、以及 B 站接口实际返回了什么。列表里没有的选项就是真的没有,工具不会变出来。

番剧提示只有试看或地区受限怎么办?
任务会直接停止。这是设计好的行为:工具只使用当前账号已经拥有的完整播放权限,不做任何形式的绕过。换个有权限的环境再试。

macOS 首次打开提示「无法验证开发者」?
发布包默认未做 Apple 公证,在「系统设置 → 隐私与安全性」里确认打开即可。如果某个版本做了签名和公证,会在该版本的发布说明里明确标注。装之前核对一下安装包确实来自仓库 Release 页面。

Linux 能用吗?
暂时没有 Linux 预构建包,按「从源码运行」一节操作即可,Python 3.10 到 3.12 加 FFmpeg。GitHub Actions 的 CI 已经覆盖了多个环境,源码路径是验证过的。

写在最后

这个项目还在持续迭代,文档中心、用户指南、故障排查、构建发布流程都整理在仓库的 docs/ 目录里。如果你是 Python 开发者,欢迎翻翻代码、提 Issue 或者直接 PR;如果你只是想要一个顺手的 B 站归档工具,去 Releases 下个包试试就行。

觉得有用的话,点个 Star 支持一下。遇到问题先在故障排查文档里找一圈,找不到再开 Issue,反馈时附上脱敏后的日志就好。

再提醒一句:工具只帮你归档自己有权限看的内容,下载来的东西怎么用,请遵守平台条款和版权方的许可。观看体验和版权支持,还是要靠官方渠道。