Bootstrap

付费视频下载到本地,关于ts与m3u8文件下载后的复盘总结

前言:

一切的起因:因为某个同学在某斯上面的会员快要过期了,想把视频下载到本地观看。
我想这还不简单?愉快的接下了任务,接下来,我想我是笑不出来了,但是走过来还是值得。

求助插件

You-Get

会Python的应该都听说过you-get吧,就是支持大多数视频的下载
这里我直接放上开源地址:https://github.com/soimort/you-get
B站的视频你想下载下来直接用这个多线程跑就行了。

Flash Video Downloader

一个在Chrome上的插件,不用说了没用。

Video DownloadHelper

一个在Firefox上的插件,第一次还检测到了
然后刷新页面,哦豁没了,逐渐开始变态起来~

分析网络请求

第一步

  1. 打开F12
  2. 刷新network
  3. 默认观察的是请求的先后顺序

我选择大小之后,随着视频的播放,逐渐产生新的文件
因为是大小倒序,0.ts,1.ts逐渐出现
那说明了这个视频的播放就是一个个这样的ts组成的

在这里插入图片描述

第二步

我接着去请教某位小透明,在他的带领下我明白了,可以找到一个m3u8的文件
这个文件的含义相当于整个视频的总指挥
他里面集合了所有的ts,以及如何加密,密钥来自哪里
那么如何找呢?

在这里插入图片描述

第三步

因为他这个涉及登录的,所以肯定会携带token等认证信息,注意留意这个
其次加载一个网页,首先会加载css,js,图片等先将整个网站的样子加载出来
随后就是js的渲染解码的问题,这个时候就会发出请求m3u8
所以根据waterfall来排序,拉到中间,就能发现上图。

在这里插入图片描述

进而他在里面说明了是AES-128加密
然后密钥对应的地址是URI中的
当然你直接访问肯定是不行的,自己造包又太麻烦
而网页能播放视频,说明密钥肯定也下发了
然后网站的js根据key和m3u8请求服务器并解密,前端就能观看到视频了

在这里插入图片描述

这里有个需要注意的地方,我下面单独说一下

来个小总结

网站是怎么播放视频的呢:

  1. 他是拆分成30秒一个的ts文件
  2. 网站的js会去读取请求来的m3u8文件
  3. 进而js会根据key解密
  4. 直接请求m3u8和key是会被服务器拒绝的

综上:
我们要将m3u8和key拉取到本地
用本地的服务器给我们的工具给可以直接访问到的链接
然后我们就能得到我们想要的视频了

如何处理加密key

  • 使用火狐浏览器

这点值得谷歌浏览器学习哈,自动转码

  • 使用hackbar

有的火狐浏览器是不会自动转码的,如果只存在一行,可以直接复制
到hackbar里面的base64_encode拿到

  • 如果存在换行怎么办?
    在这里插入图片描述
  1. burpsuit抓包 找到这个包的response到解码器里面解
  2. 右键改包的curl命令,到控制台里面发包处理返回回来的二进制(没试过~)

在这里插入图片描述

  • 最后生成key文件

你直接复制是没有用的,二进制当成字符串用~
如下你会得到对应的key
在这里插入图片描述
file_put_contents('./key', base64_decode('DQoNCtL+6IOzUNCrR/OBXiRkDek='));

开始转视频

m3u8dl工具

开源地址:https://github.com/nilaoda/N_m3u8DL-CLI
但是这个在这里不是特别好使

youtu-dl 工具

开源地址 : https://github.com/ytdl-org/youtube-dl
最后直接搞定!

ffmpeg 根本

下载地址:https://www.gyan.dev/ffmpeg/builds/

上面的建议都要加入环境变量
而我就比较懒
直接丢到site-pakage里面了事
注意:ffmpeg有很多阉割版,建议用上面的下载地址下载完成版

在这里插入图片描述

地址

还记得前面我们说过的,网站上的地址是要token认证的
而软件的使用是直接给个链接
加上有几点我们可以利用

  1. m3u8文件是没有加密的
  2. ts文件是直接可以拿下来的

所以我们可以将m3u8拿到本地,给本地连接

这里直接提供几种方式:

  1. XAMPP,PHPstudy等本地开个服务器,丢到里面
    在这里插入图片描述
    在这里插入图片描述
  2. python -m http.server

用python搭建一个临时虚拟的服务器
给连接参考下:
https://www.cnblogs.com/shenshangzz/p/8318143.html
https://juejin.cn/s/python%20http%20server%E6%95%99%E7%A8%8B
https://www.pythonf.cn/read/4681

  1. 白嫖图床

咳咳咳,小透明大佬的百宝箱中的东西
https://github.com/TransparentLC/free-img
这是个好玩意,大厂们也不差这点

最后一步

# 当前文件夹下打开cmd

$ youtu-dl http://127.0.0.1:8112/index.m3u8

在这里插入图片描述

上传到云盘

在这里插入图片描述
搞定!

;