前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python知识点100篇系列(18)-解析m3u8文件的下载视频

python知识点100篇系列(18)-解析m3u8文件的下载视频

原创
作者头像
JQ实验室
发布于 2024-10-09 01:29:20
发布于 2024-10-09 01:29:20
29200
代码可运行
举报
运行总次数:0
代码可运行
  • 什么是m3u8:m3u8是苹果公司推出的视频播放标准,是m3u8的一种,只是编码格式采用的是UTF-8。

其实m3u8是一种索引文件,m3u8文件中记录了视频的网络地址;

  • 和m3u8配套的一个概念是HLS:

HLS(Http Live Streaming) 是一个由苹果公司提出的基于HTTP的流媒体网络传输协议,直接把流媒体切片成一段段ts文件,通过m3u8索引文件按序访问ts文件,客户端不停的从服务器获取文件,实现播放音视频的功能 HLS 的工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。在开始一个流媒体会话时,客户端会下载一个包含元数据的 (m3u8) playlist文件,用于寻找可用的媒体流。

基于以上的概念,如果要下载相关的ts文件,首先是需要找到m3u8文件;

  • 下载m3u8文件:

m3u8文件一般可以直接在浏览器里找到,打开目标视频播放页面,按F12打开开发者模式

选择NetWork,在过滤框中输入m3u8过滤,皆可以找到m3u8文件;

点击链接,就能看到m3u8文件的内容;

可以看到有多个ts文件相关记录,这个ts是最终要下载的文件信息;

网络上部分m3u8文件中会记录ts文件的全路径地址,直接使用,下载即可; 如果是ts文件的相对路径,需求去浏览器中找到一个请求ts文件的链接,按照模块拼接成全路径即可;

  • 有了m3u8文件,下一步是解析,获取下载地址

使用Python解析m3u8文件伪代码如下:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
def parseM3u8(m3u8_file):
    '''解析m3u8'''
    ts_lines = []
    with open(m3u8_file,'r') as f:
        lines = f.readlines()
        ts_lines = [line.replace('\n','') for line in lines if 'start=' in line]
    return ts_lines;

传入m3u8文件地址,只获取到ts相关的记录信息,存入列表中;

  • 获取到ts文件地址,开始下载文件
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
def downloadTs(lines):
    key = getKey()
    n = 0
    for args in lines:
        n = n + 1
        download_url = f'https://***4cb1544e5285890819192252940/drm/{args}&st=63811ac1&us=neOGEIULKi'
      
        ts_c = requests.get(url=download_url).content
        filename = f'H:/ts/{str(n).zfill(4)}.ts'
        with open(filename,'wb') as f:
            f.write(ts_c)

循环ts文件下载地址列表,下载单个文件,并有规律的命名;以便于后续合并;

  • 如果ts下载的文件无法播放,那可能是需要解密:

首先查看一下m3u8文件中是否有类似下图的文字;其中URI指向的就是加密的key;

如图所示,METHOD=AES-128,代码加密的方式是AES,所以解密也需要使用ASE;

  • 解密需要使用Crypto

安装Crypto:

直接安装Crypto,可能会导致找不到模块,尤其是在python3.8版本上;

所以推荐使用以下命令直接安装:

pip install pycryptodome

安装完成后,编写解密代码:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
def aes_decrypt(data, key, iv):    
    from Crypto.Cipher import AES
    from Crypto.Util.Padding import pad
    new_data = pad(data_to_pad=data, block_size=AES.block_size)    
    aes_d = AES.new(key, AES.MODE_CBC, iv)    
    return aes_d.decrypt(new_data)

如果运行以上代码,提示找不到模块,那需要改个文件夹名称;

**\Lib\site-packages 中找到一个文件夹叫做crypto,将c改成C,即可

  • 解密ts文件; 在上面下载ts文件代码的最后一句后,修改如下: with open(filename,'wb') as f:
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
       		>> f.write(aes_decrypt(ts_c,key,key))
  • 合并ts文件; 由于文件数量多,所以首先需要将ts文件写入到txt文件中; 然后使用ffmpeg命令合并ts文件为mp4文件;

