Skip to content

Latest commit

 

History

History
149 lines (123 loc) · 6.92 KB

File metadata and controls

149 lines (123 loc) · 6.92 KB

🎬 B站全能解析下载器

📝 备注:本项目由 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)

📦 安装与运行

1. 环境要求

  • Python 3.8+
  • FFmpeg(用于音视频合并,下载地址),需将 ffmpeg 添加到系统 PATH 或修改 config.py 中的 FFMPEG_PATH

2. 安装依赖

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

3. 启动程序

命令行 (CLI) 版

python main.py

Web 界面版

python app.py
# 浏览器访问 http://127.0.0.1:5000

桌面 GUI 版

python gui.py

📁 项目文件结构及说明

bili-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 号(如 BV1vQ92YAED7ep333955ss41410
  • 视频链接(如 https://www.bilibili.com/video/BV1vQ92YAED7
  • 影视/番剧链接(如 https://www.bilibili.com/bangumi/play/ep333955https://www.bilibili.com/bangumi/play/ss41410
  • 收藏夹链接(如 https://www.bilibili.com/medialist/detail/ml123456

程序自动识别类型并列出所有分 P。

下载设置

  1. 选择要下载的分 P(支持多选或全选)
  2. 选择清晰度(最高 8K)
  3. 选择下载模式:
    • 合并 (merge):下载音视频并用 FFmpeg 合并为 MP4(推荐)
    • 仅视频 (video) / 仅音频 (audio)
    • 分别 (separate):音视频分开保存
  4. 开启弹幕、字幕下载(字幕可指定语言)

输出文件命名

  • 视频:标题_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! 😊