AI网络爬虫:下载m3u8视频文件

news2025/1/11 10:59:32

要下载m3u8视频文件,首先得找到m3u8地址,按下F12键,看网络-fetch/xhr,然后找网址中包括m3u8的地址,再预览或者看下相应

https://1304688195.vod2.myqcloud.com/9d058fb7vodtranscq1304688195/1194c6da1253642699220090018/video_1420095_2.m3u8?sign=65407f6e7bdb02ddcdebeddb3d1ade67&t=667642cb&us=2851689

如果类似类似上面,就说明这是一个M3U8格式的视频流媒体播放列表文件。M3U8是一种基于HTTP Live Streaming (HLS) 技术的播放列表格式,常用于流媒体服务。下面是对这个文件内容的解析:

#EXTM3U: 表示这是一个M3U格式的播放列表文件。

#EXT-X-VERSION:3: 指定M3U8文件的版本。

#EXT-X-PLAYLIST-TYPE:VOD: 表示这是一个点播(Video On Demand)播放列表,意味着内容是预先录制的,可以随时开始播放。

#EXT-X-MEDIA-SEQUENCE:0: 表示第一个媒体文件的序列号是0。

#EXT-X-TARGETDURATION:10: 表示每个媒体文件的最大持续时间为10秒。

#EXTINF:10.000,: 表示每个媒体文件的持续时间为10秒。

后面的每一行都是一个媒体文件的URL,格式为 <filename>.ts,后面跟着一些参数,如签名(sign)、时间戳(t)和用户标识(us)。

#EXT-X-ENDLIST: 表示播放列表结束,没有更多的媒体文件。

这个播放列表包含了从 1420095_2_0.ts 到 1420095_2_105.ts 的媒体文件,每个文件持续10秒,除了最后一个文件 1420095_2_105.ts 持续1.84秒。这些文件可以被用于流媒体播放,客户端会按照顺序请求这些文件来播放视频内容。

在ChatGPT中输入提示词:

你是一个Python编程专家,写一个m3u8视频下载的Python脚本,具体步骤如下:

用户输入一个m3u8地址,接受到这个输入;

解析m3u8文件并获取其中的ts片段链接,发送网络请求下载这些文件;

将下载好的ts片段按顺序合并成一个完整的视频文件,可以使用ffmpeg进行转码和合并;

合并后的视频文件格式为mp4,保存到文件夹:F:\aivideo

注意:每一步都要输出信息到屏幕上

显示下载进度;

多线程加快下载

M3U8播放列表可能包含没有指定基础URL的相对URL,为了解决这个问题,我们需要手动将M3U8文件的基础URL与每个片段的相对路径结合起来,构建每个.ts片段的完整URL。

合并完成后,删除全部ts文件;

源代码:

import os

import requests

import m3u8

import concurrent.futures

import subprocess

from tqdm import tqdm

from urllib.parse import urljoin

# Output folder

output_folder = "F:\\aivideo"

# Ensure output folder exists

os.makedirs(output_folder, exist_ok=True)

def download_ts_segment(url, output_path):

"""

Downloads a single .ts segment.

"""

response = requests.get(url, stream=True)

with open(output_path, 'wb') as file:

for chunk in response.iter_content(chunk_size=8192):

file.write(chunk)

return output_path

def merge_ts_files(ts_files, output_file):

"""

Merges .ts files using ffmpeg.

"""

with open("filelist.txt", 'w') as f:

for ts_file in ts_files:

f.write(f"file '{ts_file}'\n")

# Merge using ffmpeg

subprocess.run(['ffmpeg', '-f', 'concat', '-safe', '0', '-i', 'filelist.txt', '-c', 'copy', output_file])

os.remove("filelist.txt")

def download_and_merge_m3u8(m3u8_url, output_filename):

"""

Downloads and merges M3U8 video segments.

"""

if not output_filename.endswith(('.mp4', '.mkv', '.avi')):

output_filename += ".mp4" # Default to mp4 if no extension provided

print(f"Fetching M3U8 playlist from: {m3u8_url}")

response = requests.get(m3u8_url)

playlist = m3u8.loads(response.text)

base_uri = m3u8_url.rsplit('/', 1)[0] + '/'

ts_urls = [urljoin(base_uri, segment.uri) for segment in playlist.segments]

print(f"Found {len(ts_urls)} segments.")

# Download TS segments with progress bar