实现的伪代码如下:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
def ts2mp4():
    '''合并ts文件到mp4'''
    import os
    file_list = os.listdir('H:/ts')
    #file_list.sort(key=lambda x: int(x[0:-12])) # 文件名 按数字排序
    with open('ts1.txt','w') as f:
        f.writelines([f'file /ts/{filepath}\n' for filepath in file_list])
        f.close()
    os.system('ffmpeg -f concat -safe 0  -i ts1.txt -c copy ts1.mp4')
总结

以上代码实现了从m3u8文件中获取ts文件,下载并合并为mp4文件的功能

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python爬取网站m3u8视频,将ts解密成mp4,合并成整体视频「建议收藏」
一些网站会提供m3u8视频地址,以供下载观看。或者一些网站经过分析后发现是使用m3u8格式进行播放的,这时使用m3u8的地址链接就可以下载到相应的视频。
全栈程序员站长
2022/09/07
4.8K0
python爬取网站m3u8视频,将ts解密成mp4,合并成整体视频「建议收藏」
m3u8视频文件转换(m3u8文件下载合并的一种方法)
利用UC浏览器App可以很方便地将一些网页视频下载至本地,如果运气好,打开缓存目录就可以看到对应的mp4文件。但大多数时候,你看到的却是m3u8文件加上一个由数字和字母组成的文件夹,如下所示。
全栈程序员站长
2022/07/29
6K0
m3u8视频文件转换(m3u8文件下载合并的一种方法)
python实战:分析网站的m3u8文件下载ts文件并解密
这个文章默认读者已了解m3u8的相关知识,包括如何在浏览器中查找m3u8文件的url和ts文件的下载地址;
JQ实验室
2023/04/06
2.5K0
M3U8-TS文件合并为MP4文件
M3U8文件是一个索引文件,里面包好N个TS的分片文件,组成一个视频文件。目前在直播和点播中应用非常广泛。我们下载一个M3U8视频文件,就是下载了N个TS分片文件,导致我们手机相册中多了很多碎片的小视频文件。如果是羞羞的视频,更加不好意思了。删除都要删除半天,更不用说想把M3U8文件拷贝出来,放到电脑上观看欣赏。 例如给一个M3U8例子:https://tv2.youkutv.cc/2020/04/14/MbqulRmS8sjQGJG9/playlist.m3u8,解析出来的索引文件如下:
马上就说
2020/11/11
4.4K0
M3U8-TS文件合并为MP4文件
高质量的视频播放往往只需要一个m3u8文件 视频流搞起来
在我欣赏了各大视频网站之后,发现人家都是弹的一个个ts文件,而且很大的电影也可以很快加载好,这就很有趣了,经过欣赏了各位大佬发布的帖子以及博客之后,我终于知道怎么搞这个了,接下来我们一起来试试
小王不头秃
2024/06/19
3630
高质量的视频播放往往只需要一个m3u8文件 视频流搞起来
下载 m3u8 视频流
到现在,非常多的视频网站都是利用 m3u8 格式的特性,把一段视频分成多段,进而增加各类软件下载网页上视频的难度。
惶心
2018/06/19
21.2K3
下载 m3u8 视频流
Python下载M3U8加密视频示例[通俗易懂]
最近看到几个视频网站的地址依然是m3u8格式,不禁有了使用python进行下载的想法,虽然下载m3u8格式视频的工具很多,但如果我们自行编码就能应对更多的情况。
全栈程序员站长
2022/07/02
4K0
Python下载M3U8加密视频示例[通俗易懂]
实战模拟│使用多进程教你下载 m3u8 加密或非加密视频「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161227.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/09
2K0
python爬取下载m3u8加密视频,原来这么简单!
爬取视频的时候发现,现在的视频都是经过加密(m3u8),不再是mp4或者avi链接直接在网页显示,都是经过加密形成ts文件分段进行播放。
Python研究者
2021/03/05
8.2K2
python爬取下载m3u8加密视频,原来这么简单!
Python爬虫进阶之爬取某视频并下载的实现
意外的挖掘到了一个资源网站(你懂得),但是网速慢广告多下载不了种种原因让我突然萌生了爬虫的想法。
python学习教程
2020/12/16
2.3K1
Python爬虫进阶之爬取某视频并下载的实现
如何下载优酷 m3u8 格式的视频文件?
mp4 平常最熟悉的视频文件格式就是mp4了,比如这个微博视频就是mp4格式https://weibo.com/tv/v/I6NlI3XNO?fid=1034:4416174394388093 通过
苏生不惑
2019/09/17
9.4K0
如何下载优酷 m3u8 格式的视频文件?
ts 视频下载[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161206.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/09
9110
滥用Jsdelivr之存储视频/m3u8,并使用DPlayer加载
对于博客来说,媒体资源的存取方式至关重要,借助Jsdelivr加速Github上存储的图片已经是公认的方案,但对于视频来说,面对动辄几百兆的视频资源,你几乎无法找到一个免费的“视频床”,在第三方直接防盗链能力日渐完善的当下,急切需要一种折中方案。本文就借鉴前辈的尝试,将视频存放在Github之上并利用Jsdelivr实现加速,并利用DPlayer将其插入到自己的博客中。
ZONGLYN
2020/12/22
3.1K1
滥用Jsdelivr之存储视频/m3u8,并使用DPlayer加载
使用ffmpeg将视频转成HLS(m3u8)格式
  HLS (HTTP Live Streaming)是苹果推出的视频流协议,HLS格式的视频包含一个m3u8文本文件,以及众多的.ts的视频片段,而m3u8文本文件的作用就是将这些ts片段索引起来。 因为HLS协议是将视频切分成很多小的ts片段,这些小片段很适合放到cdn上,有很多视频文章都使用了hls格式传输视频。今天我在这里教大家如何用ffmpeg将mp4格式的视频转为HLS(m3u8)格式。
xindoo
2024/08/07
6300
ts视频下载 准备下载视频的你确定不进来看看吗
之前一直爬取的内容都是完整的文件,例如一整个mp3或则mp4,但是目前很多视频网站都开始采用ts流媒体视频的方式进行视频的展示,不知道你有没有这样的体验,兴致勃勃的打开一个电影网站,准备开始施展爬虫大法 查看xhr请求之后,本以为可以找到一个返回mp4的接口,没想到返回的是这一堆ts文件
小王不头秃
2024/06/19
6820
ts视频下载 准备下载视频的你确定不进来看看吗
m3u8 文件格式简解
上述文字定义来自于维基百科。可以看到,m3u8 文件其实是 HTTP Live Streaming(缩写为 HLS) 协议的部分内容,而 HLS 是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议。
后端码匠
2022/02/14
4.8K0
多线程视频批量下载
前一阵子我的一个好哥们小海知道我转行学了计算机,想要我帮忙下载某个网站的视频(因其只能在线观看,而且播放不够流畅~),本着男人不能说不行的原则,于是便有了本文。
老肥码码码
2020/01/17
1.9K0
多线程视频批量下载
多媒体文件格式剖析:M3U8篇
M3U8,用 UTF-8 编码。"M3U" 和 "M3U8" 文件都是苹果公司使用的 HTTP Live Streaming(HLS) 协议格式的基础;是 Unicode 版本的 M3U。
马上就说
2020/12/11
6.9K0
多媒体文件格式剖析:M3U8篇
在线视频的5种下载办法
最简单的办法,就是利用各种网盘搜索,找到网盘的分享地址,转存到自己的网盘,然后下载。这样就避免了从在线视频网站直接下载,而且常常清晰度比较高。
全栈程序员站长
2022/09/07
4.8K0
如何解析 m3u8 文件?
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
云雀叫了一整天
2019/09/29
5.3K0
相关推荐
python爬取网站m3u8视频,将ts解密成mp4,合并成整体视频「建议收藏」
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档