python实战:分析网站的m3u8文件下载ts文件并解密

简介: python实战:分析网站的m3u8文件下载ts文件并解密

前言

这个文章默认读者已了解m3u8的相关知识,包括如何在浏览器中查找m3u8文件的url和ts文件的下载地址;

代码实战

使用到的模块有:

os,requests, re,Crypto

主要模块Crypto在安装时执行命令如下:

pip install pycryptodome

实现逻辑:

  • 在浏览器里找到m3u8文件的额url
  • 解析m3u8文件,获取ts下载地址和解密所需的key

    在m3u8文件中,key所在的行一般以EXT-X-KEY标识,记录加密方法METHOD和key,iv等信息;IV值一般不需要;
  • 获取的ts是多个,需要单个下载,并解密

    根据获取的ts下载地址直接下载下来的文件,如果无法播放,那基本上就是加密了;需要通过获取的key来解密;
  • 下载的文件命名需要有规律,方便后续合成的需求;

实现代码如下:


'''
目标网站: 
根据m3u8文件下载ts并解密

'''

import os,requests,re
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad

dest_folder = 'F:\kecom'

def d_ts_decrypt(key_url,ts_urls,folder='1'):
    '''
    下载ts并解密存储
    '''
    #先创建文件夹
    ts_dir = os.path.join(dest_folder,folder)
    if not os.path.exists(ts_dir):
        os.makedirs(ts_dir)

    key = requests.get(key_url).content   # 请求 key
    cryptor = AES.new(key, AES.MODE_CBC)    # 创建一个解密器
    start = 0
    for ts_url in ts_urls:
        start = start + 1
        print(ts_url)
        content = requests.get(ts_url).content #获取ts
        decrypt_content = cryptor.decrypt(content) #解密
        # 写入文件
        ts_file = os.path.join(ts_dir,str(start).zfill(4) + '.ts')
        with open(ts_file,'ab') as f:
            f.write(decrypt_content) 



#处理m3u8文件地址,解析出key和ts_url
def deal(m3u8_file_url,index='0'):
    
    mf_text = requests.get(m3u8_file_url).text
    #print(mf_text)
    ts = mf_text.split("\n")
    for l in ts:
        if 'URI' in l:
            keyUrl = re.findall(r'URI=".*?"',l)[0]
            break
    
    origin_url = m3u8_file_url[0:m3u8_file_url.index('voddrm')]
    #获取完整的url
    keyUrl = keyUrl.replace('URI=','').replace('"','')
    #print(keyUrl)
    ts_lines = [origin_url + line.replace('\n','')   for line in ts if 'start=' in line]
    #print(len(ts_lines),ts_lines[0])
    d_ts_decrypt(key_url=keyUrl,ts_urls=ts_lines,folder = index)
    #return keyUrl,ts_lines

m3u8_files = [
J2h0dHBzOi8vMTI1ODcxMjE2Ny52b2QyLm15cWNsb3VkLmNvbS8yNTEyMWE2YXZvZHRyYW5zYmoxMjU4NzEyMTY3L2U4ZWE1MDA5Mzg3NzAyMzA2NDkzMTIwMDY3L2RybS92b2Rkcm0udG9rZW4uZFdsdVBURTBOREV4TlRNM09UTXpNRFl4TlRjM09UdGxlSFE5TWpGaVpHRTRZamhsWlRSaU9EazNaalE0TnpOaU5XRmpZbVUwTldNd01qTXpaV1UyTlRJNVpqa3dObUl5T1dZelpUTTNaakUxTkRnMlltVTJNRFF6TVRKalptRTBOemxpT1RVM09UazBORFV4WldWaU0yUTJPV1UzTVRneVlqWXlOR0l3Wm1Sa05XWTVaR1k1WkdVeU0yWmpaVGhoTlRBeFpHVTJNbUZrTXpSalpqRTFNVEJrTWpFellqRTJNMlpoTzNWcFpGOTBlWEJsUFRJN2RXbGtYMjl5YVdkcGJsOTFhV1JmZEhsd1pUMHlPM1ZwWkY5dmNtbG5hVzVmWVhWMGFGOTBlWEJsUFRJN2RXbGtYMkZ3Y0dsa1BURTBNREF3TURBd01EZzdZMmxrUFRVNE9USTJPRGs3ZEdWeWJWOXBaRDB4TURZeE1EazVOekU3ZG05a1gzUjVjR1U5TUR0d2JHRjBabTl5YlQwei52LmYzMDc0Mi5tM3U4P2V4cGVyPTAmc2lnbj00MjA1NGZmMTk5MzliYzE1ZDEzNTY2NDYyZDg2MzNmMiZ0PTY0MkJDQjdEJnVzPTYxNTE3Mzg0OTMyNjIyNjI0MDEnLA
]

