B站视频下载教程(API方式)
这里先随便拿一个视频作为例子。不推荐选择合集,太长不便于分析,但合集和单个视频的API逻辑通用。
步骤一:通过分享链接获取BV号
随便打开一个视频,获取分享链接,例如:https://b23.tv/aPWsr9s。
请求后返回重定向地址(如 <a href="https://www.bilibili.com/video/BV1AAQqBBELn?...>Found</a>),从中提取出 BV号:BV1AAQqBBELn。
步骤二:调用视频信息API获取cid
B站官方API:https://api.bilibili.com/x/web-interface/view?bvid=BV1AAQqBBELn
返回JSON中的重要字段示例:
{
"code": 0,
"data": {
"bvid": "BV1AAQqBBELn",
"title": "【太阳之子】的MV曲换成【夜的第七章】",
"cid": 36935959931,
"pages": [...] // 多集视频会有多个page
}
}从中获得 cid(视频分P的唯一ID)。
步骤三:获取视频流地址
调用播放地址API:GET https://api.bilibili.com/x/player/playurl?bvid=BV1AAQqBBELn&cid=36935959931&qn=120&fnval=4048&fourk=1
参数说明:
qn:画质,120=4K,116=1080P60,112=1080P+,80=1080P,64=720Pfnval:功能标志位,4048 = 请求 DASH + HDR + 4K + AV1 + 8Kfourk=1:允许4K
返回结果中包含各清晰度视频流和音轨的URL(但CDN地址通常需要添加鉴权Header才能下载)。
音质ID对照表
| id | 说明 |
|---|---|
| 30251 | Hi-Res 无损 |
| 30250 | 杜比全景声 |
| 30280 | 192K 高音质 |
| 30232 | 132K 中音质 |
| 30216 | 64K 低音质 |
画质ID对照表
| id | 分辨率 | 说明 | 需要登录 |
|---|---|---|---|
| 12 | 3840×2160 | 8K | 大会员 |
| 7 | 3840×2160 | 4K | 大会员 |
| 11 | 1920×1080 | 1080P 60帧 | 大会员 |
| 6 | 1920×1080 | 1080P 高码率 | 大会员 |
| 80 | 1280×720 | 720P / 1080P | 登录 |
| 64 | 852×480 | 480P | 免登录 |
| 32 | 640×360 | 360P | 免登录 |
| 16 | 640×360 | 360P | 免登录 |
下载时需要添加的Header
直接访问CDN地址会返回403,需要模拟B站Referer等请求头:
curl -o audio.m4s \
-H "Referer: https://www.bilibili.com" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36" \
-H "Origin: https://www.bilibili.com" \
"下载地址"添加后即可正确下载视频/音频流(一般是DASH格式的m4s片段)。
参考项目
备注:
- 分辨率列表示设备分辨率,如“3840×2160”代表8K超高清。
- 实际下载时建议使用专业工具(如上述参考项目),它们会自动处理鉴权、合并音视频等操作。