这个B站批量视频下载器是一个基于Python开发的实用工具,专门用于从哔哩哔哩平台批量下载视频内容。作为一个经常需要收集学习资料的技术博主,我开发这个工具的初衷是为了方便自己整理教学视频和讲座内容。工具支持多种下载方式和丰富的功能特性,能够满足大多数学习场景下的视频下载需求。
重要提示:本工具仅供个人学习研究使用,请遵守B站用户协议和相关法律法规,不得用于商业用途或侵犯版权。
工具的核心优势在于其批量处理能力和稳定性设计。相比市面上常见的单视频下载工具,这个下载器可以一次性处理数十甚至上百个视频,自动完成从获取信息到最终合并的全流程,大大提升了工作效率。我在实际使用中,用它整理过编程教程、学术讲座等系列视频,节省了大量手动操作的时间。
批量下载是这款工具最核心的功能,它提供了两种灵活的输入方式:
手动输入模式:适合临时下载少量视频,直接输入BV号即可开始任务。支持多种分隔符(逗号、空格或换行),即使是从网页复制粘贴的杂乱列表也能自动识别。
文件读取模式:适合大规模下载任务。提前将BV号整理成文本文件,每行一个编号,程序会自动读取并顺序下载。这种方式特别适合需要分批次下载的场景,比如我经常用它来下载整个课程系列的所有视频。
在实际应用中,我发现文件读取模式配合脚本自动化可以发挥更大价值。比如先用爬虫获取某个UP主的所有视频BV号,保存到文件后再用这个工具批量下载,整个过程几乎不需要人工干预。
工具默认选择1080P高码率视频流,这是通过分析B站的DASH格式资源实现的。DASH(Dynamic Adaptive Streaming over HTTP)是B站采用的流媒体传输协议,它将视频和音频分离存储,允许用户根据网络状况选择不同质量的流。
技术实现上,程序会先获取视频的元数据,然后从中提取出最佳的视频流和音频流URL。这里有个细节需要注意:有些高画质视频需要大会员权限才能访问,因此在获取播放地址时会进行权限验证。
下载完成后,工具使用moviepy库进行音视频合并。相比常见的ffmpeg方案,moviepy的优点是纯Python实现,依赖更少,且提供了更友好的API接口。合并过程主要分为三步:
CompositeVideoClip将两者同步我特别添加了临时文件清理功能,避免磁盘空间被大量中间文件占用。这个功能在批量处理大量视频时非常实用。
B站对视频访问有一定限制,特别是高清视频需要登录后才能获取。工具通过Cookie认证解决这个问题,核心是三个关键字段:
SESSDATA:会话标识bili_jct:CSRF防护令牌DedeUserID:用户ID这些信息可以通过浏览器开发者工具获取。在代码实现上,我设计了一个验证函数,确保Cookie的完整性,避免因Cookie失效导致批量任务中途失败。
网络请求中最常见的问题就是连接不稳定。为此我实现了多层保护机制:
这些机制显著提高了下载成功率。在实际测试中,即使网络状况不佳,也能保证大多数视频能完整下载。
工具需要Python 3.6及以上版本运行。建议使用虚拟环境隔离依赖:
bash复制python -m venv bili_downloader
source bili_downloader/bin/activate # Linux/Mac
bili_downloader\Scripts\activate # Windows
核心依赖有三个:
bash复制pip install requests urllib3 moviepy
requests:处理HTTP请求urllib3:提供重试机制支持moviepy:音视频合并对于moviepy,它本身依赖一些底层库来处理视频。如果在安装过程中遇到问题,可能需要先安装系统级的依赖,比如ImageMagick(用于处理视频帧)。
获取Cookie的步骤:
将复制的Cookie保存到cookies.txt文件中,格式如下:
code复制SESSDATA=your_sessdata_value; bili_jct=your_jct_value; DedeUserID=your_userid;
安全提示:Cookie相当于账号凭证,请妥善保管,不要分享给他人。
| 特性 | 手动输入模式 | 文件读取模式 |
|---|---|---|
| 适用场景 | 少量视频 | 大量视频 |
| 输入方式 | 命令行交互 | 文本文件 |
| 最大BV号数量 | 无限制 | 无限制 |
| 适合自动化 | 否 | 是 |
| 错误处理便利性 | 一般 | 优秀 |
假设我们要下载三个编程教程视频,BV号分别为:BV1xx411c7mD、BV2yy411c7mE、BV3zz411c7mF
方法一:手动输入
code复制请输入BV号(多个BV号用逗号、空格或换行分隔):BV1xx411c7mD,BV2yy411c7mE BV3zz411c7mF
方法二:文件读取
创建tutorials.txt文件,内容为:
code复制BV1xx411c7mD
BV2yy411c7mE
BV3zz411c7mF
然后运行程序选择文件模式,输入文件路径即可。
BatchVideoDownloader类是整个程序的核心,采用面向对象的方式组织代码。这种设计使得功能模块划分清晰,也便于后期扩展。
初始化时主要完成四项工作:
持久化会话的优势在于可以复用TCP连接,减少建立连接的开销,这在批量下载场景下能显著提升性能。
通过B站API获取视频元数据是整个下载流程的第一步。关键API是:
code复制https://api.bilibili.com/x/web-interface/view?bvid={bvid}
这个接口返回JSON格式的数据,包含视频标题、作者、分P信息等。程序会从中提取出必需的字段,特别是每个分P的cid,这是获取视频流的关键参数。
为了提高大文件下载的可靠性,我实现了分块下载机制。每个视频流被分成多个小块下载,同时显示实时进度。这不仅让用户了解下载状态,也能在网络中断时从中断点继续,避免重新下载。
进度显示采用简单的命令行输出,格式为:
code复制[BV1xx411c7mD] 下载中: 65%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████