📝 备注:本项目由 DeepSeek 生成,已经过测试。
一个功能强大的 B 站视频下载工具,支持 命令行(CLI)、Web 界面 和 桌面 GUI (PyQt6) 三种使用方式。
可解析 BV 号、影视番剧 (EP/SS)、收藏夹,支持多分 P 选择、弹幕下载、字幕下载(自动转 SRT)、多清晰度选择(最高 8K),并自动合并音视频(需 FFmpeg)。
- ✅ 支持 BV 视频、影视番剧 (ep/ss)、用户收藏夹 链接解析
- ✅ 自动识别分 P,支持批量下载和自定义选择
- ✅ 多清晰度可选:8K、杜比视界、HDR、4K、1080P 等
- ✅ 下载模式:合并 (merge)(需 FFmpeg)、仅视频 (video)、仅音频 (audio)、分别下载 (separate)
- ✅ 弹幕下载(XML 格式)
- ✅ 字幕下载(自动转换为 SRT,支持多语言选择)
- ✅ 多线程分段下载,支持断点续传
- ✅ 三种界面:
- 命令行 (CLI):轻量、交互式
- Web UI:基于 Flask + Bootstrap,浏览器访问
- 桌面 GUI:基于 PyQt6,原生体验
- ✅ 登录方式:扫码登录 / Cookie 粘贴
- ✅ 跨平台支持 (Windows / macOS / Linux)
- Python 3.8+
- FFmpeg(用于音视频合并,下载地址),需将
ffmpeg添加到系统 PATH 或修改config.py中的FFMPEG_PATH
git clone https://github.com/yhzgs-111/bili-dl.git
cd bili-dl
# 安装核心依赖
pip install -r requirements.txt
# 如需 Web 界面,额外安装:
pip install -r requirements-webui.txt
# 如需 GUI 界面,额外安装:
pip install -r requirements-gui.txt
# 安装全部依赖(包含 Web 和 GUI):
pip install -r requirements-all.txt命令行 (CLI) 版
python main.pyWeb 界面版
python app.py
# 浏览器访问 http://127.0.0.1:5000桌面 GUI 版
python gui.pybili-downloader/
├── main.py # 命令行交互入口,支持直接输入链接、选择分P、清晰度等
├── app.py # Web 服务入口(Flask),提供 REST API 和前端页面
├── gui.py # 桌面 GUI 入口(PyQt6),原生桌面应用
├── parser.py # 核心解析模块:获取视频信息、播放地址、调度下载
├── downloader.py # 文件下载器(多线程/单线程),支持断点续传和进度回调
├── login.py # B站登录模块(扫码/Cookie),管理 Session 和 Cookie 持久化
├── utils.py # 通用工具函数(URL解析、颜色输出、进度打印、时间转换等)
├── config.py # 配置文件(FFmpeg路径、请求头、Cookie/WBI缓存文件名、调试开关)
├── wbi.py # B站 WBI 签名算法(用于防爬虫参数签名)
├── danmaku.py # 弹幕下载(XML 格式)
├── subtitle.py # 字幕下载(从 API 获取 JSON 并转换为 SRT)
├── requirements.txt # 核心依赖(requests, qrcode, Pillow)
├── requirements-webui.txt # Web 界面额外依赖(flask)
├── requirements-gui.txt # GUI 界面额外依赖(PyQt6)
├── requirements-all.txt # 全部依赖(包含 Web 和 GUI)
├── templates/
│ └── index.html # Web 前端页面(Bootstrap + 原生 JS)
├── bilibili_cookies.json # 【自动生成】登录后保存的 Cookie 信息(用于自动登录)
├── wbi_keys.json # 【自动生成】缓存的 WBI 密钥(有效期约 24 小时)
├── downloads/ # 默认下载输出目录(可自定义)
└── __pycache__/ # Python 字节码缓存(自动生成,可安全删除)
| 文件(夹) | 说明 |
|---|---|
bilibili_cookies.json |
登录成功后自动保存的 Cookie 信息,用于下次自动登录。请勿公开分享。 |
wbi_keys.json |
缓存的 WBI 签名密钥,有效期约 24 小时,避免频繁请求。 |
__pycache__/ |
Python 字节码缓存,由解释器自动生成,可安全删除。 |
downloads/ |
默认下载目录,可在程序内自定义。 |
- 扫码登录:程序会生成二维码,使用 B 站 App 扫描确认。
- Cookie 登录:从浏览器复制 Cookie 字符串(格式示例:
SESSDATA=xxx; bili_jct=xxx; DedeUserID=xxx; ...)粘贴即可。 - 登录状态会自动保存到
bilibili_cookies.json,下次启动自动加载。
支持输入:
- BV、EP、SS 号(如
BV1vQ92YAED7、ep333955、ss41410) - 视频链接(如
https://www.bilibili.com/video/BV1vQ92YAED7) - 影视/番剧链接(如
https://www.bilibili.com/bangumi/play/ep333955、https://www.bilibili.com/bangumi/play/ss41410) - 收藏夹链接(如
https://www.bilibili.com/medialist/detail/ml123456)
程序自动识别类型并列出所有分 P。
- 选择要下载的分 P(支持多选或全选)
- 选择清晰度(最高 8K)
- 选择下载模式:
- 合并 (merge):下载音视频并用 FFmpeg 合并为 MP4(推荐)
- 仅视频 (video) / 仅音频 (audio)
- 分别 (separate):音视频分开保存
- 开启弹幕、字幕下载(字幕可指定语言)
- 视频:
标题_P分P序号_video.mp4 - 音频:
标题_P分P序号_audio.m4a - 合并后:
标题_P分P序号.mp4 - 弹幕:
标题_P分P序号_danmaku.xml - 字幕:
标题_P分P序号_sub_语言名.srt
- FFmpeg 依赖:若使用“合并”模式,必须安装 FFmpeg 并确保
config.py中的FFMPEG_PATH指向正确。 - Cookie 安全:
bilibili_cookies.json包含您的登录凭证,请勿上传到公开仓库。 - 大会员限制:部分高清/高码率视频(如 4K、8K)需要大会员权限,否则可能获取失败。
- 网络请求频率:多线程下载时可能触发 B 站风控,如遇频繁失败可降低线程数或延迟重试。
- 字幕语言:解析时仅获取第一分 P 的字幕列表,若不同分 P 字幕不同,程序会在下载每个分 P 时动态获取。
欢迎提交 Issue 和 Pull Request。
如果您发现 Bug 或有功能建议,请通过 GitHub Issues 反馈。
本项目采用 MIT License,可自由使用、修改和分发。详见 LICENSE 文件。
Enjoy! 😊