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

简介: 【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
  • 什么是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文件伪代码如下:

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文件地址,开始下载文件

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

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


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:

    f.write(aes_decrypt(ts_c,key,key))

  • 合并ts文件;
    由于文件数量多,所以首先需要将ts文件写入到txt文件中;
    然后使用ffmpeg命令合并ts文件为mp4文件;

实现的伪代码如下:

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文件的功能

相关文章
|
6月前
|
Web App开发 安全 数据安全/隐私保护
利用Python+Requests实现抖音无水印视频下载
利用Python+Requests实现抖音无水印视频下载
|
11月前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
417 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
10月前
|
数据采集 JSON API
深入解析:使用 Python 爬虫获取淘宝店铺所有商品接口
本文介绍如何使用Python结合淘宝开放平台API获取指定店铺所有商品数据。首先需注册淘宝开放平台账号、创建应用并获取API密钥,申请接口权限。接着,通过构建请求、生成签名、调用接口(如`taobao.items.search`和`taobao.item.get`)及处理响应,实现数据抓取。代码示例展示了分页处理和错误处理方法,并强调了调用频率限制、数据安全等注意事项。此技能对开发者和数据分析师极具价值。
|
4月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
11月前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
|
11月前
|
存储 Linux iOS开发
Python入门:2.注释与变量的全面解析
在学习Python编程的过程中,注释和变量是必须掌握的两个基础概念。注释帮助我们理解代码的意图,而变量则是用于存储和操作数据的核心工具。熟练掌握这两者,不仅能提高代码的可读性和维护性,还能为后续学习复杂编程概念打下坚实的基础。
Python入门:2.注释与变量的全面解析
|
10月前
|
机器学习/深度学习 数据采集 数据可视化
Python/Anaconda双方案加持!Jupyter Notebook全平台下载教程来袭
Jupyter Notebook 是一款交互式编程与数据科学分析工具,支持40多种编程语言,广泛应用于机器学习、数据清洗和学术研究。其核心优势包括实时执行代码片段、支持Markdown文档与LaTeX公式混排,并可导出HTML/PDF/幻灯片等格式。本文详细介绍了Jupyter Notebook的软件定位、特性、安装方案(Anaconda集成环境与原生Python+PIP安装)、首次运行配置及常见问题解决方案,帮助用户快速上手并高效使用该工具。
|
10月前
|
机器学习/深度学习 数据采集 自然语言处理
基于Python的情感分析与情绪识别技术深度解析
本文探讨了基于Python的情感分析与情绪识别技术,涵盖基础概念、实现方法及工业应用。文中区分了情感分析与情绪识别的核心差异,阐述了从词典法到深度学习的技术演进,并通过具体代码展示了Transformers架构在细粒度情感分析中的应用,以及多模态情绪识别框架的设计。此外,还介绍了电商评论分析系统的构建与优化策略,包括领域自适应训练和集成学习等方法。未来,随着深度学习和多模态数据的发展,该技术将更加智能与精准。
697 1
|
10月前
|
数据采集 存储 数据库连接
Requests与BeautifulSoup:高效解析网页并下载资源
Requests与BeautifulSoup:高效解析网页并下载资源
|
11月前
|
存储 人工智能 程序员
通义灵码AI程序员实战:从零构建Python记账本应用的开发全解析
本文通过开发Python记账本应用的真实案例,展示通义灵码AI程序员2.0的代码生成能力。从需求分析到功能实现、界面升级及测试覆盖,AI程序员展现了需求转化、技术选型、测试驱动和代码可维护性等核心价值。文中详细解析了如何使用Python标准库和tkinter库实现命令行及图形化界面,并生成单元测试用例,确保应用的稳定性和可维护性。尽管AI工具显著提升开发效率,但用户仍需具备编程基础以进行调试和优化。
716 9

推荐镜像

更多
  • DNS