B站视频下载工具 BiliDownload 使用指南:从无水印4K到批量下载的完整方案
【免费下载链接】BiliDownloadB站视频下载工具项目地址: https://gitcode.com/gh_mirrors/bil/BiliDownload
BiliDownload 是一个基于 Java 的 B站视频下载工具,通过同时调用 B 站 WEB 端与 TV 端 API,帮你把在线视频变成本地文件,支持 360P 到 4K 的清晰度选择,还能优先获取无水印视频源。无论你是想保存课程、收集素材,还是离线缓存,这篇文章会用一条完整的主线带你从零上手。
它凭什么敢说"无水印"?
先讲个有意思的来历。项目作者曾在一个深夜看电视时发现:同一个视频在电视客户端上播放,右上角竟然比手机端少了一样东西——水印。这个细节催生了对 TV 端接口的逆向探索,最终变成了 BiliDownload 的核心能力。
原理其实不难懂:程序在解析清晰度时同时访问 TV 端与 WEB 端两个接口,TV 端返回的accept_watermark字段会标注哪些清晰度不带水印。检测到无水印源后,它会被优先排列在清晰度列表里并打上"无水印"标记,其他来源的清晰度则排在后面。这意味着同一部视频,你往往能拿到比网页端更干净的素材。
清晰度: 1. 超清 4K 无水印 2. 高清 1080P 无水印 3. 高清 720P60 无水印 4. 清晰 480P 无水印 5. 流畅 360P 无水印 6. 超清 4K 7. 高清 1080P60 ...上图来自项目仓库的实际运行截图,BiliDownload 在解析完成后会一次性列出所有可选清晰度,编号选择即可。需要提醒的是,1080P 以上的清晰度通常需要账号开通大会员或电视大会员。
三分钟跑通第一次下载
准备环境只需要两样:JDK 8 或更高版本,以及 FFmpeg 4.0+(用来合并音视频)。然后拉取项目并打包:
git clone https://gitcode.com/gh_mirrors/bil/BiliDownload cd BiliDownload mvn clean package打包成功后,target目录下会生成bili-download-1.3.6-jar-with-dependencies.jar,启动它:
java -jar bili-download-1.3.6-jar-with-dependencies.jar整个下载流程是一串友好的交互问答,你会经历这样几步:
- 输入一个带前缀的
av号或BV号(比如BV1fJ411G7N3) - 选择登录方式(WEB 二维码 / TV 二维码 / 输入 SESSDATA / 跳过)
- 查看稿件的标题、UP主、时长、播放、弹幕、点赞、投币、收藏等信息
- 多分P视频会让你选要下载哪一集
- 选择清晰度、下载选项(视频+音频 / 仅视频 / 仅音频)、保存路径
- 等进度条跑完,FFmpeg 自动合并出最终 MP4
如果你选了"视频+音频",程序会先把视频流和音频流分别下载为临时文件,再调用 FFmpeg 用-vcodec copy -acodec copy无损合并,所以最后得到的是完整 MP4,不需要你手动处理。任何一步输入*exit都能优雅退出。
三种登录方式,怎么选最划算?
这是不少人第一次使用时纠结的地方,说清楚就很简单:
- WEB 端二维码登录:调用 WEB 端 API,解锁网页端高清源,登录后程序会显示本次所用浏览器的 UA,方便你在 B 站的登录通知里核对设备。
- TV 端二维码登录:调用 TV 端 API,配合 TV 端接口去拿无水印源。
- 输入 SESSDATA 登录:在浏览器 F12 的 Cookies 里复制 SESSDATA 值粘贴进去即可,适合命令行环境下没法弹窗的场景。
你完全可以在一次会话里连续登录两端,这样 WEB 和 TV 的高清权限同时生效。SESSDATA、TOKEN、保存路径、FFmpeg 路径这些信息确认保存后,会写进工作目录下的config.yml,下次启动直接免输入。
两条少有人走的路:批量与直连
批量下载:所有交互输入都可以提前写进工作目录的Input.txt,程序检测到文件存在就会自动切换输入源,把答案一行行读进去。你只要准备一个含多行 BV 号、分P编号、清晰度编号的文本,就能实现"挂机批量下载"。
直接下载:如果你手里已经有了音视频流的完整 URL(比如从调试工具里抓到的),可以用直连模式跳过全部解析:
java -jar bili-download-1.3.6-jar-with-dependencies.jar direct "http://视频流地址" "D:\Downloads\成品.mp4"下载完成程序会自动退出,配合脚本使用就是一条自动化流水线。调试时还可以追加debug参数,程序会输出每次访问的 URL 与 UA,方便排查问题。
config.yml 配置文件详解
程序记忆的信息都存在config.yml里,手动编辑同样生效:
sess-data: "你的SESSDATA" # WEB端登录凭据 access-token: "你的TOKEN" # TV端登录凭据 save-path: ~/Videos/BiliDownload # 保存路径,"~"会被替换为用户主目录 ffmpeg-path: /usr/local/bin/ffmpeg thread-amount: 48 # 多线程下载的线程数几个值得记住的参数技巧:
- 线程数:文件大于 8MB 时程序才会询问线程数。给得越大下载越快,但过大容易触发 HTTP 416 错误(超出服务器支持的 Range 范围),官方建议量力而行。
- 路径写法:1.3.6 版本开始支持
~开头自动展开用户主目录;Linux/macOS 上 ffmpeg 可执行文件名不带.exe,程序也能正确识别。 - 磁盘检查:合并前会先校验磁盘剩余空间是否够装下视频加音频,不够会直接报"磁盘空间不足",不会让你白等。
常见坑位避雷指南
用这类工具难免踩坑,提前知道能省不少时间:
| 现象 | 原因与对策 |
|---|---|
| 下载卡在 99% 或速度归零 | 网络抖动导致断流,程序会在 10 秒内平均速度为零时自动中断并重试,多试几次即可 |
| 线程开太多报 416 错误 | 减少thread-amount,比如降到 16 或 8 |
| FFmpeg 合并失败 | 确认 ffmpeg 路径正确、文件权限正常;超 4GB 左右的合并存在已知问题 |
| 提示"拒绝连接" | 检查是否有残留的代理设置(旧版本曾硬编码 127.0.0.1:1081 导致此问题) |
| 无水印源获取失败 | 偶尔拿不到 TV 端无水印源,属于已知问题,可切换清晰度或稍后重试 |
作者也在仓库里大方公开了已知 BUG,比如部分终端下进度信息会被刷新遮挡、瞬时速度可能显示为 0 等。碰到奇怪现象先别慌,多半是项目已知问题而非你操作有误。
顺便说一句:这张报错图是项目历史版本中修复过的一个除零异常,现在的版本已经不再出现。这类问题正是项目欢迎你提 issue 的地方。
用实测数据说话
根据仓库自带的ExampleLog.txt,一次真实的 4K 下载过程是这样:视频流 576.5MB,程序用 48 线程并发,平均速度达到19.3MB/s,整个 8 分 20 秒的视频从解析到合并完成只花了 2 分多钟。项目简介里提到过 32 线程下最高可达 23MB/s,实际表现取决于你的宽带和网络环境,但"比在线播放还快"是真的。
下载过程中你会看到实时刷新的进度、瞬时速度、平均速度和剩余时间,体验相当直观。
给轻度开发者的地图
如果你想改点东西,源码结构非常清爽,核心就三个模块:
src/main/java/me/naptie/bilidownload/ ├── Main.java # 交互流程编排 ├── objects/ │ ├── Downloader.java # 多线程分块下载引擎 │ ├── Frame.java # 二维码弹窗 │ └── Panel.java └── utils/ ├── ConfigManager.java # config.yml 读写 ├── HttpManager.java # HTTP 请求与 UA 管理 ├── LoginManager.java # 登录态管理 ├── QRCodeUtil.java # 二维码生成 └── SignUtil.java # TV 端签名想自定义下载逻辑,重点是Downloader.java里的分片策略和重试机制;想研究无水印源的判定,去看Main.java里对 TV 接口返回的accept_watermark数组的处理逻辑。项目以 MIT 协议开源,欢迎提交 issue 和 pull request,作者也直言"程序仍然存在诸多问题",这恰好是贡献者施展拳脚的空间。
动手吧,但请带着尊重
老规矩,技术的价值取决于怎么用。请把 BiliDownload 下载的内容用于个人学习、素材备份与合理研究,不要二次传播或商用侵权内容,尊重每一位 UP 主的劳动。
现在就可以开始:克隆项目、装上 JDK 和 FFmpeg、敲下那条java -jar命令,把收藏夹里那部不舍得丢失的视频,变成你硬盘里永不过期的资产。技术改变生活,下载让知识永恒。🚀
【免费下载链接】BiliDownloadB站视频下载工具项目地址: https://gitcode.com/gh_mirrors/bil/BiliDownload
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考