使用技术(1-4 个)
Python、aiohttp、FFmpeg、正则表达式
业务和功能介绍
立项背景和目标:针对基于 M3U8 协议的网络视频,解决其批量下载与格式合成的需求,实现高效、稳定的 TS 片段下载及 MP4 格式合成,支持并发控制、失败重试,提升视频下载的成功率与效率。
软件功能、核心功能模块的介绍:
M3U8 地址提取模块:从视频播放页动态提取 M3U8 链接,适配不同网站格式。
M3U8 文件处理模块:下载并解析 M3U8 文件,递归处理嵌套 M3U8(如清晰度分级场景)。
TS 片段异步下载模块:基于异步编程实现高并发下载,支持失败重试与进度展示。
视频合成模块:调用 FFmpeg 将 TS 片段无损合成为 MP4 视频。
环境初始化模块:自动创建存储目录,检查 FFmpeg 环境依赖。
业务流程、功能细节描述:用户配置视频播放页 URL 和本地保存路径后,程序自动提取 M3U8 地址→下载并解析 M3U8 文件(处理嵌套逻辑)→异步并发下载所有 TS 片段(含失败重试)→最终调用 FFmpeg 将 TS 片段合成 MP4 视频,全流程自动化完成
项目实现
整体架构和设计思路:采用模块化分层设计,分为初始化层、M3U8 处理层、TS 下载层、视频合成层。利用asyncio + aiohttp实现异步高并发下载,提升 TS 片段获取效率;通过同步请求(requests)处理 M3U8 提取与下载,保证流程稳定性;借助正则表达式动态匹配不同网站的 M3U8 地址格式,提升兼容性;调用 FFmpeg 原生工具进行视频合成,避免二次编码,兼顾速度与画质。
“我” 的负责模块和结果:负责整体架构设计、全模块编码实现(包括异步下载逻辑、M3U8 解析、FFmpeg 调用、异常处理等)。最终实现了从 “M3U8 地址提取→TS 批量下载→MP4 合成” 的完整自动化流程,支持并发控制、失败重试、嵌套 M3U8 处理等核心功能,成功交付可稳定运行的视频下载与合成工具。
“我” 遇到的难点、坑和解决方案:
难点 1:不同网站 M3U8 地址格式不统一。
解决方案:编写多组正则表达式,逐步匹配url":"xxx.m3u8、videoUrl = "xxx.m3u8"等不同格式,提升地址提取的兼容性。
难点 2:异步下载的并发控制与资源过载。
解决方案:通过asyncio.Semaphore限制并发数(配置项MAX_CONCURRENT),在效率与服务器压力间取得平衡。
难点 3:嵌套 M3U8 的递归处理。
解决方案:解析 M3U8 文件时,若发现#EXT-X-STREAM-INF标签则递归下载子 M3U8,直到获取最终的 TS 片段列表。
难点 4:TS 片段下载失败的重试机制。
解决方案:为每个 TS 下载任务设置最大重试次数(配置项MAX_RETRY),失败后自动重试,显著提升整体下载成功率。