当前位置: 首页 > news >正文

【Python】 Python脚本实现某平台视频流下载


亲爱的玛丽 我会想念着你
我是多么的讨厌分离
加油站旁的海鸥 机场路上的松柏
挥挥手眼泪就落下来
我多想和那些光阴永远住下来
我不能 我不能
                     🎵 赵雷《玛丽》


在视频内容的分发上,m3u8格式的视频流越来越常见。它将视频切分成多个小片段(TS文件),然后通过索引文件(m3u8文件)来组织播放顺序,有效地支持了视频的流式传输。这篇博客将引导您使用Python脚本来下载m3u8格式的视频流,并将其合并成一个单一的视频文件。

准备工作

在开始之前,请确保你的环境中已安装了Python和requests库。requests库是一个简单易用的HTTP库,用于发送各种HTTP请求。如果还未安装,可以通过以下命令进行安装:

pip install requests

此外,我们还使用了tqdm库来显示下载进度条,使用户体验更友好。若未安装tqdm,可以通过以下命令安装:

pip install tqdm

脚本解析

  1. 设置请求头
    为了模拟浏览器的行为,我们首先设置了请求头headers。这些请求头信息包括User-Agent(用户代理)、Referer(引用页)等,它们有助于我们的请求更像是从正常的浏览器发出,减少被服务器拒绝的可能性。

  2. 解析m3u8文件
    m3u8文件中包含了视频流的所有TS片段的URL。我们首先通过字符串操作提取出所有TS片段的相对路径,并忽略了文件中的注释行(以#EXT开头的行)。

  3. 下载TS片段
    利用requests库遍历并下载每个TS片段。下载过程中,使用tqdm库生成进度条,实时显示下载进度。

  4. 文件合并
    每下载一个TS片段,我们将其内容以追加('ab’模式)的方式写入到目标MP4文件中。由于TS文件是视频流的片段,按顺序合并即可还原完整视频内容。

完整脚本示例

下面是一个完整的脚本示例,展示了如何下载并合并m3u8视频流:

import requests
from tqdm import tqdm
# 设置请求头
headers = {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Connection": "keep-alive",
"Host": "ltscsy.qq.com",
"Origin": "https://v.qq.com",
"Referer": "https://v.qq.com/",
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-site",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"sec-ch-ua": 'Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "macOS",
}
# m3u8文件内容
m3u8_content = """
#EXTM3U
#EXT-X-VERSION:3
...
"""tsList = [i for i in m3u8.split('\n') if not i.startswith('#E') if i ]
# 以数字开头
tsList = [i for i in tsList if i[0].isdigit()]for ets in tqdm(tsList):idxList = []idx = ets.split('_')[0]urlPartten = 'https://ltscsy.qq.com/'urlFull = f"{urlPartten}/{ets}"req = requests.get(url=urlFull, headers=headers)with open(f'/Users/xrx/Desktop/test.MP4', 'ab') as f:f.write(req.content)

请将m3u8_content替换为实际的m3u8文件内容,将/path/to/your/video.mp4替换为你想保存的视频文件路径。

总结

通过上述Python脚本,我们可以轻松地下载m3u8格式的视频流,并将其合并成一个完整的视频文件。这个过程不仅有助于视频内容的离线观看,也为视频内容的分析和处理提供了便利。希望这篇博客能够帮助到有类似需求的读者。

http://www.lryc.cn/news/326306.html

相关文章:

  • LangChain核心模块 Model I/O——Prompts
  • 关于Docker守护程序未运行导致的错误
  • Unity中关于SendMessage方法
  • C++ 修饰符类型
  • 生产计划数据模型,实现能源企业数字化高效管理
  • 【chemistry 2】蛋白质的共价结构
  • 什么是 UI ?设计师为你解答
  • pytest框架入门及环境配置
  • unity 2d范围检测:怪物检测范围
  • 外包干了10天,技术倒退明显
  • 后端常问面经之Java基础
  • I.MX6ULL_Linux_驱动篇(58)linux IIO驱动
  • 两个包装类型变量的比较问题
  • Qt/C++通用跨平台Onvif工具/支持海康大华宇视华为天地伟业等/云台控制/预置位管理/工程调试利器
  • js 在for循环中有setTimeout 时,不执行等待,解决方法
  • 机械硬盘与固态硬盘的区别
  • Springboot总结
  • P8623 [蓝桥杯 2015 省 B] 移动距离 Python
  • 【Python】学习率调整策略详解和示例
  • 【Linux实践室】Linux用户管理实战指南:用户密码管理操作详解
  • UE5学习日记——蓝图节点前缀关键字整理
  • 浅析机器学习的常用方法
  • 大数据开发(日志离线分析项目)
  • PostgreSQL技术大讲堂 - 第48讲:PG高可用实现keepalived
  • 【若依 SpringBoot 前后端分离版】修改加密传输后密码错误的解决方法(附排错过程)
  • 发送请求- header配置
  • C语言重难知识点
  • jMeter学习
  • Nodejs运行vue项目时,报错:Error: error:0308010C:digital envelope routines::unsupported
  • 华为汽车图谱