m3u8d:一个不用装 ffmpeg 就能下载合并视频的开源工具
m3u8d:一个不用装 ffmpeg 就能下载合并视频的开源工具
下载 m3u8 视频这事,说简单也简单,说麻烦也麻烦。常见的方案是装个 ffmpeg,再配合下载工具操作。但对于只想下个视频的人来说,为了一个文件去配环境、装依赖,确实有点重。
最近看到一个开源项目 m3u8d,解决的就是这个痛点——不用装 ffmpeg,下载完自动合并成 mp4。

为什么不需要 ffmpeg
m3u8d 用了一个叫 gomedia 的纯 Go 库来做 ts 到 mp4 的格式转换。Go 代码跨平台编译方便,最终二进制体积也小——Linux 和 Mac 的命令行版本才 5-7MB。Windows 版因为有 Qt 界面打包进来,体积在 26MB 左右。
对比一下旧方案:以前 v1.1 版本依赖静态编译的 ffmpeg 二进制,每个版本比现在大 25MB 左右,而且找不到 mipsle 路由器版本的 ffmpeg 静态编译包。
另外 ffmpeg 是 GPL 协议,有传染性。用了 gomedia(MIT 协议),整个项目除了 Qt 界面部分外都可以走 MIT 协议开源。
支持哪些平台
Windows 有图形界面(Qt),Mac 有命令行和图形界面,Linux 支持命令行。Linux 那边还覆盖了 arm、386、mipsle 架构——意味着在路由器上也能跑。

实际怎么用
基础用法是 m3u8d download -u <m3u8_url> 直接下载。
有个 curl 模式值得提一下——把 Chrome 里复制出来的 cURL 请求粘贴进去,工具会自动解析出请求头、Cookie 等信息。有些网站的视频需要登录才能看,或者要验证 Referer、User-Agent 之类的头信息,靠普通下载链接搞不定,这种情况下 curl 模式就能用上。
批量下载支持从 txt 文件读取多个 URL,每行一个,也支持指定文件名。还支持自动搜索——如果给的不是 m3u8 链接,工具会先下载页面,自动找出里面的 m3u8 地址。
其他功能包括:AES 加密视频下载、代理设置(http/socks5)、按编号或 HTTP 状态码跳过特定 ts 分段、嵌套 m3u8 支持、下载速度显示等。
一个细节:ts 合并的质量处理
ts 文件合并时有个实际的问题:不同分段的视频分辨率、帧率可能不一样。第一个文件是 1920x1080,第二个变成 800x600,直接合并的话最终的 mp4 会播不了。
m3u8d 的处理方式是分析第一个 ts 文件的分辨率和帧率,后续文件如果不一致就不合并不一致的段落。虽然不是完美方案,但至少保证输出的文件能正常播放。
适合谁用
如果你是这么几种情况,可以试试:
- 经常要下载在线视频,但不想在电脑上装 ffmpeg
- 需要在路由器或者 Linux 服务器上下载 m3u8 视频
- 遇到需要带 Cookie、Referer 才能下载的受限视频
- 批量下载多个 m3u8 流
项目地址在 GitHub 上可以直接搜到,MIT 协议(Qt 界面部分 GPL v3),代码随便改。
地址在 GitHub 上可以直接搜到,MIT 协议(Qt 界面部分 GPL v3),代码随便改。
更多推荐
所有评论(0)