为什么需要把 M3U8 转为 MP4?
M3U8 是流媒体播放列表,视频内容被分割成数十甚至数百个 .ts 片段存储在服务器上。这种格式虽然适合在线播放,但存在明显不便:无法直接导入剪辑软件、不能在没有网络的环境播放、不方便长期存档。转换为单一 MP4 文件可以解决这些问题。
方法一:StreamFlow 在线转换器(推荐)
访问 StreamFlow 转换页面,全程在浏览器内完成,视频数据不经过任何服务器。
- 复制目标视频的 M3U8 链接(通常以 .m3u8 结尾)
- 粘贴到输入框,设置输出文件名
- 选择并发数(推荐 5,网速好可选 8)
- 点击「开始转换」,等待下载和合并完成
- 点击「下载 MP4」保存到本地
方法二:FFmpeg 命令行
FFmpeg 是最通用的视频处理工具,一行命令即可完成转换:
# 最简单的转换命令(直接复制流,不重新编码,速度最快)
ffmpeg -i "https://example.com/video/index.m3u8" -c copy output.mp4
# 如果音频出现问题,加上 aac 修复参数
ffmpeg -i "https://example.com/video/index.m3u8" -c copy -bsf:a aac_adtstoasc output.mp4
# 需要重新编码(改变分辨率或格式时使用)
ffmpeg -i "https://example.com/video/index.m3u8" -c:v libx264 -c:a aac output.mp4
方法三:N_m3u8DL-RE(最快速)
这是专门为 M3U8 下载设计的开源工具,支持多线程并发下载,速度比 FFmpeg 快很多:
# 基本用法
N_m3u8DL-RE "https://example.com/video/index.m3u8" -sv best
# 指定保存路径和文件名
N_m3u8DL-RE "https://example.com/video/index.m3u8" -sv best --save-dir ./videos --save-name output
下载地址:github.com/nilaoda/N_m3u8DL-RE,支持 Windows、Linux、macOS。
三种方法对比
| 方法 | 难度 | 速度 | 支持加密 | 适合人群 |
|---|---|---|---|---|
| StreamFlow 在线 | ⭐ 最简单 | 中等 | ✗ | 普通用户 |
| FFmpeg | ⭐⭐ 中等 | 中等 | ✓ | 开发者/高级用户 |
| N_m3u8DL-RE | ⭐⭐ 中等 | 最快 | ✓ | 有下载需求的用户 |
- CORS 错误:目标服务器禁止跨域请求,浏览器工具无法下载。改用 FFmpeg 命令行(它不受 CORS 限制)
- 部分片段下载失败:StreamFlow 会跳过失败片段继续合并,最终视频会有短暂黑屏或跳帧,正常现象
- 视频有画面但没有声音:FFmpeg 转换时加上
-bsf:a aac_adtstoasc参数修复 AAC 音频头 - 进度卡在某个百分比不动:某个片段下载超时,可以降低并发数重试,或稍后网络好时再试
- 文件很大但时长很短:可能下载了主播放列表而非实际视频,检查 M3U8 链接是否正确