视频下载助手 - 哔哩哔哩

建立於 2 天前
更新於 2 天前
纯本地的视频下载器,使用原生JavaScript对视频音频进行合并并输出,支持登录账号可以观看的最高分辨率视频下载(非破解,下载的清晰度等取决于账号权限),脚本仅供学习研究使用。
總安裝量
225
今日新增
+3
使用者評分
- / 5.0 (0)
目前版本
0.1.1
腳本詳情
授權協議MIT

视频下载助手 - 使用说明

免责声明

  • 本工具仅用于个人学习研究用途,禁止用于商业用途,作者/发布者不对违规使用承担责任。请尊重内容创作者并优先通过正规渠道观看与下载。
  • 脚本由AI生成,不保证准确性、完整性、及时性、可靠性。因使用本工具而造成的任何法律纠纷,由使用者自行承担。
  • 脚本使用纯本地浏览器技术,不涉及任何第三方服务器,不依赖于任何云服务,不会上传任何用户数据,不与任何第三方共享用户数据。

支持环境

  • 浏览器扩展: 推荐使用 Tampermonkey / Violentmonkey/ Greasemonkey/Scriptcat 等 Userscript 管理器(Chrome/Edge/Firefox)。
  • 平台: 现代桌面浏览器(支持 GM_xmlhttpRequest 的 Userscript 管理器)。

安装步骤

  • 1. 安装 Userscript 管理器:在浏览器中安装 Tampermonkey脚本猫Violentmonkey
  • 2. 新建脚本:在扩展中选择“新建脚本”,将 video-download-helper.js 的全部内容粘贴进去并保存。
  • 3. 允许权限:脚本使用跨域请求(GM_xmlhttpRequest),如果扩展提示授权域名或跨域权限,请允许以保证下载功能正常。

如何使用

  • 打开页面: 访问任意 Bilibili 视频页面(匹配:*://www.bilibili.com/video/**://www.bilibili.com/bangumi/play/*)。
  • 呼出面板: 页面右下会出现圆形浮动按钮,点击可展开下载面板。
  • 选择分P: 若视频有多分P,可在“选择分P”区域勾选要下载的分P,支持全选/取消/反选。
  • 选择清晰度: 在“选择清晰度”区域选择合适的画质(如 1080P、4K 等)。
  • 选择合并方式: 可选“JS原生合并”(在浏览器内合并为单个 MP4,推荐)或“分离下载”(分别保存视频与音频)。
  • 开始下载: 点击“开始下载”按钮,面板会显示视频/音频/合并的下载进度。完成后会弹出下载完成提示并自动保存文件。

合并与文件保存行为

  • 默认合并: 使用内置的 JSMergerjs-merge),直接在浏览器内解析 fMP4/MP4 结构并合并轨道,最后生成一个单一的 .mp4 文件。
  • 失败回退: 若合并失败,脚本会回退到“分别保存视频和音频文件”的方式,文件名带后缀 _video.mp4 / _audio.m4a
  • 分离下载: 选择 separate 时,脚本不会尝试合并,直接保存两个独立文件以供外部工具合并。

注意事项与限制

  • 版权与合规: 仅用于个人学习研究,请遵守网站与内容版权政策。脚本不应用于未经授权的分发或商业用途。
  • 付费/受限内容: 对于需要权限、DRM 或付费才可播放的内容,脚本无法获取或下载真实媒体流。
  • 跨域与权限: 脚本依赖 GM_xmlhttpRequest 进行跨域下载,确保 Userscript 管理器允许脚本跨域访问所需域名(例如 api.bilibili.com、视频文件域名等)。
  • 浏览器内存与性能: 大文件下载与合并会占用浏览器内存;请根据设备的内存容量及网络状况自行选择,例如设备性能较差时建议使用专业的哔哩哔哩视频下载器。

故障排查

  • 控制台错误: 请打开浏览器开发者工具查看脚本在 Console 的报错信息,常见问题包括:API 请求失败、播放地址获取失败、合并异常。

  • 下载失败: 若下载中途失败,检查是否是跨域被阻止或网络错误;确认 Userscript 扩展允许 GM_xmlhttpRequest

  • 合并失败: 脚本会在合并失败时保存分离文件,合并失败可能由非标准 MP4 片段或浏览器内存引起。可使用 ffmpeg 在本地合并:

    # 本地用 ffmpeg 合并示例(Windows PowerShell)
    ffmpeg -i "input_video.mp4" -i "input_audio.m4a" -c copy "output_merged.mp4"
    

开发与二次修改

  • 位置: 脚本位于项目根:video-download-helper.js
  • 入口: 脚本在页面加载完毕后调用 init(),创建 UI 并自动尝试 Downloader.refreshInfo()
  • 快速调试: 在 init() 或控制台中调用 Downloader.refreshInfo()Downloader.start() 可手动触发信息刷新或下载流程(仅用于调试)。