废话
从《夏洛特烦恼》、《羞羞的铁拳》到《西虹市首富》,开心麻花貌似成为引爆票房的奇点。想去电影院支持一波,但程序猿看电影不存在的!BUG改完了?膨胀了?还想看电影?
按耐不住内心的渴望,在种种原因的驱使下我还是向枪版低头了(对不起,我悔过),但是这马赛克画质简直瞎了我的鱼眼,各位大佬随意感受一波:
请支持正版
于是我罪恶的点开了朋友圈某微商的福利资源,画质是不错但是他卡啊。。看一秒卡三秒。。
请支持正版
难得摸鱼的时间怎么能浪费在这上面,于是祭出我大Python,很快我就拿到了我想要的.avi.mp4 高清画质的资源,美滋滋~
请支持正版
动手
获取.ts文件
PC访问了福利资源网址,没有任何显示自动下载了一个 .mu38 后缀的文件,面向搜索引擎学习了下,得到以下结果:
m3u8是苹果公司推出一种视频播放标准,是m3u的一种,不过 编码方式是utf-8,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少I/o访问次数,一般存在服务器的内存中),通过m3u8解析出来路径,然后去请求。
看到这里我用Notepad++打开,得到以下结果:
手动请求了一个网址:
``` https://doubanzyv2.tyswmp.com:81/2018/07/30/LSn7hSBfY0LxpKX2/out000.ts
得到一个out000.ts文件
这里的 .ts 文件可以理解为是视屏分隔后的片段,我们只要把它组合起来就是我们想要的结果了。
到这里,基本就有思路了,提取文件中所有 .ts 文件的链接,使用requests挨个请求并保存返回的 .ts 文件,再合并在一起就可以了, so easy !
代码如下:
import requests
import re
with open("playlist.m3u8", "r") as f:
filedetail = f.read()
pattern = re.compile(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+')
url_list = re.findall(pattern, filedetail)
for url in url_list:
requests.packages.urllib3.disable_warnings()
r = requests.get(url,verify=False)
filename = re.findall(".*/(.*?).ts", url)
# print(filename)
with open(filename[0]+".ts", "wb") as code:
code.write(r.content)
print("下载成功", filename[0]+".ts")
这个时候已经获取到所有的 .ts 文件
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202101/03/dbe01b33d7fc4436c6e9917483aef260.bmp?,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
ts文件
然后使用缓冲合并工具合并所有的 .ts 文件。
### 合并
把.ts文件整理到手机当中(用安卓模拟器应该也是可以的),打开软件按照下图的步骤操作即可。
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202101/03/b13efe5809a81de9d4e203d9bbac3b92.bmp?,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
工具以及m3u8文件已经放在云盘上了,有需要的朋友可以回复「西红柿」获取,MP4文件实在分享不出来,有需要的话跑下脚本吧~
## 写在后面
-----
我是咸鱼,这是实用主义系列的第一篇文章。
人生苦短,我用Python。