ts_files = []

with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:

future_to_url = {executor.submit(download_ts_segment, url, os.path.join(output_folder, f"{i}.ts")): url for i, url in enumerate(ts_urls)}

for future in tqdm(concurrent.futures.as_completed(future_to_url), total=len(ts_urls), desc="Downloading TS segments"):

ts_file = future.result()

ts_files.append(ts_file)

# Sort files to ensure correct order

ts_files.sort(key=lambda x: int(os.path.basename(x).split('.')[0]))

# Merge TS files

output_path = os.path.join(output_folder, output_filename)

print(f"Merging TS files into {output_path}")

merge_ts_files(ts_files, output_path)

print(f"Video saved to {output_path}")

if __name__ == "__main__":

m3u8_url = input("Enter the M3U8 URL: ")

output_filename = input("Enter the output filename (e.g., video.mp4): ")

download_and_merge_m3u8(m3u8_url, output_filename)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1861019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【阅读论文】-- IDmvis:面向1型糖尿病治疗决策支持的时序事件序列可视化

IDMVis: Temporal Event Sequence Visualization for Type 1 Diabetes Treatment Decision Support 摘要1 引言2 1 型糖尿病的背景3 相关工作3.1 时间事件序列可视化3.2 电子健康记录可视化3.3 1 型糖尿病可视化3.4 任务分析与抽象 4 数据抽象5 层次化任务抽象5.1 临床医生工作…

【IM 服务】新用户为什么刚注册就能收到通知?为什么能接收注册前的通知?

功能说明&#xff1a; 默认新注册的用户可以接收到注册前 7 天内的广播消息。您可以从控制台免费基础功能页面关闭该服务。 开通方式&#xff1a; 访问开发者后台 免费基础功能 1页面&#xff0c;确认应用名称与环境&#xff08;开发 /生产 &#xff09;正确无误后&#xff0c…

统一视频接入平台LntonCVS视频共享交换平台智慧景区运用方案

随着夏季的到来&#xff0c;各地景区迎来了大量游客&#xff0c;而景区管理面临的挑战也愈加严峻&#xff0c;尤其是安全问题显得格外突出。 视频监控在预防各类安全事故方面发挥着重要作用&#xff0c;不论是自然景区还是人文景区&#xff0c;都潜藏着诸多安全隐患&#xff0…

eslint 与 prettier 的一些常见的配置项(很详细)

目录 1、eslint 常见配置项&#xff08;语法规范&#xff09; 2、 prettier 常见的配置项&#xff08;格式规范&#xff09; 代码规范相关内容看小编的该文章&#xff0c;获取对你有更好的帮助 vsCode代码格式化&#xff08;理解eslint、vetur、prettier&#xff0c;实现格式…

AIPainter:创意绘画的智能助手

AIPainter 介绍 AIPainter是一款简单易用的AI画图工具&#xff0c;支持文生图、图生图&#xff08;提示词改图、图片变体、分辨率增强等&#xff09;&#xff0c;底层大模型基于开源的腾讯混元文生图、SDXL等。 功能特点 提示词库 AIPainter默认提供了一些常用场景的提示词供…

(python)小学出题热门词汇可视化绘制

1.代码 import pandas as pd from wordcloud import WordCloud import matplotlib.pyplot as plt from collections import Counter import jieba # 如果你处理的是中文文本&#xff0c;需要jieba分词 import re # 停用词列表&#xff0c;这里只是示例&#xff0c…

2024年【R2移动式压力容器充装】考试总结及R2移动式压力容器充装试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【R2移动式压力容器充装】考试总结及R2移动式压力容器充装试题及解析&#xff0c;包含R2移动式压力容器充装考试总结答案和解析及R2移动式压力容器充装试题及解析练习。安全生产模拟考试一点通结合国家R2移动式…

PWN练习---Heap_1

heap_Easy_Uaf 题源&#xff1a;PolarD&N 考点&#xff1a;UAF漏洞(use after free) 源码 程序是一个菜单&#xff0c;可以实现add&#xff0c;dele&#xff0c;edit&#xff0c;puts 堆块内容等的功能。&#xff08;堆块编号从0开始&#xff09; 注意到一个存在backdoor的…

定制化服务:可燃气体报警器检定收费新模式

