下载B站的视频
程序员文章站
2024-03-22 18:12:22
...
大部分up主上传的视频都是可以用you-get进行下载的,但是在下载B站官方的视频就出现问题了,比如我使用you-get下载《日常》的第一集,下载下来了三个文件:
- 日常:第1话 日常 第一话[00].mp4
- 日常:第1话 日常 第一话[01].mp4
- 日常:第1话 日常 第一话.cmt.xml
分别对应视频、音频、弹幕文件,使用pr对音频和视频进行合成的时,视频文件不能正常导入(没有深入了解过,貌似是视频压缩的算法问题?)
所以从另外一种方式来试试,使用fiddler下载。
1、打开fiddler并打开需要下载的网站
https://www.bilibili.com/video/BV1e741187hr
2、在一大堆记录中找到音频和视频文件,文件形式类似于:
30280.m4s, Content-type为video/MP4
30112.m4s Content-type为video/MP4
B站把视频音频都分割成小的数据段,所以在记录中能看到相似的记录有很多条,我们每一种选择一个就行。
我们的具体思路就是把每一‘种’文件的请求头里面的范围改大一点,或者改成固定的大小。
3、打开上图中选中的记录,记录信息
- 1、首先复制Host地址,如上图中选中的upos-hz-mirrorakam……
- 2、记录下图中Response Headers中的Content-Range数据(13860691,这个数字就是音频或者视频文件的完整大小)
- 3、打开Request Headers的Raw,复制所有信息。
4、打开Composer,构造请求
- 1、粘贴从Raw复制的信息,删去第一行。
- 2、修改Range为3.2中记录的数据。Range:bytes=0-13860691
- 3、将3.1中host粘贴进去
- 4、点击Execute
5、保存响应体
完成第四步之后等一会就能看到一个body和Range:bytes一样包,选中它并保存:
6、重复3-5,把另一个文件也请求并保存到本地
7、使用pr进行拼接(不知道为什么这种情况下是可以合并的)
8、附加
如果视频文件过大,超过了Response Headers单次返回的最大值,我们可以把Range:bytes进行拆分如0-999999999、1000000000-1999999999……等等,然后重复3-5,注意保存的时候搞清楚先后顺序。
把下载好的多个视频段进行拼接,在Ubuntu中可以用(Windows也有相对应的操作,自行了解一下吧):
cat 第二部分>>第一部分
cat 第三部分>>第一部分
……
最后,第一部分就是完整的视频\音频
上一篇: java缓冲流