bilibili-parse怎么用?三步拿到B站高清视频源地址的免费PHP解析工具实测
【免费下载链接】bilibili-parsebilibili Video API项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse
凌晨一点,我的剪辑软件停在时间轴上,缺的那段素材来自B站一个讲解视频。平台没有"下载"按钮,我试了录屏,画质糊成一团;试了网页上那些"一键下载"的小站,弹窗比我的浏览器收藏夹还多。最后是一个做后端的朋友甩来一行字:bilibili-parse。这个免费开源的B站视频解析工具,只靠几个URL参数,就把高清视频源地址交到了我手里——而它背后的代码量,小得让我一度怀疑自己看错了。
一、一次失败的抢救:我以为B站视频"下载不了"
先说我的失败史,也许你也经历过。
第一招,录屏。开到最高画质,录完发现不仅占了几十个G,画面还在弹幕飘过时掉帧。放弃。
第二招,找在线解析站。界面很漂亮,点下去先弹三个广告窗口,再要我下载一个来路不明的"万能播放器"。我果断关掉,顺手把那个网站拉黑了。
第三招,自己动手。打开开发者工具,在B站播放器请求里翻出了视频地址,激动地粘进下载器——第二天再打开,失效了。原来这类地址是临时签发的,跟视频编号、清晰度、你的浏览器身份绑定在一起,过一段时间就作废。
那天晚上我得出一个结论:不是B站视频"下载不了",而是缺一个能替你把地址参数全部对上的正经工具。
二、为什么B站不给下载按钮?源地址上了三道锁
把这件事拆开看,你会发现播放器其实"看得到"视频的真相地址,只是不给你。
打个比方。视频源地址就像电影院的放映室,你在银幕前看得津津有味,但胶片(真实地址)只有放映员碰得到。B站给你看的,永远是隔着玻璃的投影,而不是胶片本身。
这扇门上了三道锁:
- 第一道锁,动态签发。每个视频的真实地址都由服务器按需生成,绑定一个叫 CID 的编号(每个分P、每集番剧都有自己独一无二的编号),你光有页面链接没用,还得对上这个"暗号"。
- 第二道锁,请求伪装。向B站要地址时,请求必须带着正确的 User-Agent、Referer、Cookie,假装自己就是官方播放器。普通人手搓一个请求,分分钟被识破。
- 第三道锁,参数对应。清晰度、输出格式(flv、mp4、dash)、分P序号,每一个都要在请求里写对,写错任何一个,要么返回报错,要么给你一个阉割版画质。
bilibili-parse 干的事情,就是把这三道锁的钥匙一次性配齐:你告诉它视频编号,它去B站官方接口按规矩要地址,再把干净的结果交还给你。
三、实战:第一次用 bilibili-parse 解析出高清源地址
上手过程比我想象的简单得多。项目是纯 PHP 写的,要求很低:PHP 5.4 以上,装好 Curl 和 OpenSSL 扩展就能跑。Curl 负责向B站发请求,OpenSSL 负责处理加密数据,这两个都是PHP生态里最常见的东西。
拉代码只需要一行:
git clone https://gitcode.com/gh_mirrors/bi/bilibili-parse丢到服务器上,然后在浏览器里输入:
https://你的域名/index.php?bv=BV1xx4y1x7zz&p=1&q=64&format=mp4&otype=json当时我心里直打鼓:就这么几个参数,真能把地址挖出来?回车,屏幕上返回了一段 JSON:
{ "code": 0, "quality": 64, "accept_quality": [127, 120, 80, 64, 32, 16], "url": "https://upos-hz-mirrorakam.bilivideo.com/upgcx/code/xxxxxxxx" }标题、可选清晰度、真实播放地址,清清楚楚摆在眼前。那种感觉很像以为锁死的门,结果发现钥匙就挂在门边。
这还没完,它给了三种"收货方式",按otype参数切换:
otype=json:返回结构化数据,适合程序读取,也是上面看到的样子;otype=url:只回一行纯地址,可以直接丢进下载器或者命令行工具;otype=dplayer:直接唤起一个内置播放器,想在自己网站里嵌视频,改一个参数就行。
完整的参数表是这样的,照着用就行:
| 参数 | 作用 | 可选值 |
|---|---|---|
| av / bv | 视频编号,二选一 | - |
| ep | 番剧剧集编号 | - |
| p | 分P序号 | 默认 1 |
| q | 清晰度 | 16 / 32 / 64 / 80 |
| type | 视频类型 | video / bangumi / cheese |
| format | 输出格式 | flv / dash / mp4 |
| otype | 返回形式 | json / url / dplayer |
清晰度数字越大越清晰,64 到 80 之间足够日常用了,不至于把文件撑得太大。
四、除了视频,它还懂番剧、课程和分P:几个少有人提的用法
只拿一个普通视频练手,远远没到它的上限。我多试了几个场景,发现它比第一眼看起来"贪心"得多。
1. 番剧和付费课程也能解。把type改成bangumi或cheese,再用ep传剧集编号,它就会去对应接口要地址。看动画追番、临时需要课程片段,都不用回到录屏的老路。
2. 多P视频按集取。很多UP主把一个系列拆成好几P,用p参数指定第几集,它会解析对应分P的地址,不会给你整个播放列表。
3. dash 模式把音画拆开。format=dash时返回的是分离的音轨和画轨地址(video + audio 两段),画质上限更高,适合追求极致清晰度、或者想自己做音画合成的场景。普通下载用 flv 或 mp4 就够了。
4. 会员专属清晰度,交 Cookie 就行。遇到"视频清晰度受限,可能需要会员"的提示,多数是权限问题。库里准备了cookie()方法,把你自己登录态的 Cookie 传进去,往往就通了。
5. 自带缓存,热视频秒回。默认关闭,但预留了一小时缓存机制(文件或 apcu 两种实现)。同一个视频解析过一次,后续请求直接读缓存,服务器压力小,响应也快。核心逻辑全在src/Bilibili.php这一个文件里,想改逻辑、加功能,都从这儿下手,入口在index.php,参数全走 URL,前端集成非常省事——它甚至已经帮你开好了跨域头。
五、用之前,请先记下这三条边界
工具是好工具,但有几句话得说在前面。
清晰度受限不等于失败。多数情况是视频需要会员权限,带上自己的 Cookie 往往能解决;如果还不行,说明确实没有权限,换个档位即可,不必死磕。
批量请求别太猛。解析接口本质是在访问B站官方服务器,一口气打几百个请求,既显得没礼貌,也可能让你的IP被暂时限制。放慢节奏,留点余地。
它可以解析,不代表你可以为所欲为。这个工具返回的地址依然来自B站官方服务器,它不存储任何内容,也不搬运视频。下载与否、存到哪里,都由你自己决定。把解析到的内容用于个人学习、离线备课、正当的素材整理,是没有问题的;但随意搬运他人作品、二次分发,那就在越线了。工具是中性的,它最终是帮手还是麻烦,取决于用它的那只手。
六、回到凌晨一点的剪辑台
凌晨一点半,我把解析出来的地址粘进下载器,看着进度条慢慢走满。第二天上课,课件在没联网的会议室里流畅播放,一点没卡。
回头想想,那个晚上真正让我懊恼的,其实不是"下载不了视频",而是"明明看得到的东西,却留不住"。bilibili-parse 解决的正是这件事:普通用户想离线存档、老师想离线备课、开发者想给自己的应用加一个视频解析能力,它都覆盖得到。部署简单,文档友好,MIT 开源协议,想商用、想二次开发都随你。
如果你也曾在某个深夜,对着一个想留住的视频页面发呆,那它值得你花五分钟试一次。愿你把每一份值得珍惜的内容,都稳稳地收进自己的生活里——而不是让它随着页面刷新,悄悄溜走。
【免费下载链接】bilibili-parsebilibili Video API项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考