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

python下载M3U8视频脚本

安装依赖

pip install m3u8 requests

程序

import os import time import requests import m3u8 from urllib.parse import urljoin from Crypto.Cipher import AES from Crypto.Util.Padding import pad def download_m3u8_video(url, save_name='output.mp4'): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'} print("📡 正在解析 m3u8 播放列表...") try: playlist = m3u8.load(uri=url, headers=headers) except Exception as e: print(f"❌ 解析失败: {e}") return # 检查是否存在 AES 加密 key, iv = None, None if playlist.keys and playlist.keys[-1] is not None: key_info = playlist.keys[-1] key_uri = key_info.uri # 【核心修复】:如果密钥是相对路径,使用 urljoin 拼接完整的 URL if not key_uri.startswith('http'): key_uri = urljoin(url, key_uri) print(f"🔑 检测到加密,正在获取完整密钥链接: {key_uri}") # 获取密钥内容(建议加上与下载视频相同的 headers,防止防盗链拦截) key_resp = requests.get(key_uri, headers=headers, timeout=15) key_resp.raise_for_status() key = key_resp.content # 获取 IV 向量,如果没有则默认使用全零的 16 字节 iv = key_info.iv if iv: iv = bytes.fromhex(iv.replace('0x', '')) else: iv = b'\x00' * 16 total = len(playlist.segments) print(f"✅ 解析成功,共 {total} 个片段,开始下载并合并...") start_time = time.time() size = 0 with open(save_name, 'wb') as f: for i, seg in enumerate(playlist.segments, 1): try: # 同样确保 TS 分片也是完整 URL ts_url = seg.absolute_uri r = requests.get(ts_url, headers=headers, timeout=15) r.raise_for_status() data = r.content # 如果有密钥,进行 AES 解密 if key: cipher = AES.new(key=key, mode=AES.MODE_CBC, iv=iv) data = cipher.decrypt(pad(data, AES.block_size)) f.write(data) size += len(data) # 打印进度 elapsed = time.time() - start_time speed = size / elapsed / 1024 / 1024 print(f"\r⏳ 进度: {i}/{total} | 已下载: {size / 1024 / 1024:.2f}MB | 速度: {speed:.2f}MB/s", end='') except Exception as e: print(f"\n❌ 第 {i} 个片段下载失败: {e}") continue print(f"\n🎉 视频已成功保存为: {save_name}") if __name__ == '__main__': M3U8_URL = "xxx" download_m3u8_video(M3U8_URL, 'my_video.mp4')
http://www.gsyq.cn/news/1604861.html

相关文章:

  • AI截图工具免费下载,基于DeepSeek的OCR截图软件支持Mac和Win
  • 【单片机毕业设计】基于 STM32 的超重声光报警电子秤设计与实现,基于 STM32 的阈值式重量监测报警系统设计(013701)
  • Burp Suite实战:验证码场景下的自动化渗透测试与绕过技术
  • ABB工业机器人编程基础(十三)功能程序(FUNC)
  • 第八、九次作业
  • 考四级的资料|过四级必备资料书|英语六级备考资料
  • MySQL数据库期末复习②
  • 英语四级考资料|四级考试英语资料|英语四级考试资料
  • 2026学生降AI率工具盘点: 学术打磨+逻辑优化哪家强?
  • 使用Hermes 排查OpenClaw 从 5.12 升级到 6.10 的故障
  • 第八次作业和第九次作业
  • 【小白也能轻松玩转龙虾】虾壳云一键部署办公增效,批量文件处理 OpenClaw v2.7.9 教学(附最新安装包)
  • Linux基础指令(一):命令行入门
  • 【ChatGPT结构化提示词黄金法则】:20年AI工程实战提炼的7大不可绕过的设计范式
  • FPGA加速同态矩阵向量乘法的技术解析与实践
  • 别只会用Office!打工人必学的5个AI办公技巧
  • 液冷板焊接的质量账:70%的失效根源在钎焊,激光焊接怎么把良率拉到99%
  • FFmpeg视频切片与AES-128加密完整实战指南
  • 2026论文双降终极榜单:10款降AIGC工具,智能改写快速定稿成文
  • 如何用AI写代码 ? AI编程提示词怎么写 ?AI写的代码如何调试
  • 从弗朗西斯·奇切斯特的环球航行看:技术、勇气与人类精神的现代启示
  • 基于 Ragas 与通义千问实现 RAG 系统答案正确性自动评估
  • 每日更新!免费股票日k、分时k线数据,etf分钟数据,截至到2026-07月最新数据,含全沪京深7000+股票
  • 基于鸿蒙十二阶均衡体系:境外全域隐性渗透的安全风险与均衡治理路径——基于全域均衡数理模型推演(十三)
  • 新手也能上手!2026年实测靠谱的专业降AI率平台
  • Ubuntu SSH 强制密钥登录:配置不生效的排查与修复
  • DICOM图像核心参数实战指南:从像素到诊断的精准度量
  • 亿元合家欢动画《悟空大圣》正式定档7月24日暑期上映
  • 2026 降AIGC工具实测盘点:值得体验,毕业党生存手册
  • 【云原生与DevOps】03-K8s生产环境部署Checklist:你踩过这18个坑吗