当前位置: 首页 > news >正文

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)

相关文章:

python 批量下载m3u8的视频

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:点击跳转 方法: 解析m3u8,获取其中的ts列表,多线程下载所有ts文件。 全部下完之后,用ffmpeg合…...

最后一击

第二届上海市青少年算法竞赛(小学组) 题目描述 Description 小爱和小艾两人组队打一只怪兽。一开始怪兽有 n 点生命值,当 n 变成 0 或更低时,怪兽就被消灭了。他们两人是同时开始攻击的,小爱每分钟可以攻击 a 下&…...

K8S资源管理方式

K8S资源管理方式 文章目录 K8S资源管理方式一、陈述式资源管理1.基础命令操作2.创建pod3.查看资源状态4.查看pod中的容器日志5.进入pod中的容器6.删除pod资源7.pod扩容8.项目生命周期管理(创建-->发布-->更新-->回滚-->删除)8.1创建services…...

第三章 图论 No.9有向图的强连通与半连通分量

文章目录 定义Tarjan求SCC1174. 受欢迎的牛367. 学校网络1175. 最大半连通子图368. 银河 定义 连通分量是无向图的概念,yxc说错了,不要被误导 强连通分量:在一个有向图中,对于分量中的任意两点u,v,一定能从…...

回归预测 | MATLAB实现基于PSO-LSSVM-Adaboost粒子群算法优化最小二乘支持向量机结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于PSO-LSSVM-Adaboost粒子群算法优化最小二乘支持向量机结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于PSO-LSSVM-Adaboost粒子群算法优化最小二乘支持向量机结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考…...

Mysql 和Oracle的区别

、mysql与oracle都是关系型数据库,Oracle是大型数据库,而MySQL是中小型数据库。但是MySQL是开源的,但是Oracle是收费的,而且比较贵。 1 2 mysql默认端口:3306,默认用户:root oracle默认端口&…...

在收藏夹里“积灰”的好东西——“收藏从未停止,行动从未开始”

方向一:分享一道你收藏的好题 小雅兰刚学数据结构与算法的时候,学的真的是很吃力,感觉链表真的特别的难,在学习了后面的知识之后,发现链表慢慢变得简单了,若是放在现在,小雅兰仍然觉得链表的知…...

【算法|数组】双指针

算法|数组——双指针 引入 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:…...

asp.net core6 webapi 使用反射批量注入接口层和实现接口层的接口的类到ioc中

IBLL接口层类库 namespace IBLL {public interface ICar{string CarName();} } namespace IBLL {public interface IRed{string RedName();} }BLL实现接口层类库 namespace BLL {public class Car : ICar{public string CarName(){return "BBA";}} } namespace BLL…...

【2023】字节跳动 10 日心动计划——第九关

目录 1. 螺旋矩阵2. 划分字母区间3. 子集 II 1. 螺旋矩阵 &#x1f517; 原题链接&#xff1a;54. 螺旋矩阵 类似于BFS那样使用方向数组即可。 class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {int m matrix.size(), …...

小龟带你敲排序之冒泡排序

冒泡排序 一. 定义二.题目三. 思路分析&#xff08;图文结合&#xff09;四. 代码演示 一. 定义 冒泡排序&#xff08;Bubble Sort&#xff0c;台湾译为&#xff1a;泡沫排序或气泡排序&#xff09;是一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元…...

Nacos AP架构集群搭建(Windows)

手写SpringCloud项目地址&#xff0c;求个star github:https://github.com/huangjianguo2000/spring-cloud-lightweight gitee:https://gitee.com/huangjianguo2000/spring-cloud-lightweigh 目录&#xff1a; 一&#xff1a;初始化MySQL 二&#xff1a;复制粘贴三份Nacos文…...

nodejs+vue+elementui,图书评论管理系统_g9e3a

用户的功能主要是对首页、图书信息、公告信息、在线咨询、个人中心等进行操作。表名&#xff1a;token语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 前端nodejsvueelementui, 管理员…...

基于TorchViz详解计算图(附代码)

文章目录 0. 前言1. 计算图是什么&#xff1f;2. TorchViz的安装3. 计算图详解 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff0c;虽然参考了他人的宝贵见解&#xff0c;但是内容可能存在不准确的地方。如果发现文中错误&#xff0c;…...

解决GitHub的速度很慢的几种方式

1. GitHub 镜像访问 这里提供两个最常用的镜像地址&#xff1a; https://hub.njuu.cf/search https://www.gitclone.com/gogs/search/clonesearch 也就是说上面的镜像就是一个克隆版的 GitHub&#xff0c;你可以访问上面的镜像网站&#xff0c;网站的内容跟 GitHub 是完整同步…...

设计模式再探——策略模式

目录 一、背景介绍二、思路&方案三、过程1.策略模式简介2.策略模式的类图3.策略模式代码4.策略模式还可以优化的地方5.策略模式的例子改造(配置文件反射) 四、总结五、升华 一、背景介绍 最近在做产品的过程中&#xff0c;对于主题讨论回复内容&#xff0c;按照追评次数排…...

基于Googlenet深度学习网络的人员行为动作识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 1. 原理 1.1 深度学习与卷积神经网络&#xff08;CNN&#xff09; 1.2 GoogLeNet 2. 实现过程 2.1 数据预处理 2.2 构建网络模型 2.3 数据输入与训练 2.4 模型评估与调优 3. 应用领域…...

存储过程的学习

1&#xff0c;前言 这是实习期间学习的&#xff0c;我可能是在学校没好好听课&#xff0c;&#xff08;或者就是学校比较垃&#xff0c;没教这部分&#xff0c;在公司经理让我下去自己学习&#xff0c;太难了&#xff0c;因为是公司代码很多部分都是很多表的操作&#…...

zookeeperAPI操作与写数据原理

要执行API操作需要在idea中创建maven项目 &#xff08;改成自己的阿里仓库&#xff09;导入特定依赖 添加日志文件 上边操作做成后就可以进行一些API的实现了 目录 导入maven依赖&#xff1a; 创建日志文件&#xff1a; 创建API客户端&#xff1a; &#xff08;1&#xff09…...

防火墙对双通道协议的处理

防火墙是一种网络安全设备或软件&#xff0c;用于控制网络流量并保护计算机网络免受未经授权的访问、恶意攻击和网络威胁。它作为网络的第一道防线&#xff0c;用于监视、过滤和管理进出网络的数据包。 防火墙可以基于预设的安全策略对网络流量进行评估和筛选。它通过比较数据…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...