python下载合并m3u8文件

使用浏览器开发者工具获取index.m3u8文件,直接复制访问路径进行请求即可下载相应的m3u8文件,文件里是ts视频的路径,一般长这样:

 每一个.ts路径都是一段流视频访问地址,拼接主域名可以直接下载到相应的视频片段

执行步骤:

1、下载好.m3u8文件

2、使用代码将.m3u8文件内容进行下载、合并成mp4文件

下载代码如下:

# 将m3u8地址文件下载、合成为mp4文件

import requests
import re
import os

def download_ts(path: str, headers: dict, main_url: str, dir_ts: str):
    """
    :param dir_ts: 用于保存ts视频文件
    :param path: .m3u8文件路径
    :param headers: 配置的浏览器请求头
    :param main_url: 域名主地址
    :return: 返回ts文件下载的文件夹
    """
    # 在当前路径下创建一个与m3u8文件同名的文件夹用来保存所下载的.ts文件
    if not os.path.exists(dir_ts):
        os.mkdir(dir_ts)

    # 提取m3u8文件中的ts文件请求地址
    with open(path, mode="r") as file:
        all_url = file.read()
        all_url = re.findall(r"(.*?)ts", all_url)

        num = 1
        for url in all_url:
            url = main_url + url + "ts"    # 拼接成完整的请求路径
            response = requests.get(url=url, headers=headers)
            with open(f"./{dir_ts}/{num}.ts", "wb") as file1:    # 请求后直接将ts视频写入到文件中,文件命名为自增数字.ts,方便后续拼接
                file1.write(response.content)
            num += 1

    return dir_ts

def to_mp4(file_path):
    """
    :param file_path: ts文件所在的文件夹路径
    """
    ts_all = sorted(os.listdir(f"./{file_path}"), key=lambda x: int(x.replace(".ts", "")))  # 列出文件夹内所有的ts文件并排序
    print(ts_all)
    with open(f"./{file_path}/{file_path}.mp4", "wb+") as mpf:  # 以追加形式创建mp4文件
        for ts in ts_all:
            with open(f"./{file_path}/{ts}", "rb") as tsb:  # 循环遍历读取ts文件并写入mp4文件(合并ts到mp4中)
                mpf.write(tsb.read())
    # os.system(f"rm ./{dir_ts}/*.ts")  # 删除冗余的ts视频文件


if __name__ == "__main__":
    main_url = "主域名,m3u8文件中一般只有相关的路径参数,没有主域名"
    headers = {"配置相关的": "浏览器请求头"}
    path = ".m3u8文件路径"
    dir_ts = "保存ts文件的路径"
    to_mp4(file_path=download_ts(path=path, headers=headers, main_url=main_url, dir_ts=dir_ts))

代码只是将视频片段进行简单拼接

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值