i = 0
for mf in m3u8_files:
    ''''''
    i = i + 1
    deal(mf,str(i))
    #break

上面代码下载的文件,应该可以播放了;但是文件很碎,如果需要合成,建议使用ffmpeg命令;

首先需要将所有文件索引放到一个文件中;
通过以下批处理命令实现:

(for %i in ( *.ts ) do @echo file '%i') > list.txt

通过FFMPEG的合并视频的命令生成一个完整的视频;

ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
相关文章
|
3天前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
40 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
28天前
|
缓存 Rust 算法
从混沌到秩序:Python的依赖管理工具分析
Python 的依赖管理工具一直没有标准化,主要原因包括历史发展的随意性、社区的分散性、多样化的使用场景、向后兼容性的挑战、缺乏统一治理以及生态系统的快速变化。依赖管理工具用于处理项目中的依赖关系,确保不同环境下的依赖项一致性,避免软件故障和兼容性问题。常用的 Python 依赖管理工具如 pip、venv、pip-tools、Pipenv、Poetry 等各有优缺点,选择时需根据项目需求权衡。新工具如 uv 和 Pixi 在性能和功能上有所改进,值得考虑。
85 35
|
29天前
|
数据采集 数据可视化 数据挖掘
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
本文探讨了金融资产波动率建模中的三种主流方法:GARCH、GJR-GARCH和HAR模型,基于SPY的实际交易数据进行实证分析。GARCH模型捕捉波动率聚类特征,GJR-GARCH引入杠杆效应,HAR整合多时间尺度波动率信息。通过Python实现模型估计与性能比较,展示了各模型在风险管理、衍生品定价等领域的应用优势。
260 66
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
|
1月前
|
测试技术 数据库 Python
Python装饰器实战:打造高效性能计时工具
在数据分析中,处理大规模数据时,分析代码性能至关重要。本文介绍如何使用Python装饰器实现性能计时工具,在不改变现有代码的基础上,方便快速地测试函数执行时间。该方法具有侵入性小、复用性强、灵活度高等优点,有助于快速发现性能瓶颈并优化代码。通过设置循环次数参数,可以更准确地评估函数的平均执行时间,提升开发效率。
106 61
Python装饰器实战:打造高效性能计时工具
|
19天前
|
并行计算 安全 Java
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
在Python开发中,GIL(全局解释器锁)一直备受关注。本文基于CPython解释器,探讨GIL的技术本质及其对程序性能的影响。GIL确保同一时刻只有一个线程执行代码,以保护内存管理的安全性,但也限制了多线程并行计算的效率。文章分析了GIL的必要性、局限性,并介绍了多进程、异步编程等替代方案。尽管Python 3.13计划移除GIL,但该特性至少要到2028年才会默认禁用,因此理解GIL仍至关重要。
101 16
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
|
7天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
1月前
|
机器学习/深度学习 运维 数据可视化
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
76 16
Python时间序列分析:使用TSFresh进行自动化特征提取
|
5天前
|
存储 数据采集 数据库
Python爬虫实战:股票分时数据抓取与存储
Python爬虫实战:股票分时数据抓取与存储
|
29天前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
56 20
|
1月前
|
数据采集 缓存 API
python爬取Boss直聘,分析北京招聘市场
本文介绍了如何使用Python爬虫技术从Boss直聘平台上获取深圳地区的招聘数据,并进行数据分析,以帮助求职者更好地了解市场动态和职位需求。

热门文章

最新文章