B站视频下载终极指南:免费开源工具一键保存4K大会员与充电专属视频
B站视频下载终极指南:免费开源工具一键保存4K大会员与充电专属视频
【免费下载链接】bilibili-downloaderB站视频下载,支持下载大会员清晰度4K,持续更新中项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader
你是不是也有这样的经历:收藏夹里躺着一堆值得反复回看的教程,出差路上信号一差就只能对着转圈的画面干瞪眼;你充电支持了喜欢的UP主,对方放出的专属视频却只能在网页端播放,想离线保存却无从下手。bilibili-downloader就是为这类"看得见、存不下"的困境而生的——它是一款免费开源的 Python 命令行工具,专注 B 站视频下载,支持大会员 4K 清晰度与充电专属视频,适合想建立本地视频资源库的普通用户、学习党与内容创作者。读完这篇文章,你将完整跑通一次 B 站视频下载流程。
为什么你需要一个"看得见也存得下"的下载工具
在线播放永远受制于三个变量:网络、会员状态、平台规则。网课想看第二遍,只能反复拖动进度条;通勤路上想补番,信号稍差就卡成幻灯片;更别提那些随时可能因版权而下架的充电专属视频,错过一次,可能就再也找不到。
把视频存到本地,等于一次性买断"随时可看"的自由。bilibili-downloader 的出现,就是想把这件事变得像复制粘贴一样简单:你只管准备好账号信息和视频链接,剩下的解析、下载、合并,全交给工具自动完成。整个项目只有几个 Python 文件,结构清爽,没有任何花哨的界面,专注做好"下载"这一件事。
先弄懂原理:B站的高清视频是怎么"锁"住的
动手之前花两分钟理解机制,能省下后面不少排查时间。
B站的高清内容并不是"谁都能下"的公共资源,服务端会根据请求里携带的账号身份,决定放行到哪一档清晰度。直接复制网页里的视频地址去下载,等于以一个"匿名游客"的身份访问,拿到的往往只有模糊的 480P,大会员专属的 4K 更是直接提示无权限。
bilibili-downloader 的思路很直接:把 B 站账号的 Cookie 作为身份证明,注入到每一次请求里。服务端校验通过后,会返回当前账号最高可达的清晰度列表。项目的 models/video.py 里内置了完整的清晰度档位映射,从"流畅 360P"一路排到"超高清 8K",其中就包含大会员专属的超清 4K(120)、杜比视界 4K(126)。工具在解析时会自动从流列表里选取第一路,也就是质量最高的那一路——Cookie 配对了,4K 就只差一条命令的距离。
第一步实战:三分钟配置账号Cookie
这是整个流程里唯一需要手动操作、也最容易出错的环节,其实全程不到三分钟。
在浏览器里找到你的"会员卡"
- 用 Chrome 或 Edge 登录 B 站,打开任意一个视频页面;
- 按
F12打开开发者工具,切到"网络"(Network)标签; - 按
Ctrl+R刷新页面,点击请求列表中的第一条; - 在右侧"请求标头"里找到
Cookie字段,整行复制。
下面这张仓库官方截图演示的正是这个操作,跟着红框标注的位置走即可:
粘贴进配置文件
打开项目根目录下的 config.py,找到COOKIE = '...'这一行,把你复制的整串 Cookie 粘到引号内替换掉旧值,保存即可。注意不要把引号删掉,也不要粘贴成两行。
这里有两个必须牢记的提醒:
- Cookie 有保质期:其中的
SESSDATA大约 30 天失效,届时要重新走一遍上面的流程替换,这也是 config.py 注释里特意标注"定期更换"的原因; - Cookie 就是你的账号钥匙:拿到它等于拿到账号的部分操作权限,建议只在本机使用,切勿随意分享给他人。
第二步实战:把想下载的视频链接填进列表
打开 config.py,你会看到一个URL列表,里面用引号包着一条条视频链接。想下载什么,就把链接按行填进去,格式如下:
URL = [ # 普通视频 'https://www.bilibili.com/video/BV1M4411c7P4', # 分P视频,只取第2集 'https://www.bilibili.com/video/BV1TnsZzHEcz?p=2', # 充电专属视频 'https://www.bilibili.com/video/BV12gYxz7ESf', ]三个值得记住的细节:
- 分P用
?p=参数:想下第几集就写?p=几,不写则默认第 1 集; - 链接可以混着填:普通视频、分P、充电专属视频可以出现在同一个列表里,程序会自动识别链接类型,调用不同的下载策略,你完全不用操心分类;
- 一次列清所有分P:比如某充电合集有 6 集,就把
p=1到p=6六条链接都填进去,一次跑完,中途不用再动手。
第三步实战:一条命令启动批量下载
配置完成,进入项目根目录执行两条命令:
pip install -r requirements.txt python main.py第一行安装全部依赖,第二行启动下载程序。
运行后,主程序 main.py 会先打印一份下载配置清单——待下载数量、并发模式、输出目录一目了然,让你在动手前就对整个任务心里有数。随后你会看到tqdm进度条实时滚动,视频与音频并行下载,完成后自动合并。下面这张动图展示了终端里的完整运行过程:
全部跑完后,程序还会输出一份摘要:成功几个、失败几个、总耗时多少,甚至把失败的链接自动导出到项目根目录的failed_urls.txt里,供你下次直接复制重试。
下载完成的视频统一落在项目的output目录,临时文件会被自动清理,目录始终干净整洁。一次配置,之后每次只需要往URL列表里加链接,就能持续收获本地视频库。
藏在代码里的三个可靠设计
小工具能稳定跑下来,靠的是 strategy/bilibili_executor.py 里几个不起眼却关键的工程细节。
断点续传与自动重试
下载超过 1GB 的大文件时,断网几乎是必然事件。工具做了两层保险:一是利用 HTTP 的Range请求头实现断点续传——文件已存在多少字节,就接着从那个位置继续下,绝不推倒重来;二是单次失败后自动重试最多 5 次,每次间隔 5 秒,临时性的网络抖动基本能自己扛过去。
音视频并发下载与无损合并
B 站高清视频的流媒体是音画分离的(视频流 + 音频流分开传输),这也是很多"一把梭"下载器下完没声音的根源。这个项目会把视频流与音频流同时并发下载,再用ffmpeg无损合并;如果机器上没有 ffmpeg,会自动降级为内置的 moviepy 合并方案,成片就是正常的有声 MP4。
URL规范化,守住高画质
如果你把BV号?p=2这种不带斜杠的链接直接填进去,B 站会返回一次重定向,而重定向可能丢失会员状态、把清晰度打回 480P。项目内置了 URL 规范化逻辑,自动把链接补全为带斜杠的形式(BV号/?p=2),保住本该属于你的高清晰度。这是个容易被忽略、却能直接决定画质的关键细节。
常见问题速查表
跑通之后如果遇到异常,对照下面这张表基本都能定位:
| 症状 | 原因 | 解法 |
|---|---|---|
| 一直报"无权限"或只出 480P | Cookie 过期或填错 | 重新按第一步流程获取,替换 config.py 中的COOKIE |
| 视频下载"成功"却打不开 | 合并环节缺 ffmpeg | 安装 ffmpeg 后重跑,合并更快更稳 |
| 番剧下载失败并提示地区限制 | 内容仅限中国大陆 IP | 确认使用中国大陆网络环境后再试 |
| 下载到一半卡住不动 | 网络波动 | 不用管,内置重试会自动续上下载 |
进阶玩法:番剧、电影与你的个人视频库
普通视频之外,bilibili-downloader 还预留了番剧与电影的支持。项目采用策略模式,在 strategy/ 目录下同时维护了普通视频策略(default.py)与番剧策略(bangumi.py),程序会根据 URL 自动判断走哪条路径。像https://www.bilibili.com/bangumi/play/ss39429这样的链接可以直接填入URL列表。唯一的硬性条件是番剧电影需要中国大陆 IP——如果你在海外,这类内容会因地区限制而下载失败,代码里也做了明确的地区限制检测与友好提示。
跑通一次之后,你还可以试试这些延伸方向:
- 用
?p=参数批量抓取某个 UP 主整个充电系列的全部集数,攒成一套完整课程; - 把
output目录接入网盘或 NAS,搭建跨设备的个人视频库; - 翻阅 strategy/ 下的源码,理解策略模式如何工作,未来自己动手扩展新的下载类型。
现在,整个闭环已经在你手里了:拿到 Cookie → 填进 config.py → 把链接写进URL列表 → 跑python main.py→ 去output目录收货。大会员 4K、充电专属、分P 合集、批量任务,这些场景你都能独立搞定。打开配置文件,把第一条你想永久保存的视频链接填进去吧——工具的价值,只有在你真正跑通一次之后才会显现。
【免费下载链接】bilibili-downloaderB站视频下载,支持下载大会员清晰度4K,持续更新中项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
