此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。
前言
近日,有小伙伴说想看一篇关于视频下载的文章,这不,拿bilibili来开刀了。
由于没有深入的对bilibili进行研究,导致文章可读性比较差,不喜勿喷。
虽是浅尝辄止。但是下载视频的目的可以达到。
1. 思路
在这里说下整体思路!
- 找到视音频的url是关键
- 分别下载视音频后,再进行视音频混流(即画面和声音合成一个文件)。
话不多说,下面开始!!!
2. 分析
文章以下图中的视频为例。文中为Firefox浏览器,方便展示抓包效果。
首先就是打开开发者工具抓包啦。如下图:
看到抓包页面的媒体分类,都是mp4格式的数据包,数据包的大小从107字节到2.30MB不等。有一个很有趣的规律如下:
- 107字节的数据包都是通过OPTIONS的方式请求。
- 大一些的数据包都是通过GET方式请求。
- 有两个重复多次的URL(猜测是视音频)
- 请求头的Range字段,下一个文件会接上上一个文件的字节尾数,1文件是0-973,2文件是974-1653。。。
既然如此,下面用代码来请求一下看看。
执行代码后,生成了一个1kb的test.mp4文件,很显然,打开时候报错了
为什么会报错呢??我觉得是文件太小了,修改请求头的Range值为0-1024000,再次运行代码。
这次生成了一个1001kb的mp4文件,且可以播放!!但是视频没有声音,证实 了bilibili的视频文件是视音频分离的。
上面有说到,抓到的数据包大部分是两个重复的URL,现在请求另一个URL看看。
代码只是将URL做了修改,请求头没有变化。
(图中看不出是音频,但是是有声音的),这样,就完成本次抓包工作了。
到了这里,抓包工作已经完成,视音频的由来也清楚了,那问题来了,这么场的一串URL是从哪里来的呢?
!!! 看源码。
百思不得其解,却忘记了最简单的方法,查看网页源码(花费了好一会儿时间才发现,原来源码里面就有!!!)
video的URL:
audio的URL:
到了这里,剩下的用正则匹配源码里面的video和audio的URL都不是问题了吧!!!
剩余问题:
- 还需将视频和音频混流,这个可以用ffmpeg完成或使用格式工厂。
代码我还没有写好,思路如上!!
打完收工。
3. 后面的话
小伙伴们如果感兴趣的话,可以完善代码。几个建议如下:
- 增加可以手动输入搜索视频的功能
- 视音频混流在代码内部完成,不借助外部工具
- 利用Pyqt5做成可视化的bilibili视频下载小工具
完善后代码记得发我一份哦!!!