随着工业化和城市化的快速发展&#xff0c;可燃气体报警器作为重要的安全监测设备&#xff0c;其准确性和可靠性对于保障人们的生命财产安全至关重要。因此&#xff0c;可燃气体报警器的定期检定和维护显得尤为重要。 在这篇文章中&#xff0c;佰德将围绕可燃气体报警器检定收…

ssm 宠物领养系统-计算机毕业设计源码08465

目 录 摘要 1 绪论 1.1课题背景及意义 1.2研究现状 1.3ssm框架介绍 1.3论文结构与章节安排 2 宠物领养系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 …

Android Native 客户端属性配置系统使用说明

Android Native 客户端属性配置系统使用说明 背景和问题现代 android 开发基本都基于 gradle 属性设置来进行定制化编译,随着项目的迭代,工程结构越发复杂,配置属性越来越多,越来越多的配置使得上手难度越来越大。 解决方案设计一般而言,在 android 开发中,Gradle 属性系…

Calibre - 合并电子书(EpubMerge)

这里使用 Calibre 软件和 EpubMerge 插件 EpubMerge github &#xff1a; https://github.com/JimmXinu/EpubMerge 1、安装 Merge 插件 安装后需要重启 calibre 2、查看设置 4 3、选中文件、开始合并 合并完成后&#xff0c;会弹窗窗口&#xff0c;来编辑 合辑的元信息 完成…

学习记录697@数据通信基础之异步通信和同步通信

最近在看计算机网络物理层部分&#xff0c;涉及到异步通信和同步通信&#xff0c;这个和通信知识相关。 异步通信和同步通信都是为了解决时钟同步问题&#xff0c;这个和编程中的同步和异步是不一样的概念。 时钟同步 我的理解是&#xff0c;发送者发送一系列信号&#xff0…

Vue3 和 ECharts 创建交互式雷达图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 Vue.js 中使用 ECharts 创建雷达图 应用场景 雷达图是一种多维数据可视化图表&#xff0c;常用于比较不同指标之间的关系和变化趋势。在 Vue.js 项目中&#xff0c;我们可以使用 ECharts 库轻松创建雷达图。 …

CPR曲面重建代码

废话不说&#xff0c;直接上代码&#xff1a; #include "vtkAutoInit.h" #include "vtkPolyData.h" #include "vtkProbeFilter.h" #include "vtkParametricFunctionSource.h" #include "vtkParametricSpline.h" #include &…

jenkins api部署时,一直提示pending-Finished waiting

问题&#xff1a; 调用jenkins api部署时&#xff0c;一直提示pending-Finished waiting 解决方案&#xff1a; 这个问题困扰了很久&#xff0c;一直没有思路&#xff0c;后面看到调用jenkinsAPI本身会出现一段提示&#xff0c;pending in the quiet period&#xff0c;通过搜…

智慧仓储的秘密武器:数据可视化的应用

智慧仓储中数据可视化是如何应用的&#xff1f;在现代物流和供应链管理中&#xff0c;智慧仓储已成为企业提升效率、降低成本和优化运营的重要手段。而数据可视化作为智慧仓储的重要工具&#xff0c;通过将复杂的数据转化为直观、易理解的图表和图形&#xff0c;极大地提升了仓…

js实现blockly后台解释器,可以单步执行,可以调用c/c++函数

实现原理 解析blockly语法树,使用js管理状态,实际使用lua执行,c/c++函数调用使用lua调用c/c++函数的能力 可以单行执行 已实现if功能 TODO for循环功能 函数功能 单步执行效果图 直接执行效果图 源代码 //0 暂停 1 单步执行 2 断点 //创建枚举 var AstStatus = {PAUS…

5、双足机器人mpc动力学模型

为计算机器人的当前实际状态x,需要建立双足质心动力学模型。 速度模型由控制输入变量推导速度公式: x向速度νx :当前机器人x方向的前进速度,初始值由速度传感器实时测量得到。y向速度νy :机器人y方向的平移速度。z向速度νz :垂直方向的速度,对于双足机器人行走时为0:…

吉利前端、AI面试

诸葛耘墒的在线视频面试 1、小程序端AI视频面试 虚拟人面试官提问 视频口述回答 1、最近的两份工作经历&#xff0c;以及上一份离职原因2、在过往的工作或生活中&#xff0c;需要学习掌握一项与工作有关的技能或兴趣爱好时&#xff0c;你会运用哪些方法和诀窍&#xff0c;投入…