网课还没看完就下架用 m3u8_downloader 把 HLS 视频离线存进硬盘【免费下载链接】m3u8_downloaderm3u8HLS流下载实现了AES解密、合并、多线程、批量下载项目地址: https://gitcode.com/gh_mirrors/m3/m3u8_downloader你一定遇到过这种糟心事某平台的网课、纪录片或直播回放明明还能看却被切成几十上百个 TS 分片藏在服务器里等你真正需要的时候——下架了。m3u8_downloader 就是为这个场景而生的小工具它专门负责 HLS 流媒体下载帮你在视频消失之前把它离线保存到本地硬盘一次还能批量处理一整串链接。先花三分钟看懂它到底在忙什么HLS 视频和普通 MP4 最大的区别在于它不给你一个完整文件而是给一份菜单m3u8 播放列表加一堆小碎片TS 分片。m3u8_downloader 做的事可以压缩成三句人话点菜先下载 m3u8 播放列表读出所有 TS 分片的地址。遇到多级码流同一视频有多个清晰度时它会自动向下钻进真正的分片列表。端盘子开一个线程池几十个线程同时拉取分片谁先下载完谁接着下一个。分片按00000001.ts、00000002.ts这样的编号暂存在 cache 目录。拼装所有分片到齐后按顺序合并再用项目自带的 FFmpeg 封装成 mp4。中间还藏着一个容易被忽略的环节——解密。很多视频会加一层 AES-128 加密密钥 URL 就写在 m3u8 文件里。工具会先下载密钥再在合并时逐片解密你最终拿到的是正常可播放的视频。m3u8 播放列表 → TS 分片 × N → 并行下载 → 解密合并 → MP4跑起来只差这三步第一步拿到项目。克隆这个仓库FFmpeg 可执行文件已经放在lib/目录里了不用额外折腾git clone https://gitcode.com/gh_mirrors/m3/m3u8_downloader第二步装依赖。项目基于 Python 3安装这几个库即可pip install m3u8 pycryptodome requests threadpool beautifulsoup4第三步准备一份购物清单。新建一个UTF-8 编码的 txt 文件每行写视频名称|m3u8链接Python入门课第01讲|https://example.com/course/01/index.m3u8 Python入门课第02讲|https://example.com/course/02/index.m3u8然后打开 m3u8_downloader.py把顶部配置区的几个路径改成你自己的m3u8InputFilePath D:/input/m3u8_input.txt # 购物清单 saveRootDirPath D:/output # 视频保存目录 errorM3u8InfoDirPath D:/output/error.txt # 失败任务记录 processCountConf 50 # 同时下载的线程数有一点要特别提醒请直接在终端里执行python m3u8_downloader.py别在 PyCharm 这类 IDE 里运行——不是会出错而是那个会实时刷新的动态进度条在 IDE 里显示不出来少了灵魂。第一次下载你会看到什么工具是纯命令行程序一次下载的完整流程在屏幕上非常透明Python入门课第01讲 开始下载: 1、开始下载m3u8... https://.../index.m3u8 下载成功 2、开始下载key... key 9f8d7c6b... 3、开始下载ts... 132/132 ■■■■■■■■■■■■■■■■■■■■■■■■□□□□ 93.18% 2.41MiB/s每一行对应一个明确的动作m3u8 有没有拿到、密钥是否下载成功、分片还剩多少。进度条右侧是实时网速单位会在 MiB/s、KiB/s 之间自动切换。TS 分片走的是无限重试直到成功的策略某个分片抽风了它会自己反复重试不轻易放弃。分片全部到位后工具先合并出临时文件再交给lib/里的 FFmpeg 转成 mp4。转换用的是-vcodec copy -acodec copy相当于只换容器不重新编码速度几乎等于直接复制。整个过程写满了cache/log.log出问题也好回溯。网速不同线程数该怎么调processCountConf是唯一值得反复调的参数它决定同时有几个分片在飞。给一份实测经验区间你的网络建议线程数备注手机热点 / 低速宽带10~20线程太多反而互相抢带宽普通家用宽带20~40稳妥CPU 基本无感高速光纤 / 服务器40~60注意目标站点的并发限制至于m3u8TryCountConf默认 10控制的是 m3u8 文件和密钥的下载重试次数除非网络极其不稳定一般不用动。报错急救清单现象大概率原因处理办法提示输入文件不存在路径写错改成 txt 的实际绝对路径m3u8 反复下载失败链接失效或站点限流换有效链接稍后再试key 下载失败密钥地址不可公开访问确认链接有效性分片一直重试网络抖动或连接超时降低线程数让单线程更稳转 mp4 失败FFmpeg 平台不匹配检查lib/下的二进制是否可执行下载失败的链接会以名称,url的格式追加进 error.txt全部跑完后照着补一轮即可。它适合谁以及一句重要提醒想存几节网课、留几场技术会议回放、给论文保存一段讲座视频的同学这个项目几乎是零学习成本。它同时也是一份很棒的 HLS 协议教材打开 m3u8_downloader.py逐行看它怎么解析播放列表、怎么用 Crypto 库做 AES 解密、怎么用线程池调度几十个下载任务比读十篇协议文档都直观。最后是绕不开的那句提醒工具本身没有善恶请只下载你拥有合法访问权限的内容且仅用于学习、备份等个人用途。别拿它去抓付费墙后面的东西也别忘了——网课虽好看进脑子才是真的存下了。【免费下载链接】m3u8_downloaderm3u8HLS流下载实现了AES解密、合并、多线程、批量下载项目地址: https://gitcode.com/gh_mirrors/m3/m3u8_downloader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考