时间:2021-05-23
m3u8是苹果公司推出一种视频播放标准,是m3u的一种,不过编码方式是utf-8,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少I/o访问次数,一般存在服务器的内存中),通过m3u8解析出来路径,然后去请求。
示例:
#EXTM3U#EXT-X-TARGETDURATION:10#EXTINF:9,http://data.video.iqiyi.com/videos/vts/20210301/69/b8/73ad4ef04fde4586ef2799ecd67241ce.ts?qypid=2645242154145600_04000000001000000000_96&start=496696&end=779448&contentlength=282752&sd=20200&qdv=1&qd_uid=0&qd_tvid=2645242154145600&qd_vip=0&qd_src=02029022240000000000&qd_tm=1614590393988&qd_ip=0&qd_p=0&qd_k=4eb685f1966cbd08e6a9648fe0b8c007&ve=&sgti=&dfp=&qd_sc=f9a4f133a622871b6739734615ef178d#EXTINF:9,http://data.video.iqiyi.com/videos/vts/20210301/69/b8/73ad4ef04fde4586ef2799ecd67241ce.ts?qypid=2645242154145600_04000000001000000000_96&start=779448&end=1008432&contentlength=228984&sd=29200&qdv=1&qd_uid=0&qd_tvid=2645242154145600&qd_vip=0&qd_src=02029022240000000000&qd_tm=1614590393988&qd_ip=0&qd_p=0&qd_k=4eb685f1966cbd08e6a9648fe0b8c007&ve=&sgti=&dfp=&qd_sc=f9a4f133a622871b6739734615ef178d#EXTINF:9,http://data.video.iqiyi.com/videos/vts/20210301/69/b8/73ad4ef04fde4586ef2799ecd67241ce.ts?qypid=2645242154145600_04000000001000000000_96&start=5934408&end=6141020&contentlength=206612&sd=198733&qdv=1&qd_uid=0&qd_tvid=2645242154145600&qd_vip=0&qd_src=02029022240000000000&qd_tm=1614590393988&qd_ip=0&qd_p=0&qd_k=4eb685f1966cbd08e6a9648fe0b8c007&ve=&sgti=&dfp=&qd_sc=f9a4f133a622871b6739734615ef178d#EXT-X-ENDLIST预览器打开会出现下载ts文件
我们想要的mp4文件就是一个个ts文件按照顺序拼接成的,废话不多说直接上代码。
# -*- coding:utf-8 -*- """Author:SPIDERMANTime: 2021/3/1 Software: PyCharm"""import loggingimport osfrom glob import iglobimport requestsimport m3u8from urllib.parse import urljoinfrom concurrent.futures import ThreadPoolExecutorfrom natsort import natsortedclass M3u8Download: def __init__(self,m3u8_url): self.m3u8_url = m3u8_url self.headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' } self.threadpool = ThreadPoolExecutor(max_workers=10) self.file_name = 'weibo.mp4' logging.basicConfig(format='[%(asctime)s][*%(levelname)s]:%(message)s', level=logging.INFO) def get_ts_url(self,m3u8_url): """ 解析ts_url :param m3u8_url: :return: """ m3u8_obj = m3u8.load(m3u8_url) base_uri = m3u8_obj.base_uri logging.info('[*]get_base_uri'+base_uri) for seg in m3u8_obj.segments: yield urljoin(base_uri, seg.uri) def download__ts(self, urlinfo): """ 下载ts文件 :param urlinfo: :return: """ url, ts_name = urlinfo res = requests.get(url, headers=self.headers) with open(ts_name, 'wb') as fp: fp.write(res.content) logging.info('[*download]'+ts_name) def download_all_ts(self): """ 下载所有函数 :return: """ ts_urls = self.get_ts_url(self.m3u8_url) logging.info('[*download]download:'+self.m3u8_url) for index, ts_url in enumerate(ts_urls): print(ts_url) self.threadpool.submit(self.download__ts, [ts_url, f'{index}.ts']) self.threadpool.shutdown() def remove_ts(self,ts_path): """ 删除ts文件 :param ts_path: :return: """ for ts in iglob(ts_path): os.remove(ts) logging.info('[*remove]remove all *.ts') def run(self): self.download_all_ts() ts_path = '*.ts' all_ts = iglob(ts_path) with open(self.file_name, 'wb') as fn: #根据ts排序 for ts in natsorted(all_ts): #读ts写mp4 with open(ts, 'rb') as ft: scline = ft.read() fn.write(scline) self.remove_ts(ts_path)if __name__ == '__main__': m3u8Download = M3u8Download('https://cache.m.iqiyi.com/mus/1618469868576801/a34fec3fc63db2c1bb4c15f53cd513e1/afbe8fd3d73448c9/0/20210301/69/b8/670962cfd6b9166c87a21728808fe6a2.m3u8?qd_originate=tmts_py&tvid=2645242154145600&bossStatus=0&qd_vip=0&px=&src=02029022240000000000&prv=&previewType=&previewTime=&from=&qd_time=1614590979725&qd_p=0&qd_asc=636bb14ab52facec684335546d2d60ec&qypid=2645242154145600_04000000001000000000_96&qd_k=4eb685f1966cbd08e6a9648fe0b8c007&isdol=0&code=2&ff=f4v&iswb=1&vf=2198359907d7f173fed0b6eabca18b29&np_tag=nginx_part_tag&pt_sc=d855f47d523c5a4fab67f5b10be3c475&pt=180&pt_tag_tm=1614590979827') m3u8Download.run()console.log("公众号:Java技术迷")
console.log("wx:spiderskill")
到此这篇关于Python解析m3u8拼接下载mp4视频文件的文章就介绍到这了,更多相关Python下载mp4视频文件内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
TBS视频播放TBS视频播放器可以支持市面上几乎所有的视频格式,包括mp4,flv,avi,3gp,webm,ts,ogv,m3u8,asf,wmv,rm,rm
MP4是视频文件格式,它其实是个封装格式,不是编码格式。MP4最初是一种音频格式,和MPEG-4没有太大的关系,就像MP3和MPEG-3没有关系一样。MP3是M
如何使用MP4Joiner快速合并多个mp4视频文件?MP4Joiner是一款专业小巧的MP4视频合并软件,支持将多个MP4视频合并为一个,支持自定义设置视频的
亲,上传视频的条件如下:支持格式:wmv、avi、mpg、mpeg、3gp、mov、mp4、flv、f4v、m2t、mts、rmvb、vob、mkv视频文件大小
电影之类的长视频好像都用m3u8格式了,这就导致了多线程下载视频的意义不是很大,都是短视频,线不线程就没什么意义了嘛。我们知道,m3u8的链接会下载一个文档,相