查看原文
其他

实用主义 | 再也不看马赛克画质的电影了

煌金的咸鱼 Python爱好者社区 2019-04-07

作者: 煌金的咸鱼
个人公众号:咸鱼普拉思


废话

从《夏洛特烦恼》、《羞羞的铁拳》到《西虹市首富》,开心麻花貌似成为引爆票房的奇点。想去电影院支持一波,但程序猿看电影不存在的!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 文件

ts文件

然后使用缓冲合并工具合并所有的 .ts 文件。

合并

把.ts文件整理到手机当中(用安卓模拟器应该也是可以的),打开软件按照下图的步骤操作即可。

工具以及m3u8文件已经放在云盘上了,有需要的朋友可以在公众号回复「西红柿」获取,MP4文件实在分享不出来,有需要的话跑下脚本吧~

写在后面

我是咸鱼,这是实用主义系列的第一篇文章。
人生苦短,我用Python。

Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

小编的Python入门免费视频课程!!!

【最新免费微课】小编的Python快速上手matplotlib可视化库!!!

崔老师爬虫实战案例免费学习视频。

陈老师数据分析报告制作免费学习视频。

玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存