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视频下载 准备下载视频的你确定不进来看看吗相关推荐

  1. python合并ts视频_python爬取视频网站m3u8视频,下载.ts后缀文件,合并成整视频

    最近发现一些网站,可以解析各大视频网站的vip.仔细想了想,这也算是爬虫呀,爬的是视频数据. 首先选取一个视频网站,我选的是 影视大全 ,然后选择上映不久的电影 "一出好戏" . ...

  2. Python3 根据m3u8下载视频,批量下载ts文件并且合并

    Python3 根据m3u8下载视频,批量下载ts文件并且合并 m3u8是苹果公司推出一种视频播放标准,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少 ...

  3. 【Python网络爬虫实战篇】使用selenium+requests爬取下载高清源视频:关于爬取m3u8文件链接解析为ts视频合并成mp4视频的分析实战

    这两天博主在摸鱼时,偶然间接触到了流媒体的概念,一时间来了兴致.再加上之前博主有着七.八年的视频制作经验,深知视频素材获取的不易.因此,打算利用自己所学的python网络爬虫的知识,通过编写代码实现获 ...

  4. java io 视频 下载_Java下载映客主播视频回放到电脑硬盘

    Java下载映客主播视频回放到电脑硬盘 使用Java下载映客回放到电脑硬盘 使用方法:在映客app播放回放视频时,分享到QQ,就可以得到url,其中的liveid属性就是视频ID. 源代码由 [**海 ...

  5. python下载大文件mp4_Python 下载 m3u8 格式视频

    Python requests 下载 m3u8 格式 视频 最近爬取一个视频网站,遇到 m3u8 格式的视频需要下载. 抓包分析,视频文件是多个 ts 文件,什么是 ts文件,请去百度吧: 附图:抓包 ...

  6. 下载m3u8加密视频的一些经验和小细节

    这里有一个神器,使用非常方便,不用看下边的了 链接 一.下载ts分片 1.桌面上建立一个文件夹 2.下载index.m3u8,查看多少个ts分片 3.idm下载ts分片到该文件夹 4.复制刚才的ind ...

  7. python实战笔记之(8):下载知乎视频

    这篇想写很久了,今天专门搞了搞,现在把用python下载知乎视频的整个流程码下来. (1)目标站点分析 比如这篇知乎文章https://www.zhihu.com/question/279247693 ...

  8. python3自动下载优酷视频小程序

    我们一般都在优酷里看一些好玩的视频,有时候看到精彩的就想下载到本地保存起来留作纪念,在win下可以用维棠等软件下载,但苦了用linux的孩子们.尽管chrome和firefox的一些插件可以下载,但有 ...

  9. 下载优酷视频 基于python2

    参考于 http://blog.csdn.net/littlethunder/article/details/18230859 下载优酷视频 基于python2 import re import ur ...

  10. 如何获得凤凰网或腾讯视频链接并下载到本地

    2020年3月18日更新   本次更新内容为如何下载凤凰网视频.以该视频链接为例进行说明,转到该链接,并打开浏览器调试窗口,切换标签到Network,可以看到该视频是分段加载的: 这里根据每段视频的请 ...

最新文章

  1. ORM读取web.config中的数据库连接字符串
  2. 能pingt通外部的Ip和dns,但上不了网络
  3. Cypress 的条件测试
  4. python preference界面设置_Python preferences
  5. 嵌套饼图_旭日图的效率,高到饼图都羡慕
  6. 给与用户建立dblink的权限_网络安全 之 NTFS安全权限
  7. ROS笔记(12) Rviz
  8. Centos7+ 修改hostname主机名命令
  9. Ubuntu 16.04 安装 CUDA10.1 (解决循环登陆的问题)
  10. iOS xcode4 编译环境
  11. .net中哈希表的使用 Hashtable
  12. can例程 ecu_汽车CAN数据分析ECU通信OBD接口
  13. HTTP POST 参数格式
  14. perl应用:SNP的提取(2):从对比序列中找到SNP位点并输出 a.pl
  15. 小知识·typec耳机原理
  16. Icon图标制作(转化)工具
  17. GPIO的八种工作模式
  18. CPU频率是什么?主频、睿频和超频哪个更重要?
  19. 《Cross-Modality Person Re-Identification with Generative Adversarial Training》论文阅读
  20. Linux 查看文件和文件夹大小,隐藏文件的大小方法总结

热门文章

  1. kali linux mysql密码,Kali Linux中MySQL重置root密码
  2. ETL转换工具 kettle——spoon 安装 使用
  3. 微信小程序自定义icon
  4. matlab振荡环节相频特性,自动控制原理第五章频率特性)汇总.ppt
  5. 板绘新手sai入门基础教程,非常详细全面!
  6. Centos操作系统基本介绍
  7. 容智RPA可以在医疗哪些业务上降本增效
  8. k2p华硕系统怎么设置_双频路由器怎么设置网速快(k2p刷华硕怎么设置网速好)
  9. 同济版高数(下)复习提纲
  10. python wget_python wget下载文件处理的一些问题