← Blog.backToBlog

用 FFmpeg 把 M3U8 转成 MP4:完整指南

8 min read

基本 FFmpeg M3U8 转 MP4 命令

标准无损命令:

ffmpeg -i "https://example.com/stream.m3u8" -c copy -bsf:a aac_adtstoasc output.mp4

FFmpeg 下载播放列表中的每个片段、拼接并写入 MP4,不重新编码。速度主要受网络限制;画质与源一致。更想用浏览器工具?用我们免费的 M3U8 转 MP4 转换器(ffmpeg.wasm,免安装)。

理解这些参数

参数含义
-i输入(M3U8 URL 或文件)
-c copy流复制——不重新编码
-c:v libx264视频重编码为 H.264
-c:a aac音频重编码为 AAC
-bsf:a aac_adtstoasc从 TS 进 MP4 时修复 AAC
-crf 23重编码画质(越低越好)

为兼容性重新编码

若流复制失败(编码不适合 MP4),重新编码:

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

更慢、更吃 CPU,但兼容性最好。画质技巧:高质量 M3U8 转 MP4

选择画质级别

多码率主列表先检查再映射:

ffmpeg -i "https://example.com/master.m3u8"
ffmpeg -i "https://example.com/master.m3u8" -map 0:v:0 -map 0:a:0 -c copy output.mp4

-map 0:v:0 通常选最高视频变体;增大索引可选更低档。

请求头与认证

部分 CDN 需要 User-Agent 或 Referer:

ffmpeg -user_agent "Mozilla/5.0" -headers "Referer: https://example.com" -i "URL" -c copy output.mp4

这能修复许多 403,而无需改流本身。

常见问题排查

  • Protocol not found——加 -protocol_whitelist file,http,https,tcp,tls,crypto
  • Invalid data——在 -i 前试 -allowed_extensions ALL
  • Operation not permitted / 密钥错误——流可能已加密;密钥须可达。
  • 无音频——用 -map 0:a 显式映射音频。

更多命令:FFmpeg HLS 命令参考

常见问题解答

M3U8 转 MP4 最好的 FFmpeg 命令是什么?
无损复制用 ffmpeg -i "url" -c copy -bsf:a aac_adtstoasc out.mp4

为什么用 aac_adtstoasc?
从 TS 重封装进 MP4 时修复 AAC 码流布局。

不安装 FFmpeg 能转换吗?
能——用我们的浏览器转换器

-c copy 会掉画质吗?
不会——它只是重封装,不重新编码。