ts视频下载 准备下载视频的你确定不进来看看吗
ts视频下载
- 前言
- 开发工具
- 解决思路
- 代码实现
- 解析m3u8文件,获取ts下载列表
- 多线程下载ts文件,以及ts文件顺序的存储
- 总代码
- ts文件顺序存储到本地文件中
- 多线程下载ts文件
- ts文件合成mp4
- 成果
- ts文件
- mp4文件
- 总结
前言
之前一直爬取的内容都是完整的文件,例如一整个mp3或则mp4,但是目前很多视频网站都开始采用ts流媒体视频的方式进行视频的展示,不知道你有没有这样的体验,兴致勃勃的打开一个电影网站,准备开始施展爬虫大法
查看xhr请求之后,本以为可以找到一个返回mp4的接口,没想到返回的是这一堆ts文件
今天我们就来聊一聊怎么下载这些ts文件并将他们拼接为一个mp4
开发工具
ffmpeg,pycharm
解决思路
首先打开谷歌浏览器,F12,查看xhr请求,这一步相信兄弟们已经轻车熟路了。如下图
有两个诡异的m3u8,木错,这就是今天我们的突破口,一般第一个m3u8中存储的都是第二个m3u8文件的url,第二个m3u8文件则是存储的ts文件的urll。因为我们这次主要是讲怎么下载ts文件,所以直接用解析第二个m3u8文件,即可。
双击这个请求,就可以查看详情,其中Request URL就是调用的接口或则远程文件,直接调用则会下载该m3u8文件,然后解析一下,拿到ts的url列表就可以进行下载了。
先看一下这个m3u8文件的内容
很明显文件中存储的不是ts文件的完整地址,需要我们根据实际情况进行拼接就可以,查看的方式就是点击ts文件xhr请求进行查看如下图,很明显,红框圈中的就是我们要拼接在文件名之前的。这就拿到了真实的ts文件地址。
那么开整代码吧
代码实现
解析m3u8文件,获取ts下载列表
要使用到m3u8这个库来解析m3u8文件
import m3u8
tss = []
order = []#realurl就是存储ts文件地址的m3u8文件的url ,这样返回的数据是json格式的,方便读取数据
data = m3u8.load(realurl).data# appendurl就是要拼接在前面的那个地址 这样存入tss的ts文件地址都是真实地址
# order的作用是在将多个ts文件合成一个mp4时,由这个order提供各ts文件拼接的顺序
for i in data["segments"]:tss.append(appendurl + "/" + i["uri"])order.append(i["uri"])
到现在为止,ts文件拼接的顺序以及ts文件的真实地址就全部拿到了
多线程下载ts文件,以及ts文件顺序的存储
有一说一,这些ts文件不仅多,而且小,如果我们只是一个线程下载文件,未免太浪费时间了,而且效率太低了,这次我们采用多线程的方式进行大量ts文件的下载
总代码
def download(url, name):#记录创立的线程task_list = []# 获取ts的真实地址和顺序tss, order = getTss(url)# 这里将ts文件顺序存储在m3u8,至于为啥这么做,因为ts文件数量太多了file = open("E://file//order.m3u8", 'w')# 这里将下载ts文件的本地路径输入到order.m3u8之中for i in order:file.write(f"file 'E:\\file\\ts\\" + i + "'");file.write("\n")#线程池的创立 pool = ThreadPoolExecutor(max_workers=50)for i in range(0, len(order)):# 启动多个线程下载文件task_list.append(pool.submit(FileDownload.downloadFile, 'E://file//ts//' + order[i], tss[i]))# 判断所有下载线程是否全部结束while (True):if len(task_list) == 0:breakfor i in task_list:if i.done():task_list.remove(i)# 进行多个ts文件的合并VideoUtil.mixTss(name)# 合并结束之后把ts文件都删了,不然太占空间了for u in order:turl = f"E:\\file\\ts\\" + uos.remove(turl)
ts文件顺序存储到本地文件中
主要代码
# 这里将下载ts文件的本地路径输入到order.m3u8之中for i in order:file.write(f"file 'E:\\file\\ts\\" + i + "'");file.write("\n")
最终文件中存储的内容
最好按照这种格式存入,之前在网上找的其他格式都会报错,但这个是ok的
多线程下载ts文件
yysy,多线程真的强,尤其是下载这些小文件,多线程真的是绝了
本文采用线程池的方式,为什么采用线程池呢,因为线程池可以帮我们保留一段时间空闲线程,可以减少线程创建和销毁所耗费的时间,大大提高多线程的效率,同时可以帮助我们限制线程的数量
主要代码
#线程池的创立 pool = ThreadPoolExecutor(max_workers=50)for i in range(0, len(order)):# 启动多个线程下载文件task_list.append(pool.submit(FileDownload.downloadFile, 'E://file//ts//' + order[i], tss[i]))# 判断所有下载线程是否全部结束while (True):if len(task_list) == 0:breakfor i in task_list:if i.done():task_list.remove(i)
ts文件合成mp4
主要思路就是利用刚刚生成的那个ts顺序文件(order.m3u8),按照文件中的顺序进行ts文件的拼接。
这里拼接ts文件时还是要使用ffmpeg,没有的兄弟们可以看下这个安装一下
ffmpeg安装教程
主要代码
def mixTss(name):com = r'D:\\tool\\ffmpeg\\bin\\ffmpeg.exe -f concat -safe 0 -i E:\\file\\order.m3u8 -c copy E:\\file\\video2\\{}.mp4'.format(name)os.system(com)
这里解释一下
D:\tool\ffmpeg\bin\ffmpeg.exe : 本地ffmpeg的位置,设置了环境变量直接ffmpeg即可
E:\file\order.m3u8:刚刚生成的存储ts文件的顺序的文件路径
E:\file\video2\{}.mp4:视频最终合成之后存放的位置
至此,ts视频的下载以及合成一个mp4就实现了
成果
ts文件
这是下载过程中截的图,有一说一,看着这些文件爆炸式增加,还挺爽
mp4文件
具体就不给你们康了,你们猜猜是啥
总结
总之没有想象的这么难,做之前以为很复杂,其实还好,最后欢迎各位大佬指点。
ts视频下载 准备下载视频的你确定不进来看看吗相关推荐
- python合并ts视频_python爬取视频网站m3u8视频,下载.ts后缀文件,合并成整视频
最近发现一些网站,可以解析各大视频网站的vip.仔细想了想,这也算是爬虫呀,爬的是视频数据. 首先选取一个视频网站,我选的是 影视大全 ,然后选择上映不久的电影 "一出好戏" . ...
- Python3 根据m3u8下载视频,批量下载ts文件并且合并
Python3 根据m3u8下载视频,批量下载ts文件并且合并 m3u8是苹果公司推出一种视频播放标准,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少 ...
- 【Python网络爬虫实战篇】使用selenium+requests爬取下载高清源视频:关于爬取m3u8文件链接解析为ts视频合并成mp4视频的分析实战
这两天博主在摸鱼时,偶然间接触到了流媒体的概念,一时间来了兴致.再加上之前博主有着七.八年的视频制作经验,深知视频素材获取的不易.因此,打算利用自己所学的python网络爬虫的知识,通过编写代码实现获 ...
- java io 视频 下载_Java下载映客主播视频回放到电脑硬盘
Java下载映客主播视频回放到电脑硬盘 使用Java下载映客回放到电脑硬盘 使用方法:在映客app播放回放视频时,分享到QQ,就可以得到url,其中的liveid属性就是视频ID. 源代码由 [**海 ...
- python下载大文件mp4_Python 下载 m3u8 格式视频
Python requests 下载 m3u8 格式 视频 最近爬取一个视频网站,遇到 m3u8 格式的视频需要下载. 抓包分析,视频文件是多个 ts 文件,什么是 ts文件,请去百度吧: 附图:抓包 ...
- 下载m3u8加密视频的一些经验和小细节
这里有一个神器,使用非常方便,不用看下边的了 链接 一.下载ts分片 1.桌面上建立一个文件夹 2.下载index.m3u8,查看多少个ts分片 3.idm下载ts分片到该文件夹 4.复制刚才的ind ...
- python实战笔记之(8):下载知乎视频
这篇想写很久了,今天专门搞了搞,现在把用python下载知乎视频的整个流程码下来. (1)目标站点分析 比如这篇知乎文章https://www.zhihu.com/question/279247693 ...
- python3自动下载优酷视频小程序
我们一般都在优酷里看一些好玩的视频,有时候看到精彩的就想下载到本地保存起来留作纪念,在win下可以用维棠等软件下载,但苦了用linux的孩子们.尽管chrome和firefox的一些插件可以下载,但有 ...
- 下载优酷视频 基于python2
参考于 http://blog.csdn.net/littlethunder/article/details/18230859 下载优酷视频 基于python2 import re import ur ...
- 如何获得凤凰网或腾讯视频链接并下载到本地
2020年3月18日更新 本次更新内容为如何下载凤凰网视频.以该视频链接为例进行说明,转到该链接,并打开浏览器调试窗口,切换标签到Network,可以看到该视频是分段加载的: 这里根据每段视频的请 ...
最新文章
- ORM读取web.config中的数据库连接字符串
- 能pingt通外部的Ip和dns,但上不了网络
- Cypress 的条件测试
- python preference界面设置_Python preferences
- 嵌套饼图_旭日图的效率,高到饼图都羡慕
- 给与用户建立dblink的权限_网络安全 之 NTFS安全权限
- ROS笔记(12) Rviz
- Centos7+ 修改hostname主机名命令
- Ubuntu 16.04 安装 CUDA10.1 (解决循环登陆的问题)
- iOS xcode4 编译环境
- .net中哈希表的使用 Hashtable
- can例程 ecu_汽车CAN数据分析ECU通信OBD接口
- HTTP POST 参数格式
- perl应用:SNP的提取(2):从对比序列中找到SNP位点并输出 a.pl
- 小知识·typec耳机原理
- Icon图标制作(转化)工具
- GPIO的八种工作模式
- CPU频率是什么?主频、睿频和超频哪个更重要?
- 《Cross-Modality Person Re-Identification with Generative Adversarial Training》论文阅读
- Linux 查看文件和文件夹大小,隐藏文件的大小方法总结
热门文章
- kali linux mysql密码,Kali Linux中MySQL重置root密码
- ETL转换工具 kettle——spoon 安装 使用
- 微信小程序自定义icon
- matlab振荡环节相频特性,自动控制原理第五章频率特性)汇总.ppt
- 板绘新手sai入门基础教程,非常详细全面!
- Centos操作系统基本介绍
- 容智RPA可以在医疗哪些业务上降本增效
- k2p华硕系统怎么设置_双频路由器怎么设置网速快(k2p刷华硕怎么设置网速好)
- 同济版高数(下)复习提纲
- python wget_python wget下载文件处理的一些问题