python将下载到本地m3u8视频合成MP4的代码详解

这里提供一份详细的python合成m3u8视频为MP4的攻略,包含以下步骤:

步骤一:下载m3u8文件及其对应的视频流

首先,需要使用requests库下载m3u8文件及其对应的多个TS文件。这里可以使用以下代码:

import requests

m3u8_url = "http://example.com/example.m3u8" # 输入m3u8的URL
res = requests.get(m3u8_url) # 获取m3u8文件内容
m3u8_text = res.text # 将m3u8文件内容转成字符串格式

# 解析m3u8文件内容,获取每个TS文件的URL
ts_urls = []
for line in m3u8_text.split('\n'):
    if line and not line.startswith("#"):
        ts_url = line.strip()
        if not ts_url.startswith("http"):
            ts_url = m3u8_url.rsplit('/', 1)[0] + '/' + ts_url
        ts_urls.append(ts_url)

# 下载每个TS文件
for i, ts_url in enumerate(ts_urls):
    res = requests.get(ts_url)
    with open(f"{i+1}.ts", "wb") as f:
      f.write(res.content)

这段代码首先使用requests库获取m3u8文件的文本内容,然后进行解析,获取每个TS文件的URL。最后,通过循环遍历每个TS文件的URL,使用requests库下载TS文件。

步骤二:将多个TS文件合成一个文件

下载完所有的TS文件后,需要将这些小文件合并成一个大文件。这里可以使用ffmpeg库实现。

import os
import subprocess

# 拼接所有TS文件
cmd = ' '.join(f"file '{i}.ts'" for i in range(1, len(ts_urls) + 1))
with open("input.txt", "w") as f:
    f.write(cmd)

output_filename = "output.mp4"

# 使用ffmpeg命令将所有TS文件合并
subprocess.call(f"ffmpeg -f concat -safe 0 -i input.txt -c copy {output_filename}.mp4", shell=True)

# 删除临时文件
for i in range(1, len(ts_urls) + 1):
    os.remove(f"{i}.ts")
os.remove("input.txt")

这段代码通过将多个TS文件的路径写入一个文本文件(input.txt),再使用ffmpeg的concat命令将这些TS文件拼接成一个大文件。拼接完成后,删除临时生成的TS文件和文本文件input.txt。

示例一:下载优酷视频

以优酷为例,假设现在需要下载链接为https://v.youku.com/v_show/id_XMzI3MTgxMDY2NA==.html 的视频。

在该视频页面中,可以找到其对应的m3u8文件链接,为https://c-h5.ykimg.com/201206/0ee28b048e866cb2e035afcd9167de07/playlist.m3u8。因此,只需要将此链接传入步骤一的代码中即可开始下载。

示例二:下载TS文件加密视频

一些视频网站为了保护版权,会对m3u8文件中的TS文件进行加密。这时候需要在requests.get()时添加其余的headers,来正确获取m3u8文件及其对应的TS文件。

以爱奇艺为例,假设现在需要下载链接为https://www.iqiyi.com/v_19rwlevw98.html 的视频。

在该视频页面中,可以找到其对应的m3u8文件链接,为https://pcvideoyd.iqiyi.com/dash?pr=242000&xt=urn%3Aci%3Ax-2fa57b95f7874a1392dfec85d4cd10aa&ot=0&vid=5dd7e409f052b78a5cf11e9002e26f7b&dtype=85&rate=0&drv=Mp4_1080p&tag=pcweb&ff=2002&src=01010031010000000000&sb=0_c8c1f003-e5cf-49cb-9211-61fa17c1414c&uid=3e8f1614-b0b1-4237-b691-bc12e64af3b1_t_1633594276450&ver=1&tvid=14185241900&ps=0&k_uid=3e8f1614-b0b1-4237-b691-bc12e64af3b1_t_1633594276450&k_tag=1&k_ver=1&header=1&ost=0&ppt=default&t={timestamp}。

由于该m3u8文件被加密了,因此需要在requests.get()时添加headers信息,以正确访问。

import requests

