python 批量下载m3u8的视频

方法:

解析m3u8,获取其中的ts列表,多线程下载所有ts文件。

全部下完之后,用ffmpeg合并成mp4

代码:

import requests
import os
import threadingtnum = 64class Downloader(threading.Thread):def __init__(self, id, url, ts_list, file_path):threading.Thread.__init__(self)self.id = idself.url = urlself.ts_list = ts_listself.file_path = file_pathdef run(self):for i in range(self.id, len(self.ts_list), tnum):ts_url = self.ts_list[i]r = requests.get(ts_url, stream=True)if r.status_code == 200:with open(self.file_path + f'_{i}.ts', 'wb') as f:for chunk in r.iter_content(chunk_size=1024):if chunk:f.write(chunk)def download_m3u8_video(url, file_path):r = requests.get(url)if r.status_code != 200:print('m3u8视频下载链接无效')return Falsem3u8_list = r.text.split('\n')m3u8_list = [i for i in m3u8_list if i and i[0] != '#']ts_list = []for ts_url in m3u8_list:ts_url = url.rsplit('/', 1)[0] + '/' + ts_urlts_list.append(ts_url)f = open(file_path+'file_list.txt', 'w+')for i in range(len(ts_list)):f.write('file \'' + f'_{i}.ts' + "'\n")f.close()threads = []for i in range(0, tnum):thread = Downloader(i, url, ts_list, file_path.rsplit('.', 1)[0])thread.start()threads.append(thread)for thread in threads:thread.join()return not endflagdef merge_file(path, save_path):ffmpeg_bin_dic = 'C:/ffmpeg-2023-08-07-git-d295b6b693-full_build/bin/'os.system(ffmpeg_bin_dic+'ffmpeg -f concat -safe 0 -i '+path+'file_list.txt'+' -c '+ ' copy ' +save_path)def down(url):name = url[-41:-5]print(name)ts_file_path = 'D:/v/' + name+'/'os.makedirs(ts_file_path)mp4_file_path = 'D:/v2/'+name+'.mp4'global endflagendflag = Falseif download_m3u8_video(url, ts_file_path):print('m3u8视频下载完成')merge_file(ts_file_path, mp4_file_path)else :print('error!!!!')print(url)url_list = ['https://sth.com/videos/202305091/d63b006e-c6fb-4997-8d43-7ebd086e9c75.m3u8','https://sth.com/videos/202305081/2c9fa41b-e25b-4371-908f-d246628d7bed.m3u8',
]for url in url_list:down(url)

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

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

相关文章

数据结构—树和二叉树

5.树和二叉树 5.1树和二叉树的定义 树形结构(非线性结构):结点之间有分支,具有层次关系。 5.1.1树的定义 树(Tree)是n(n≥0)个结点的有限集。 若n0,称为空树&#x…

LVS工作环境配置

一、LVS-DR工作模式配置 模拟环境如下: 1台客户机 1台LVS负载调度器 2台web服务器 1、环境部署 (1)LVS负载调度器 yum install -y ipvsadm # 在LVS负载调度器上进行环境安装 ifconfig ens33:200 192.168.134.200/24 # 配置LVS的VIP…

Java自学网站推荐,专业教学快速提升

Java自学网站可以是学习Java的有用资源之一。它们通常提供了丰富的教学材料、在线课程、编程练习和实例项目,帮助初学者系统地学习Java编程语言和相关技术。 动力节点是一家专业的Java培训机构,他们提供在线视频学习平台,你可以参考他们的官方…

数据结构----结构--线性结构--链式存储--链表

数据结构----结构–线性结构–链式存储–链表 1.链表的特点 空间可以不连续,长度不固定,相对于数组灵活自由 搜索: 时间复杂度O(n) 增删: 头增头删时间复杂度O(1) 其他时间复杂度为O(n) 扩展:单向循环链表的特性 从任意节…

Web前端之NodeJS、Vue

文章目录 一、Babel转码器1.1 Babel安装流程1.2 Babel命令行转码 二、Promise对象三、测试方式四、Vue(渐进式JS框架)4.1 准备4.2 创建一个项目4.3 运行一个项目 五、模板语法5.1 文本5.2 原始html5.3 属性Attribute5.4 使用JavaScript表达式 六、条件渲…

docker 启动ssh

在docker中启动ssh服务_docker 开启ssh_mibu110的博客-CSDN博客

