在 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
- 打开
chrome://extensions - 右上角打开 "开发者模式"
- 点击 "加载已解压的扩展程序",选择本目录
F:\trae\哔哩哔哩视频下载插件 - 打开任意 B 站视频页(
https://www.bilibili.com/video/BV...或番剧bangumi/play/...),等播放器加载后,右下角会出现粉色 "下载" 悬浮按钮
- 视频开始播放后点击右下角 "下载" 按钮
- 面板会自动解析页面内
window.__playinfo__,列出当前账号可获得的清晰度 - 选择清晰度 → 点击 "开始下载"
- 任务进入 background,文件保存到 Chrome 默认下载目录的
bilibili/子目录 - 关闭面板、切换 tab、跳到其它页面都不会打断下载;点扩展图标或重新打开面板还能看到进度
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 用户协议及当地法律法规,下载内容仅供个人学习/离线观看,不得用于二次分发或商业用途。