url = "https://pcvideoyd.iqiyi.com/dash?pr=242000&xt=urn%3Aci%3Ax-2fa57b95f7874a1392dfec85d4cd10aa&ot=0&vid=5dd7e409f052b78a5cf11e9002e26f7b&dtype=85&rate=0&drv=Mp4_1080p&tag=pcweb&ff=2002&src=01010031010000000000&sb=0_c8c1f003-e5cf-49cb-9211-61fa17c1414c&uid=3e8f1614-b0b1-4237-b691-bc12e64af3b1_t_1633594276450&ver=1&tvid=14185241900&ps=0&k_uid=3e8f1614-b0b1-4237-b691-bc12e64af3b1_t_1633594276450&k_tag=1&k_ver=1&header=1&ost=0&ppt=default&t={timestamp}"
headers = {'Referer': 'https://www.iqiyi.com/', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'}

res = requests.get(url, headers=headers)

m3u8_text = res.text # 将m3u8文件内容转成字符串格式

# 解析m3u8文件内容,获取每个TS文件的URL
ts_urls = []
for line in m3u8_text.split('\n'):
    if line and not line.startswith("#"):
        ts_url = line.strip()
        if not ts_url.startswith("http"):
            ts_url = url.rsplit('/', 1)[0] + '/' + ts_url
        ts_urls.append(ts_url)

# 下载每个TS文件
for i, ts_url in enumerate(ts_urls):
    res = requests.get(ts_url, headers=headers)
    with open(f"{i+1}.ts", "wb") as f:
      f.write(res.content)

接下来,直接将上述代码放入步骤一的代码中完成下载,再按照步骤二将下载好的TS文件合并为MP4即可。

以上是将下载到本地m3u8视频合成MP4的完整攻略,希望能对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python将下载到本地m3u8视频合成MP4的代码详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Python日期时间对象转换为字符串的实例

    关于Python日期时间对象转换为字符串的实例,以下是详细的攻略说明: 一、Python日期时间对象 在 Python 中,日期和时间的数据类型为 datetime.datetime。可以使用 datetime 模块导入该类。对于日期时间对象,我们通常可以使用以下属性: year 获取年份 month 获取月份 day 获取天数 hour 获取小时 minu…

    python 2023年6月2日
    00
  • Python .format()函数使用方法详解

    Python语言中的.format()函数是一种格式化输出方法。它可以将变量插入到字符串的指定位置,避免了字符串和变量混合在一起的情况。下面我将详细讲解.format()函数的使用方法,希望能对您有所帮助。 .format()函数的基本语法和用法 .format()函数的基本语法如下所示: str.format(*args, **kwargs) 这里的str…

    python 2023年6月5日
    00
  • 如何将Python编译成C语言

    将 Python 编译成 C 语言可以实现 Python 代码的快速执行、无需 Python 环境、减小程序体积等等优点,本文将介绍如何进行 Python 编译成 C 的过程、实现方法及示例。 安装 Cython Cython 是一个能将 Python 代码转化为 C 代码,并能将 Python 的数据类型转换成 C 语言的数据类型的编译器,安装 Cytho…

    python 2023年5月18日
    00
  • Python中字符串的格式化方法小结

    来让我详细讲解一下Python中字符串的格式化方法小结吧。 简介 字符串的格式化是Python中的重要特性之一。格式化可以让我们将指定的值插入到一个字符串中,从而为我们创建有用的输出。Python中提供了多种字符串格式化方法,本文将基于这些方法进行小结和讲解。 百分号格式化 Python最早的字符串格式化方法是百分号格式化。通过使用%字符,我们可以将变量插入…

    python 2023年5月13日
    00
  • python pandas读取csv后,获取列标签的方法

    下面我将详细讲解“Python pandas 读取 CSV 后,获取列标签的方法”的完整攻略。 什么是 pandas pandas 是 Python 语言中用于数据处理和分析的一个强大开源库,提供了大量的数据加工和数据分析工具,特别是在数据处理和清洗方面表现非常优秀。在 pandas 中,最常用的数据结构是 DataFrame,它是一个类似于表格的数据结构,…

    python 2023年6月3日
    00
  • 如何使用Python实现数据库中数据的批量导入导出?

    以下是使用Python实现数据库中数据的批量导入导出的完整攻略。 数据库中数据的批量导入导出简介 在数据库中,批量导入导出是将多个数据行同时导入或导到或从数据库中。在Python中,可以使用pandas库连接到MySQL数据库,并使用to_sql()方法实现批量导入,使用read()`方法实现批量导出。 步骤1:连接到数据库 在Python中,可以使用pym…

    python 2023年5月12日
    00
  • windows中python实现自动化部署

    为了演示在Windows中使用Python实现自动化部署的完整攻略,我们需要先了解以下内容: Python的虚拟环境: 多个Python项目之间需要库的版本不同,使用虚拟环境可以隔离项目间的依赖,避免相互干扰。 Python的包管理工具: 程序需要依赖第三方库,需要使用包管理工具来下载和安装相应的依赖库。 Python的自动化部署工具:本文将以Fabric库…

    python 2023年5月19日
    00
  • request基本使用及各种请求方式参数的示例

    当我们需要向网络服务端发送请求或获取数据时,可以使用 Python 中的 requests 库。下面是关于 requests 基本使用及各种请求方式参数的示例攻略。 安装 requests 库 要使用 requests 库,首先需要在命令行中安装: pip install requests 基本使用 在代码中导入 requests 库: import req…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部