视频平台(如AcFun)通常将完整视频切割为大量.ts分片,并通过m3u8索引文件动态加载,普通下载工具无法直接下载整个视频。本项目旨在解决流媒体视频的批量采集与合并问题。业务背景包括视频内容备份、离线观看、教育资源保存等场景。用户只需提供视频ID(如ac48372480),即可自动获取m3u8地址、下载所有ts分片、调用ffmpeg合并为单个mp4文件,并自动清理缓存,极大提升视频采集效率。
点击空白处退出提示
视频平台(如AcFun)通常将完整视频切割为大量.ts分片,并通过m3u8索引文件动态加载,普通下载工具无法直接下载整个视频。本项目旨在解决流媒体视频的批量采集与合并问题。业务背景包括视频内容备份、离线观看、教育资源保存等场景。用户只需提供视频ID(如ac48372480),即可自动获取m3u8地址、下载所有ts分片、调用ffmpeg合并为单个mp4文件,并自动清理缓存,极大提升视频采集效率。
1. 自动获取m3u8地址:通过模拟浏览器请求视频页面,从JavaScript变量中解析出包含视频信息的JSON,提取m3u8文件的真实URL。
2. 解析m3u8并提取ts分片:下载m3u8文件,过滤注释行,获取每个.ts文件的相对路径,拼接成完整URL。
3. 批量下载ts分片:遍历所有ts链接,依次下载到临时缓存文件夹,支持断点续传(设计上可扩展)。
4. 生成合并列表并调用ffmpeg合并:生成list.txt文件,使用ffmpeg的concat协议无损合并所有ts分片为一个mp4文件。
5. 自动清理临时文件:合并完成后删除缓存文件夹,释放磁盘空间。
1. 我负责的任务:独立完成需求分析、代码编写、调试与测试,包括异常处理和路径兼容。
2. 技术栈:Python + requests(网络请求)、re(正则提取JSON)、subprocess(调用ffmpeg)、shutil/os(文件管理)。
3. 实现亮点:
- 自动从HTML的window.videoInfo中解析JSON,无需手动抓取接口。
- 支持任意AcFun视频ID(只需在run()中传入)。
- 使用绝对路径管理缓存,避免路径错误。
- ffmpeg调用带静默参数(-loglevel error),只显示错误信息,输出整洁。
- 最终视频文件名自动使用视频标题,并过滤非法字符。
4. 难点与解决:m3u8地址动态隐藏在页面JavaScript变量中,通过正则匹配JSON字符串并解析;ts分片数量可能很大,设计顺序下载+进度提示,避免内存溢出。





评论