美国站UL2849报告电动自行车的安全标准

目前国内很多大品牌电动车出口企业都已经通过UL2849的安全检测或已经在申请中了。目前,全球卖两款电动自行车SC-1,EB-7和高科时代电动自行车P10,P2都已经通过了美国UL2272&UL2849认证,率先进入了北美市场。电商平台亚马逊也对…

idea常用插件

idea常用插件 1、MyBatis Log Free 打印完整的sql语句 控制台打印的sql语句是需要自己手动补充完整,才能在Navicat中执行。这个插件可以直接帮我们把sql语句完整的打印出来 安装成功后可以直接在控制台右击使用即可 使用效果 2、Maven Helper 解决 maven 依赖冲突…

Element组件浅尝辄止1:抽屉组件

平时开发中涉及弹窗的情景,一般都会选用dialog组件,其内部封装的相当优雅,方便我们使用; 但是当你的文本内容或表单很长, 亦或是你需要临时展示一些图标或文档,Dialog 组件可能并不满足我们的需求,这时可以…

【LangChain学习】基于PDF文档构建问答知识库(二)创建项目

这里我们使用到 fastapi 作为项目的web框架,它是一个快速(高性能)的 web 框架,上手简单。 一.创建 FastAPI 项目 我们在IDE中,左侧选择 FastAPI ,右侧选择创建一个新的虚拟环境。 创建成功,会有…

需要数电发票接口的,先熟悉下数电发票基本常识

最近有一些技术小伙伴来咨询数电发票接口的时候,对数电发票的一些常识不太了解, 导致沟通起来比较困难。比较典型的这三个问题: 一、开具数电票时,如何设置身份认证频次? 请公司的法定代表人或财务负责人登录江苏省电…

json-server的入门

由于前端开发的时候,需要向后端请求数据,有的时候后端还没有准备好,所以需要使用一些简单的静态数据,但是我们更加希望能够模拟请求以及请求回来的过程,这个时候就需要使用json-server Json-Server的介绍 json-server…

第十六章、【Linux】程序管理与SELinux初探

16.1 什么是程序 (process) 在Linux 系统当中:“触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的使用者与相关属性关系&#xff…

二叉树题目:根据二叉树创建字符串

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:根据二叉树创建字符串 出处:606. 根据二叉树创建字符串 难度 3 级 题目描述 要求 给你二叉树的根结…

Java的泛型

泛型 泛型又称参数化类型,是Jdk5.0出现的新特性,解决数据类型的安全性问题 在类声明或实例化时只要指定好需要的具体的类型即可 Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCastException异常。同时,代码更加简洁…

基本数据类型c++ 整数型:int, long long等 实数型:float, double等 字符型:char等 布尔型:bool等

整数型:int, long long 实数型:float, double 字符型:char 布尔型:bool 整数型:int, long long 在C编程中,整数型(Integer Types)是一种基本的数据类型,用于表示整数值…

ubuntu 安装 nvidia 驱动

ubuntu 安装 nvidia 驱动 初环境与设备查询型号查询对应的驱动版本安装驱动验证驱动安装结果 本篇文章将介绍ubuntu 安装 nvidia 驱动 初 希望能写一些简单的教程和案例分享给需要的人 环境与设备 系统:ubuntu 设备:Nvidia GeForce RTX 4090 查询型…

Linux C 语言 mosquitto 方式 MQTT 发布消息

1 说明 采用 mosquitto 库,实现对主题发布消息。 其中服务器有做限制,需要对应的 cilent id ,cafile 、certfile 、keyfile 等配置 2 开发环境 采用ubuntu 直接编译调试 安装mosquitto 库 sudo apt install libmosquitto-dev sudo apt-ge…

常见的服务器安全管理漏洞!!!!!

常见的服务器安全管理漏洞!!!!! 企业信息化技术的应用,以不可逆转。随着文件服务器、ERP管理软件等等在企业中生根发芽,应用服务器也逐渐在企业中普及起来。以前在企业中有一台应用服务器已经是…

PyTorch 微调终极指南:第 2 部分 — 提高模型准确性

一、说明 如今,在训练深度学习模型时,通过在自己的数据上微调预训练模型来迁移学习已成为首选方法。通过微调这些模型,我们可以利用他们的专业知识并使其适应我们的特定任务,从而节省宝贵的时间和计算资源。本文分为四个部分&…