M3U8 转 MP4 示意图

为什么 M3U8 需要“转换”而不是直接另存为文件?

当你在播放一个 M3U8 流媒体时,浏览器背后实际上在不断地请求一个又一个的 .ts 数据包,然后即时解码播放。这些片段:

  • 格式是 MPEG-2 Transport Stream(.ts)
  • 大小通常是 2-10 秒的视频
  • 无法直接用大多数播放器播放(格式不被广泛支持)

要获得一个可在任何设备播放的视频,需要:

  1. 下载所有 .ts 片段
  2. 将它们按顺序合并
  3. 重新封装成 .mp4 容器(可选:重新编码转换编码格式)

M3U8 的两层结构

在开始下载前,必须理解 M3U8 可能有两层:

Master Playlist(主播放列表)

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=2800000,RESOLUTION=1280x720
720p/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1400000,RESOLUTION=854x480
480p/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=700000,RESOLUTION=640x360
360p/index.m3u8

这个文件本身不含片段,只列出不同画质的 Media Playlist 路径。

Media Playlist(媒体播放列表)

#EXTM3U
#EXT-X-TARGETDURATION:6
#EXT-X-VERSION:3
#EXTINF:6.006,
segment-001.ts
#EXTINF:6.006,
segment-002.ts
...
#EXT-X-ENDLIST

这才是实际包含 .ts 片段路径的列表。

转换方法详解

方法一:FFmpeg -c copy(直接重封装,最快)

ffmpeg -i "https://stream.example.com/720p/index.m3u8" \
       -c copy \
       -movflags +faststart \
       output.mp4

说明: - -c copy:不重新编码,直接把 TS 的 H.264 + AAC 数据重新封装到 MP4 容器 - -movflags +faststart:将 moov atom 移到文件开头,让 MP4 支持边下载边播(流媒体友好) - 速度极快,几乎无 CPU 消耗,输出大小与原始几乎相同

方法二:FFmpeg 重新编码(降低大小)

ffmpeg -i "https://stream.example.com/720p/index.m3u8" \
       -c:v libx264 -crf 23 -preset medium \
       -c:a aac -b:a 128k \
       output.mp4

说明: - 适合需要压缩原本高 bitrate 视频的情况 - CRF 值越低品质越好,文件越大(建议 18-28) - 速度比 -c copy 慢许多,需要 CPU 重新编码

方法三:浏览器端 FFmpeg.wasm(免安装)

本站的 HLS 研究工具 在浏览器内执行 FFmpeg.wasm 完成合并,等同于在浏览器里执行:

ffmpeg -f concat -safe 0 -i concat.txt -c copy output.mp4

适用场景: 临时需要合并少量公开链接,不想安装任何软件时。

转换工具比较

工具 安装需求 速度 CORS 限制 适合对象
FFmpeg 命令行 需安装 ★★★★★ 可绕过 开发者、技术用户
VLC 需安装 ★★★ 可绕过 一般用户
浏览器工具(本站) 免安装 ★★★ 受限制 快速测试
在线转换网站 免安装 ★★ 多有支持 非技术用户

常见问题

转换后视频没有声音?

通常是因为音频轨道是 AC-3(Dolby) 格式,部分 MP4 播放器不支持。解法:

ffmpeg -i input.m3u8 -c:v copy -c:a aac output.mp4

强制将音频转码为 AAC 即可解决。

视频不同步(音画不同步)?

若出现音画不同步,通常是 TS 片段的 PTS/DTS 时间戳有跳动。加上 -async 1 或使用 -fflags +genpts 重新生成时间戳:

ffmpeg -fflags +genpts -i input.m3u8 -c copy output.mp4

M3U8 加密了怎么办?

若 M3U8 内有 #EXT-X-KEY:METHOD=AES-128,URI=...,代表片段加密。FFmpeg 能自动处理 AES-128,但 DRM(如 Widevine、FairPlay)是硬件级保护,目前没有公开工具能处理。

更多加密详情:M3U8 加密与 DRM 完整解析

相关资源

想立即测试您的 M3U8 链接吗?

🚀 立即测试 M3U8 在线播放器