Skip to content

Givenwels/bilibili

Repository files navigation

B站视频下载助手 (Chrome Extension, Manifest V3)

在 bilibili 视频页右下角注入一个悬浮按钮,点击后展开下载面板:显示标题、封面、清晰度选择、下载按钮、任务进度。

下载任务由 background service worker + chrome.downloads 管理,关闭面板、切换标签页、跳转页面都不会中断下载。


文件结构

哔哩哔哩视频下载插件/
├── manifest.json       # MV3 配置
├── background.js       # Service Worker:任务调度 + chrome.downloads + 持久化
├── content.js          # 注入悬浮按钮、面板、解析 __playinfo__
├── content.css         # 悬浮 UI 样式
├── icons/              # 可选:icon16/48/128.png(缺失不影响功能,控制台会报图标 404)
└── README.md

安装

  1. 打开 chrome://extensions
  2. 右上角打开 "开发者模式"
  3. 点击 "加载已解压的扩展程序",选择本目录 F:\trae\哔哩哔哩视频下载插件
  4. 打开任意 B 站视频页(https://www.bilibili.com/video/BV... 或番剧 bangumi/play/...),等播放器加载后,右下角会出现粉色 "下载" 悬浮按钮

使用

  1. 视频开始播放后点击右下角 "下载" 按钮
  2. 面板会自动解析页面内 window.__playinfo__,列出当前账号可获得的清晰度
  3. 选择清晰度 → 点击 "开始下载"
  4. 任务进入 background,文件保存到 Chrome 默认下载目录的 bilibili/ 子目录
  5. 关闭面板、切换 tab、跳到其它页面都不会打断下载;点扩展图标或重新打开面板还能看到进度

关于 DASH 双流

B 站 1080P 及以上几乎都是 DASH(视频流 + 音频流分离的 .m4s)。Chrome 扩展无法在浏览器里跑 ffmpeg,所以本插件诚实地:

  • 把视频流保存为 标题_清晰度_video.m4s
  • 把音频流保存为 标题_清晰度_audio.m4s

合并命令(本地装好 ffmpeg):

ffmpeg -i 标题_xxx_video.m4s -i 标题_xxx_audio.m4s -c copy 标题.mp4

部分老视频/番剧片段返回 durl 格式(单 mp4/flv),此时会直接下成单文件。

工作原理

  • content.js 注入到 B 站视频页:在 main world 里读 window.__playinfo__window.__INITIAL_STATE__(content script 在 isolated world 拿不到,所以通过 postMessage 桥接);解析出清晰度列表 + 视频/音频 URL。
  • 用户点下载 → chrome.runtime.sendMessage({ type: 'CREATE_TASK', task }) 发给 background。
  • background.js(Service Worker,MV3 module 类型):
    • chrome.downloads.download 启动下载,记录 downloadId → taskId 映射
    • chrome.downloads.onChanged 监听状态变化
    • 800ms 轮询 chrome.downloads.search 拿字节数(onChanged 不会主动推 bytesReceived
    • 任务全程写入 chrome.storage.local,浏览器重启也能看到历史
    • 通过 chrome.tabs.sendMessage 把进度广播给所有打开的 content script
  • 即使用户关闭面板或换 tab,Service Worker 还在跑、chrome.downloads 还在传输,下载不会中断。Service Worker 可能被 Chrome 休眠,但活跃下载会让它保持唤醒;即使被回收,下载也是 Chrome 浏览器进程在做,与 SW 解耦。

已知限制 / 没绕过的东西

  • 只能拿到 当前账号在 __playinfo__ 里能看到的清晰度。没开大会员就拿不到 1080P+,付费番剧未购买就只能下试看 —— 这是设计上有意的,不绕过登录/付费/DRM。
  • 部分高码率 CDN 链路对 Referer 校验严格。chrome.downloads.download 不能直接设请求头;如果某些链接 403,可以加一段 declarativeNetRequest 规则注入 Referer: https://www.bilibili.com(本版本未默认开启,避免过度授权;如需要可以告诉我加上)。
  • durl 多分段视频目前只下第一段。
  • 没有内置 ffmpeg 合并;DASH 双流需要用户本地合并。
  • 没有真正的图标文件,icons/icon128.png 缺失时通知图标会 fail-silent;想消除控制台 404,自己往 icons/ 放三个 PNG 即可。

调试

  • 扩展页chrome://extensions → 找到本扩展 → 点 "Service Worker" 链接,能看到 background 的 console
  • content script:在 B 站页面 F12,Console 里搜 [BiliDL]
  • 存储查看:扩展详情 → "检查视图" → Service Worker → Application → Storage → Extension Storage → Local,看 bili_dl_tasks
  • 改完代码后回 chrome://extensions,点本扩展卡片上的刷新图标,再刷新 B 站页面

合规说明

本扩展仅用于下载用户有权保存的视频,不绕过任何 DRM、会员、付费、登录或平台安全机制。用户应遵守 bilibili 用户协议及当地法律法规,下载内容仅供个人学习/离线观看,不得用于二次分发或商业用途。

About

B站视频下载助手 - Chrome扩展,支持DASH流合并、ffmpeg.wasm音视频处理

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors