一条命令,把 M3U8 在线视频完整下载到本地:m3u8-downloader 快速上手
一条命令,把 M3U8 在线视频完整下载到本地:m3u8-downloader 快速上手
【免费下载链接】m3u8-downloader一个M3U8 视频下载(M3U8 downloader)工具。跨平台: 提供windows、linux、mac三大平台可执行文件,方便直接使用。项目地址: https://gitcode.com/gh_mirrors/m3u8d/m3u8-downloader
刷到一门很想收藏的网课,右键"另存为"却是灰色的;浏览器插件装了一圈,页面依旧纹丝不动——如果你经历过这一幕,那你多半撞上了 M3U8 格式的视频。m3u8-downloader 就是专门处理这种情况的跨平台下载工具:你只需给它一个 M3U8 链接,它会把解析、下载、解密、合并一整套流程包办到底,最后交给你一个能直接播放的 MP4 文件。无论你是学生、内容创作者,还是只想离线存点视频的普通用户,它都够用,而且不需要懂任何技术。
先搞清楚:M3U8 到底是个什么东西?
一句话:M3U8 不是视频,是一份"点菜单"。
在线视频网站为了播放流畅,会把一整部视频切成几百个小碎片(通常叫 TS 片段),每个碎片只有几秒钟。M3U8 文件记录的,就是这些碎片的地址清单和播放顺序。播放器拿着这份菜单,按顺序把碎片一个个取出来播放。
这就带来了两个让人头疼的事实:
- 你在浏览器里"另存为",存下来的只是那份菜单,不是视频。菜单本身打不开,也毫无用处。
- 视频被拆成了几百个文件,想手动一个个下载再拼起来?几百个请求、严格排序、还有可能碰到加密,普通人根本做不来。
更麻烦的是,很多平台的 TS 片段还做了 AES 加密(一种对视频内容加锁的算法),下载下来是一堆乱码,不先解密根本拼不出能看的画面。所以"M3U8 下载"这件事,天然就适合交给专门的工具来干。
拿到工具,只需两步
m3u8-downloader 最大的特点是零依赖:不需要装 Python、不需要装 ffmpeg(平时合并视频常用的那个大软件),它就是一个独立的可执行文件,下载下来就能跑。
项目已经为三大平台编译好了现成版本:
| 平台 | 可执行文件 |
|---|---|
| Windows | m3u8-windows-amd64.exe(另有 386 / arm64 版本) |
| macOS | m3u8-darwin-amd64 / m3u8-darwin-arm64 |
| Linux | m3u8-linux-amd64(另有 386 / arm64 版本) |
如果你习惯从源码自己编译,也可以:
git clone https://gitcode.com/gh_mirrors/m3u8d/m3u8-downloader cd m3u8-downloader go build -o m3u8-downloader上面这段命令在做的事:把项目源码克隆到本地,进入目录,用 Go 编译出一个名为 m3u8-downloader 的可执行文件。编译一次之后,这个文件可以拷到任何同平台的机器上直接用,再也不用重复编译。
第一次运行:一条命令,看完整套流程
工具到手,第一次使用只需要记住一个参数:-u,也就是 M3U8 链接。其余全部走默认值即可:
./m3u8-downloader -u="https://example.com/video/index.m3u8"这条命令在做的事:程序读取你给的 M3U8 链接,自动解析出所有 TS 片段,用默认的 24 个线程并发下载,下载完成后合并成 MP4,再顺手清理掉临时片段文件。
实际跑起来,终端里会看到这样的画面:
上图是一次真实下载过程:命令传入链接和输出文件名后,程序解析出 302 个 TS 片段,用 20 个线程并发下载,进度条实时刷新,最后合并输出成片。
注意动图里那几行提示,是工具启动时自己打印的,非常贴心:
[功能]:多线程下载直播流m3u8视屏 [提醒]:下载失败,请使用 -ht=v2 [提醒]:下载失败,m3u8 地址可能存在嵌套 [提醒]:进度条中途下载失败,可重复执行"下载失败就换 -ht=v2""地址可能有嵌套""失败可以重跑"——这些新手最容易踩的坑,工具在动手前就先提醒了一遍。这种"自报家门"的设计,对第一次用命令行的人特别友好。
那几秒里,工具替你干了四件脏活累活
按下回车,到屏幕出现[Success],中间发生了什么?拆开看是一条四步流水线:
解析 M3U8 菜单 → 多线程下载 TS 片段 → 遇到加密自动解密 → 按顺序合并成 MP4每一步都有值得说道的细节:
1. 解析。程序把 M3U8 文件内容里以#开头的注释行全部跳过,剩下的每一行就是一个 TS 片段地址,再按顺序编号。这正是成片画面顺序完全正确的保证。
2. 多线程下载。默认开 24 个并发任务同时拉取所有片段。动图里那个 302 个片段的视频,就是靠这种方式在几分钟内拉完的。每个片段下载失败还会自动重试 5 次,遇到网络抖动不至于前功尽弃。
3. 自动解密。如果 M3U8 菜单里带了#EXT-X-KEY这类加密标记,程序会自动去取密钥、用 AES-128-CBC 算法解密,全程不需要你参与。这正是"加密视频也能下"的秘密。
4. 合并与清理。所有片段按顺序拼接成一个文件。这里藏着一个容易被忽略的细节:有些 TS 片段开头混入了垃圾字节,直接拼接会导致成片卡顿甚至花屏,程序内置了同步字节(0x47)修复逻辑,先把这些杂字节裁掉再合并。合并完成后,临时片段目录默认自动删除,不留一地碎文件。
这意味着什么?对普通用户来说,就是"你只负责给链接,脏活累活它全包了"。想进一步了解实现的话,整个工具的核心逻辑其实只写在一个文件里:项目根目录的 m3u8-downloader.go,400 多行 Go 代码,读起来并不困难。
还有一个很实用的隐藏能力:重复执行就是断点续传。下载中途网络断了,或者进度条卡住不动,直接重新跑一遍同样的命令,已经下完的片段会被检测到并跳过,只补缺失的部分,不用从头再来。
⚙️ 进阶:8 个参数,每个都对应一种真实需求
除了必填的-u,其余参数都有用武之地,一张表说清楚:
| 参数 | 作用 | 默认值 | 什么时候用得着 |
|---|---|---|---|
-u | M3U8 链接地址 | 无(必填) | 每次下载都必须给 |
-o | 输出文件名(不带后缀) | movie | 想给成片起个有意义的名字 |
-n | 下载线程数 | 24 | 网速慢或服务器限流时调低 |
-ht | 片段地址拼接方式 v1 / v2 | v1 | 片段下载失败时切换试试 |
-c | 请求 Cookie | 空 | 下载需要登录才能看的内容 |
-r | 是否自动清理临时 TS 文件 | true | 想保留片段做调试时设为 false |
-s | 是否忽略 HTTPS 证书校验 | 0 | 自签名证书网站下载失败时设为 1 |
-sp | 保存路径(绝对路径) | 当前目录 | 想把视频存到指定文件夹 |
挑几个最容易用到的细说:
-o给成片起名。默认输出叫movie.mp4,下载多了根本分不清谁是谁。养成习惯,每次都给它起个名字:
./m3u8-downloader -u="https://example.com/video/index.m3u8" -o="Python入门课程01"这条命令在做的事:把视频保存为当前目录下的Python入门课程01.mp4,而不是一堆movie.mp4混在一起。
-n线程数是把双刃剑。默认 24 已经是速度与稳定性的平衡点。如果你的网速一般,或者视频网站对请求频率敏感(下载到一半开始大量失败),把它降到 8~12 反而更快,因为失败重试的次数变少了。反过来,网络环境好又想快点下完,适当调高也能明显提速。
-c解决"要登录才能看"的视频。从浏览器开发者工具里复制 Cookie,原样塞进去就行:
./m3u8-downloader -u="https://example.com/vip/video.m3u8" -c="sessionid=abc123; token=xyz"这条命令在做的事:携带你浏览器里那套登录凭证去请求视频,网站就会把"仅登录用户可见"的内容正常返回给你。
-ht是下载失败时的第一招。它控制的是片段地址怎么补全。v1以播放列表所在目录为基准拼接相对地址(绝大多数网站都是这种结构,所以它是默认值);v2以域名根目录为基准拼接。如果你遇到"菜单解析成功了,但下载的片段全是坏的",先试-ht="v2",很多时候问题就出在这一步。
🎬 完整实战:三步下载一个加密视频
把前面的内容串起来,走一遍完整流程。假设你现在有一个课程平台的视频,需要登录,内容还是加密的。
第一步,拿到 M3U8 链接和登录凭证。在浏览器里按 F12 打开开发者工具,切到"网络"面板,刷新页面播放视频,在请求列表里找到以.m3u8结尾的地址,右键复制。同一页面里找到 Cookie,一并复制备用。
第二步,组装命令并执行:
./m3u8-downloader -u="https://course.example.com/lesson5/index.m3u8" \ -o="第5课-进阶实战" -n=16 -c="sessionid=abc123" -sp="/Users/me/Videos"这条命令在做的事:登录状态下下载指定课程,用 16 个线程,成片保存到/Users/me/Videos目录,文件名是"第5课-进阶实战.mp4"。
第三步,等待并核对结果。终端会依次显示待下载片段数量、下载进度条、合并进度,最后出现:
[Success] 下载保存路径:/Users/me/Videos/第5课-进阶实战.mp4 | 共耗时: 42.5s到保存目录里找到这个文件,双击播放,一个完整的视频就归你了。
最容易卡住的 4 个问题,提前替你排雷
| 现象 | 原因与解法 |
|---|---|
| 提示 "Permission denied"(无运行权限) | Linux/macOS 下二进制文件默认不可执行,先chmod 0755 m3u8-linux-amd64再运行 |
| 片段下载大量失败,进度条不动 | 先试-ht="v2";不行就调低线程数-n=8;还不行就检查链接本身是否真实有效 |
| 下载了一堆文件但最后没有成片 | 很可能是 M3U8 存在二级嵌套(菜单套菜单)。目前版本需要手动提取内层地址,把-u换成内层菜单的链接再跑 |
| 合并出的文件某些播放器打不开 | 成片本质是拼接的 TS 流,虽然叫 .mp4 但部分软件不认,换 VLC、PotPlayer 这类播放器即可正常播放 |
其中第一条值得多说一句:Windows 用户直接运行.exe即可;Linux 和 macOS 用户第一次运行前,记得先给文件加执行权限:
chmod 0755 m3u8-linux-amd64这条命令在做的事:给二进制文件加上"可执行"权限。这是类 Unix 系统的基本规矩,不是工具本身的问题。
现在,轮到你动手了
回到开头那个画面——想收藏的课程、灰色的"另存为"、装了一堆却没用的插件。现在你知道了问题出在 M3U8 这种格式上,也知道了手里有了趁手的工具。
下一回再遇到"下不下来的在线视频",你只需要在终端里敲下这一行:
./m3u8-downloader -u="你的M3U8链接" -o="想存的名字"工具会替你搞定剩下的一切:解析、并发下载、自动解密、合并、清理。收藏再多在线课程,也不如本地躺着一个能随时双击的 MP4 来得安心。
先从一段几分钟的短视频试起,跑通一次只需要一条命令的成功。你会发现,那些"存不下来"的视频,其实离你只有一条命令的距离。
【免费下载链接】m3u8-downloader一个M3U8 视频下载(M3U8 downloader)工具。跨平台: 提供windows、linux、mac三大平台可执行文件,方便直接使用。项目地址: https://gitcode.com/gh_mirrors/m3u8d/m3u8-downloader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
