【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格式的视频流,并将其合并成一个完整的视频文件。这个过程不仅有助于视频内容的离线观看,也为视频内容的分析和处理提供了便利。希望这篇博客能够帮助到有类似需求的读者。

相关推荐

  1. 【Python】 Python脚本实现平台视频流下

    2024-03-26 04:34:02       22 阅读
  2. 【linux自动化实践】linux shell 脚本 替换文本

    2024-03-26 04:34:02       10 阅读
  3. 带资源实战一篇:音日常养号脚本实现教程

    2024-03-26 04:34:02       18 阅读
  4. Linux平台下基于OpenGL实现YUV视频渲染

    2024-03-26 04:34:02       35 阅读

最近更新

  1. C++:cv.absdiff函数含义

    2024-03-26 04:34:02       0 阅读
  2. 自动回复机器人:源码搭建与智能化客户服务

    2024-03-26 04:34:02       0 阅读
  3. 社群管理新助手:导航群机器人的智能化功能

    2024-03-26 04:34:02       0 阅读
  4. STAR 命令参数解释

    2024-03-26 04:34:02       0 阅读
  5. hid-ft260驱动学习笔记 4 - ft260_uart_ops

    2024-03-26 04:34:02       0 阅读
  6. Git详解

    Git详解

    2024-03-26 04:34:02      0 阅读
  7. Android12上实现双以太网卡共存同时访问外网

    2024-03-26 04:34:02       1 阅读

热门阅读

  1. Redis 缓存穿透是什么?如何缓解缓存穿透?

    2024-03-26 04:34:02       17 阅读
  2. C#手动改变自制窗体的大小

    2024-03-26 04:34:02       17 阅读
  3. 【课程】MyBatisPlus视频教程

    2024-03-26 04:34:02       23 阅读
  4. c语音函数大全(S开头)

    2024-03-26 04:34:02       22 阅读
  5. ARM IHI0069F GIC architecture specification (3)

    2024-03-26 04:34:02       22 阅读
  6. Microsoft Visio 快捷键 (keyboard shortcut - hotkey)

    2024-03-26 04:34:02       19 阅读
  7. SQLserver提权

    2024-03-26 04:34:02       19 阅读
  8. 绘制虚线圆角矩形的Flutter小部件

    2024-03-26 04:34:02       20 阅读