m3u8-downloader 使用指南:一条命令完成 M3U8 视频下载与 MP4 合并
m3u8-downloader 使用指南:一条命令完成 M3U8 视频下载与 MP4 合并
【免费下载链接】m3u8-downloader一个M3U8 视频下载(M3U8 downloader)工具。跨平台: 提供windows、linux、mac三大平台可执行文件,方便直接使用。项目地址: https://gitcode.com/gh_mirrors/m3u8d/m3u8-downloader
当视频地址以.m3u8结尾时,你真正拿到手的只是一份"分片清单"——完整视频被拆成了几百个.ts小文件。m3u8-downloader 是一个用 Go 编写的命令行下载工具,它替你完成清单解析、多线程下载、AES 解密与自动合并,一条命令直接产出可播放的 MP4,Windows / Linux / macOS 全平台开箱即用。
一个 m3u8 地址背后发生了什么
把 m3u8 想成一张购物清单:每个条目对应一个真正的视频片段(.ts),播放器按清单顺序"取货"就能播完整部视频。麻烦在于,清单本身只是几 KB 的文本,真正的"货品"却散落在几百个独立请求里。手动处理的话,你得挨个保存、按序改名、再想办法把碎片拼起来——任何一个环节出错,视频就断在中间。
m3u8-downloader 和普通下载器的分工差别,看这张表最直观:
| 环节 | 手动或普通下载器 | m3u8-downloader |
|---|---|---|
| 拿到 m3u8 清单 | 只能存下一份几 KB 文本 | 自动解析出全部 ts 片段地址 |
| 下载几百个片段 | 逐个保存,漏一个就断 | 默认 24 线程并发下载,失败自动重试 |
| 加密片段 | 得到一堆无法播放的乱码 | 自动读取密钥并按 AES-128-CBC 解密 |
| 片段合并 | 需要额外安装 ffmpeg 等工具 | 下载完成后自动拼接,输出 .mp4 |
| 中断续传 | 大多从头再来 | 已下载片段跳过,重跑命令即可续传 |
值得一提的是,工具在合并前还会修正一个隐蔽问题:部分 ts 文件开头没有 0x47 同步字节(MPEG-TS 固定的帧头),直接拼接会导致播放器不认。工具会在落盘前定位并剔除多余字节,这也是它能稳定产出可播放 MP4 的原因之一。
三分钟拿到工具:二进制与源码编译任选
项目为三大平台各准备了预编译二进制,覆盖常见 CPU 架构,不装 Go 环境也能直接跑:
| 平台 | 文件 |
|---|---|
| macOS(Intel / Apple Silicon) | m3u8-darwin-amd64/m3u8-darwin-arm64 |
| Linux(386 / amd64 / arm64) | m3u8-linux-386/m3u8-linux-amd64/m3u8-linux-arm64 |
| Windows(386 / amd64 / arm64) | m3u8-windows-386.exe/m3u8-windows-amd64.exe/m3u8-windows-arm64.exe |
想自己编译同样简单,仓库是单文件工程,三步搞定:
git clone https://gitcode.com/gh_mirrors/m3u8d/m3u8-downloader cd m3u8-downloader go build -o m3u8-downloader编译产物与官方二进制的用法完全一致,Linux / macOS 记得先chmod 0755赋予执行权限。
最小案例:一条命令走完"解析 → 下载 → 解密 → 合并"
回放一个真实场景:你从浏览器 Network 面板复制到一个index.m3u8地址,接下来只需要这一行:
./m3u8-downloader \ -u=https://example.com/hls/index.m3u8 \ # 必填:M3U8 清单地址 -o=我的视频 \ # 可选:输出文件名,不用带后缀 -n=20 # 可选:并发线程数,默认 24终端会先打印功能说明和提醒,随后输出类似这样的关键信息:
待下载 ts 文件数量: 302—— 解析成功,共 302 个片段[Downloading] ■■■□□ 12.35% 00037.ts—— 进度条实时刷新,尾部数字是正在抓取的片段名[Merging]之后出现[Success] 下载保存路径:.../我的视频.mp4 | 共耗时: 68.32s—— 全部完成 ✅
片段按00001.ts、00002.ts这样的零填充命名落盘,顺序天然正确,合并时按序拼接即可;合并完成后工具默认清理临时 ts 目录,只留给你一个干净的 MP4 📦。
参数速查表:8 个参数各管什么事
默认情况下只需-u,其余参数在你遇到特定场景时才用得上:
| 参数 | 作用 | 典型场景与示例 |
|---|---|---|
-u | M3U8 清单地址 | 必填,如-u=https://example.com/a/index.m3u8 |
-o | 输出文件名(不带后缀) | 默认movie,如-o=纪录片第一集 |
-n | 并发下载线程数 | 默认 24;限速站点可降到 8~16 |
-ht | 片段地址的拼接方式 | v1拼上目录路径、v2只拼域名,默认v1 |
-c | 自定义请求 Cookie | 下载需登录的资源,如-c="sessionid=abc; token=xyz" |
-r | 合并后是否自动清理 ts | 默认true;想看中间产物可-r=false |
-sp | 文件保存的绝对路径 | 如-sp=/Users/me/videos或-sp=C:\videos |
-s | 是否忽略 TLS 证书校验 | 自签名证书站点可传-s=1 |
进阶玩法:批量、登录态与限速对抗
用脚本批量下载整个系列。课程类资源通常每集一个清单地址,套一层循环即可,配合-o自动命名:
for i in $(seq -w 1 30); do ./m3u8-downloader -u="https://example.com/lesson${i}/index.m3u8" -o="第${i}课" -n=16 done带登录态下载。部分站点需要鉴权,把浏览器里的 Cookie 原样搬过来即可:
./m3u8-downloader -u=https://example.com/live/index.m3u8 -c="sessionid=8f2a1b; uid=1024"主动调节并发对抗限速。默认 24 线程是为宽带充足的环境设计的。如果某站点开始频繁失败,通常是并发太高被限制,把-n降到 8 或 4 往往立竿见影;反过来,家里千兆带宽可以试试 32,让每个片段分到的带宽更饱和。
高频踩坑与修复手册
1. 全部片段都下载失败。最常见原因是片段地址拼接错误:-ht默认的v1会保留 m3u8 所在目录,而部分站点只接受纯域名。先切到-ht=v2重试,仍不行再切回v1,逐个验证即可。
2. 进度条走到一半中断。单个片段虽有 5 次自动重试兜底,网络波动下仍可能失败。此时原样重跑同一条命令就好——已落盘的片段会被跳过,相当于断点续传,不必从头再来。
3. Linux / macOS 提示 Permission denied。下载的二进制默认没有执行权限,执行chmod 0755 m3u8-linux-amd64(按实际文件名调整)即可。
4. 合并出的 MP4 播放器打不开。工具已内建 0x47 同步字节修复,绝大多数情况可直接播放;极少数异常可以加-r=false保留 ts 目录,再用 ffmpeg 手动合并,顺带排查是否为编码格式不被播放器支持。
5. m3u8 地址存在嵌套。清单里引用的可能不是.ts,而是另一个.m3u8(直播流常见)。这类二级清单建议先用脚本或文本编辑器转成直接指向.ts的一级清单,再交给工具处理。
写在最后
m3u8-downloader 的价值可以浓缩成一句话:把"解析清单、并发下载、加密解密、顺序合并"这四步体力活压缩成一条命令,让下载几百个分片变得和下载一个文件一样简单。想深入参数细节可以看仓库里的 README.md,想读懂实现原理就直接翻单文件源码 m3u8-downloader.go,整个下载流程不足三百行、注释清晰,也是学习 Go 并发与网络编程的现成范例。
最后提醒一句:请在拥有使用权的前提下下载和保存内容,尊重版权方与内容创作者,别让好工具用错了地方。
【免费下载链接】m3u8-downloader一个M3U8 视频下载(M3U8 downloader)工具。跨平台: 提供windows、linux、mac三大平台可执行文件,方便直接使用。项目地址: https://gitcode.com/gh_mirrors/m3u8d/m3u8-downloader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
