Python 神器:一键下载 M3U8 并转换为 MP4
在这个数字时代,我们经常在网页上遇到各种精彩的视频,但往往只能观看而无法下载。今天,我将向大家介绍如何使用 Python 自动下载网页中的 M3U8 链接,并将其转换为 MP4 格式,让你轻松保存喜欢的视频!
一、准备工作
首先,确保你已经安装了 ffmpeg。如果还没有安装,可以通过以参考这里安装:https://wizops.net/archives/202404/323.html
二、代码流程
- 下载 M3U8 文件保存到临时目录。
- 下载 key 文件保存到临时目录。
- 生成本地 M3U8 文件内容保存到临时目录。
- 下载 ts 文件保存到临时目录下的index目录。
- 使用ffmpeg将m3u8转换成mp4文件
三、代码实现
import os
import urllib3
import requests
import subprocess
from m3u8 import M3U8
from tenacity import retry, wait_random, stop_after_attempt
from gevent.pool import Pool
urllib3.disable_warnings()pool = Pool(10)@retry(stop=stop_after_attempt(3), wait=wait_random(2, 5))
def request(url):"""发送请求"""try:res = requests.get(url, verify=False, timeout=5)return resexcept Exception as e:print(url, e)raise edef download_segment(url, path):"""下载ts文件"""filename = url.split("/")[-1]file = os.path.join(path, filename)if os.path.exists(file):return res = request(url)with open(file, "wb")as f:f.write(res.content)def convert_mp4(path, output):# 使用FFmpeg将local.m3u8转换为一个MP4文件 ffmpeg -allowed_extensions ALL -i index.m3u8 -c copy xxx.mp4# m3u8文件中有key需要带参数-allowed_extensions ALLsubprocess.call(['ffmpeg', '-allowed_extensions', 'ALL', '-i', 'local.m3u8', '-c', 'copy', output], cwd=path)def download_m3u8(url, path, output):"""下载单个m3u8主程序url: m3u8链接urlpath: 单个m3u8目录output: 转换输出文件路径名"""base_url = url.rsplit("/", 1)[0]# 创建目录segment_dir = os.path.join(path, "index")if not os.path.exists(segment_dir):os.makedirs(segment_dir)# 下载M3U8文件m3u8_file_name = os.path.join(path, "index.m3u8")res = request(url)with open(m3u8_file_name, "w", encoding="utf-8")as f:f.write(res.text)# 解析M3U8文件m3u8_obj = M3U8(res.text)print(m3u8_obj.keys)# 下载key文件 for item in m3u8_obj.keys:if item:key_url = item.uri if item.uri.startwith("http") else f"{base_url}/{item.uri}"key_file_name = os.path.join(path, item.uri)res = request(key_url)with open(key_file_name, "w", encoding="utf-8")as f:f.write(res.text)segments = []# 生成新的本地M3U8文件内容for segment in m3u8_obj.segments:segments.append(segment.uri)segment.uri = "index/" + segment.uri.split("/")[-1]# 保存M3U8文件local_file_name = os.path.join(path, "local.m3u8")with open(local_file_name, 'w') as f:f.write(m3u8_obj.dumps())# 下载ts文件for url in segments:pool.spawn(download_segment, url, segment_dir)pool.join()# ts文件下载完成, 转换成mp4文件if len(segments) == len(os.listdir(segment_dir)):convert_mp4(path, output)if __name__ == "__main__":url = "https://v3.mstopq.com/202302/26/E92zcVVNkT1/video/1000k_0X720_64k_25/hls/index.m3u8"cur_path = os.path.abspath(os.path.dirname(__file__))path = os.path.join(cur_path, "终结者创世纪_tmp")output = os.path.join(cur_path, "终结者创世纪.mp4")download_m3u8(url, path, output)
三、注意事项
- 确保已经安装了 ffmpeg,并且在系统路径中可以访问到。
- 输出路径必须存在,否则可能会出现错误。
- 根据实际情况,可能需要根据 M3U8 文件的具体内容调整 ffmpeg 命令的参数。
通过这个简单的示例,你可以使用 Python 自动下载网页中的 M3U8 链接并将其转换为 MP4 格式。现在,你可以轻松保存喜欢的视频,随时随地观看啦!希望这个技巧对你有所帮助。如果有任何问题或建议,欢迎在评论中留言!
相关文章:
Python 神器:一键下载 M3U8 并转换为 MP4
在这个数字时代,我们经常在网页上遇到各种精彩的视频,但往往只能观看而无法下载。今天,我将向大家介绍如何使用 Python 自动下载网页中的 M3U8 链接,并将其转换为 MP4 格式,让你轻松保存喜欢的视频! 一、准…...
vue3全局控制Element plus所有组件的文字大小
项目框架vue-右上角有控制全文的文字大小 实现: 只能控制element组件的文字及输入框等大小变化,如果是自行添加div,text, span之类的控制不了。 配置流程 APP.vue 使用element的provide,包含app <el-config-provider :locale"loca…...
区间预测 | Matlab实现带有置信区间的BP神经网络时间序列未来趋势预测
区间预测 | Matlab实现带有置信区间的BP神经网络时间序列未来趋势预测 目录 区间预测 | Matlab实现带有置信区间的BP神经网络时间序列未来趋势预测预测效果基本介绍研究回顾程序设计参考资料预测效果 基本介绍 BP神经网络(Backpropagation neural network)是一种常用的人工神…...
Matlab中的脚本和函数
Matlab中的脚本和函数 文章目录 Matlab中的脚本和函数脚本创建脚本代码注释函数创建函数局部函数嵌套函数私有函数匿名函数补充知识函数句柄测试环境:Win11 + Matlab R2021a 脚本 Matlab脚本是最简单的程序文件类型。它们可用于自动执行一系列 Matlab 命令,如命令行重复执…...
使用 nohup java - jar 不输出nohup日志
使用 nohup 命令来运行 Java 程序,并且不让输出写入 nohup.out 文件,可以使用重定向操作符 > 将标准输出重定向到 /dev/null 文件中。这样可以将输出丢弃,而不会写入日志文件。下面是具体的命令: nohup java -jar your_progra…...
Linux系统中安装一些常用的插件备用
Linux系统中安装一些常用的插件备用 1.安装wget yum -y install wget 2.安装vim yum -y install vim-enhanced 3.更换yum源为国内的阿里云源(选择) 1、备份CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.…...
笔记本电脑上部署LLaMA-2中文模型
尝试在macbook上部署LLaMA-2的中文模型的详细过程。 (1)环境准备 MacBook Pro(M2 Max/32G); VMware Fusion Player 版本 13.5.1 (23298085); Ubuntu 22.04.2 LTS; 给linux虚拟机分配8*core CPU 16G RAM。 我这里用的是16bit的量化模型,…...
百度云加速方法「Cheat Engine」
加速网盘下载 相信经常玩游戏的小伙伴都知道「Cheat Engine」这款游戏内存修改器,它除了能对游戏进行内存扫描、调试、反汇编 之外,还能像变速齿轮那样进行本地加速。 这款专注游戏的修改器,被大神发现竟然还能加速百度网盘资源下载…...
SOC内部集成网络MAC外设+ PHY网络芯片方案:PHY芯片基础知识
一. 简介 本文简单了解一下 "SOC内部集成网络MAC外设 PHY网络芯片方案" 这个网络硬件方案中涉及的 PHY网络芯片的基础知识。 二. PHY芯片基础知识 PHY 是 IEEE 802.3 规定的一个标准模块。 1. IEEE规定了PHY芯片的前 16个寄存器功能是一样的 前面说了…...
openGauss 6.0.0-RC1 版本正式发布!
openGauss 6.0.0-RC1版本正式上线! openGauss 6.0.0-RC1是社区最新发布的创新版本,版本生命周期为0.5年。(创新版本命名:由原方案 XX.1.0 Preview (例:5.1.0 preview),调整为现方案 XX.0.0-RCx&…...
【JVM】关于JVM垃圾回收
文章目录 🌴死亡对象的判断算法🌸引用计数算法🌸可达性分析算法 🌳垃圾回收算法🌸标记-清除算法🌸复制算法🌸标记-整理算法🌸分代算法🌸哪些对象会进入新生代?…...
Unity照片墙简易圆形交互效果总结
还要很多可以优化的点地方,有兴趣的可以做 比如对象的销毁和生成可以做成对象池,走到最左边后再移动到最右边循环利用 分析过程文件,采用Blender,资源已上传,可以播放动画看效果,下面截个图: …...
Unity2018发布安卓报错 Exception: Gradle install not valid
Unity2018发布安卓报错 Exception: Gradle install not valid Exception: Gradle install not valid UnityEditor.Android.GradleWrapper.Run (System.String workingdir, System.String task, System.Action1[T] progress) (at <c67d1645d7ce4b76823a39080b82c1d1>:0) …...
蓝桥杯省赛刷题——题目 2656:刷题统计
刷题统计OJ链接:蓝桥杯2022年第十三届省赛真题-刷题统计 - C语言网 (dotcpp.com) 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。请你帮小明计算,按照计划他将在第几…...
Python爬虫之异步爬虫
异步爬虫 一、协程的基本原理 1、案例 案例网站:https://www.httpbin.org/delay/5、这个服务器强制等待了5秒时间才返回响应 测试:用requests写一个遍历程序,遍历100次案例网站: import requests import logging import time…...
【Web】NSSCTF Round#20 Basic 个人wp
目录 前言 真亦假,假亦真 CSDN_To_PDF V1.2 前言 感谢17👴没让我爆零 真亦假,假亦真 直接getshell不行,那就一波信息搜集呗,先开dirsearch扫一下 扫的过程中先试试常规的robots.txt,www.zip,shell.phps,.git,.sv…...
【Java笔记】实现延时队列1:JDK DelayQueue
文章目录 需求创建订单类创建延时队列优缺点 Reference JDK DelayQueue是一个无阻塞队列,底层是 PriorityQueue 需求 经典的订单超时取消 创建订单类 放入DelayQueue的对象需要实现Delayed接口 public interface Delayed extends Comparable<Delayed> {…...
npm淘宝镜像源切换
查询 npm config get registry注意因为淘宝的镜像域名更换,https://registry.npm.taobao.org域名HTTPS证书到期更换为https://registry.npmmirror.com/ 切换 npm config set registry https://registry.npmmirror.com/...
ENet——实时语义分割的深度神经网络架构与代码实现
概述 在移动设备上执行实时像素级分割任务具有重要意义。现有的基于分割的深度神经网络需要大量的浮点运算,并且通常需要较长时间才能投入使用。本文提出的ENet架构旨在减少潜在的计算负担。ENet在保持或提高分割精度的同时,相比现有的分割网络…...
游戏领域AI智能视频剪辑解决方案
游戏行业作为文化创意产业的重要组成部分,其发展和创新速度令人瞩目。然而,随着游戏内容的日益丰富和直播文化的兴起,传统的视频剪辑方式已难以满足玩家和观众日益增长的需求。美摄科技,凭借其在AI智能视频剪辑领域的深厚积累和创…...
HandheldCompanion:解锁Windows掌机游戏体验的终极钥匙
HandheldCompanion:解锁Windows掌机游戏体验的终极钥匙 【免费下载链接】HandheldCompanion ControllerService 项目地址: https://gitcode.com/gh_mirrors/ha/HandheldCompanion 你是否曾为Windows掌机的游戏兼容性而烦恼?是否梦想着在便携设备上…...
K8s原生ML编排进入“编译期优化”时代(SITS 2026首次披露:eBPF驱动的模型感知调度器Alpha版已交付头部5家云厂商)
更多请点击: https://intelliparadigm.com 第一章:AI原生Kubernetes编排:SITS 2026 K8s for ML工作负载 SITS 2026 引入了专为机器学习工作负载深度优化的 AI-native Kubernetes 编排层,突破传统 K8s 在资源弹性、异构设备调度与…...
3分钟掌握B站缓存视频转换:m4s-converter终极使用指南
3分钟掌握B站缓存视频转换:m4s-converter终极使用指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的困扰&a…...
终极歌词获取方案:163MusicLyrics让你轻松获取网易云和QQ音乐LRC歌词
终极歌词获取方案:163MusicLyrics让你轻松获取网易云和QQ音乐LRC歌词 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 还在为寻找准确歌词而烦恼吗?…...
英雄联盟LCU工具:如何用LeagueAkari提升你的游戏效率
英雄联盟LCU工具:如何用LeagueAkari提升你的游戏效率 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit LeagueAkari是一款基于英雄联…...
告别砖头:GD32 BootLoader设计中的Flash分区与地址规划实战指南(含IAR/Keil工程配置)
GD32 BootLoader架构设计与Flash分区策略实战 1. 理解GD32 Flash存储特性与IAP基础架构 GD32系列MCU的Flash存储结构呈现出典型的非均匀扇区分布特征——前4个扇区为16KB,后续扇区则扩展为64KB。这种物理特性直接影响了BootLoader设计的核心逻辑。不同于传统均匀分…...
别再只用默认样式了!LVGL Chart图表控件的10个美化技巧与高级样式配置
LVGL Chart图表控件进阶:10个专业级视觉优化技巧 在嵌入式GUI开发中,数据可视化是提升用户体验的关键环节。LVGL作为轻量级图形库的佼佼者,其Chart组件虽然开箱即用,但默认样式往往难以满足专业产品的视觉要求。本文将深入解析10个…...
性价比好的深圳除甲醛公司
深圳作为高密度开发城市,常年保持稳定的新房交付、写字楼翻新与商铺装修需求,装修带来的甲醛残留问题,始终是业主和企业管理者关注的室内安全重点。目前深圳本地已有大量除甲醛服务机构,消费者可根据自身需求筛选适配的服务主体。…...
当电脑风扇遇上智能管家:FanControl让散热控制变得简单有趣
当电脑风扇遇上智能管家:FanControl让散热控制变得简单有趣 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendi…...
别再手动敲数据了!SAS PROC IMPORT保姆级教程:从Excel、CSV到TXT文件一键导入
SAS数据导入革命:用PROC IMPORT告别低效手工操作 1. 为什么你需要掌握PROC IMPORT? 每天早晨9点,刚入职的数据分析师小李都会面临同样的噩梦——业务部门发来的几十份Excel、CSV和TXT文件堆满了邮箱。手动复制粘贴不仅耗时费力,还…...
