FFmpeg:把 M3U8 转成 MP4(覆盖各种情况的命令)
安装 FFmpeg
FFmpeg 是一个免费的命令行工具,一步下载并转换 HLS。先安装它:macOS 用 brew install ffmpeg,Windows 从官网下载(或 winget install ffmpeg),Linux 用你的包管理器(如 apt install ffmpeg)。然后在终端运行下面的命令。不想安装?跳到最后的浏览器方法。
一旦跑通,把成功路径写下来——URL 模式、工具与参数——以免团队下一个人在截止日期前再次踩到同样的 CORS 或鉴权失败。
基本转换(无损流复制)
这是你最常用的命令——它下载流并重封装为 MP4 而不重新编码:
ffmpeg -i "https://example.com/stream.m3u8" -c copy -bsf:a aac_adtstoasc output.mp4
-c copy 原样复制流(快且无损);-bsf:a aac_adtstoasc 在从 TS 容器移到 MP4 时修复 AAC 音频。当流已经是 H.264/AAC 时有效——大多数都是。
为兼容性重新编码
如果流用了你需要改变的编码(如 HEVC → H.264),重新编码:
ffmpeg -i "https://example.com/stream.m3u8" -c:v libx264 -crf 23 -c:a aac output.mp4
-crf 23 设置画质(越低越好,18–23 是好范围),libx264 产出广泛兼容的 H.264。这更慢、吃 CPU,但最大化兼容性。
常见 FFmpeg 选项解释
| 选项 | 作用 |
|---|---|
-c copy | 重封装而不重新编码(无损、快) |
-c:v libx264 | 把视频重新编码为 H.264 |
-crf 23 | 重新编码的画质级别 |
-bsf:a aac_adtstoasc | 为 MP4 修复 AAC 音频 |
-ss / -t | 裁剪:起始时间/时长 |
传递请求头和认证
有些流需要 referer 或 user-agent 头。用 -headers 或 -user_agent 传递:
ffmpeg -user_agent "Mozilla/5.0" -headers "Referer: https://example.com" -i "URL" -c copy output.mp4
这相当于浏览器发送那些头的 FFmpeg 版本,能解决很多 403/禁止错误。
只提取音频
只抓取音频为 MP3:
ffmpeg -i "URL" -vn -c:a libmp3lame -q:a 2 audio.mp3
-vn 去掉视频,libmp3lame 编码 MP3。对播客或音乐流有用。见从 M3U8 提取音频。
排查常见 FFmpeg 错误
- 403 Forbidden——如上添加
-headers/-user_agent。 - Non-monotonous DTS / 封装警告——通常无害;文件仍能播放。
- Invalid data / 解封装错误——URL 可能过期;换个新的。
- 音画不同步——试试重新编码而非
-c copy。
没有 FFmpeg?用浏览器转换器
如果你不想安装 FFmpeg,我们的 M3U8 转 MP4 转换器就在你浏览器里运行 FFmpeg(编译为 WebAssembly)——同一个引擎,无终端、无安装,也不上传任何东西。
端到端 HLS → MP4 流水线
分阶段思考:发现列表 URL → 从主列表选择 rendition → 拉取媒体分片 → 需要时解密 → 重封装或重编码为 MP4 → 在目标设备验证播放。跳过验证会让静音音轨映射与坏时间戳溜进归档。
在线工具把 2–5 步收成点播一键。CLI 暴露每步以便自动化。混合:用 播放器 做发现/选择,用 转换器 做一次性重封装,生产用 FFmpeg。完整方法:如何把 M3U8 转成 MP4。
编码现实检查
直播 HLS vs 点播转换
点播列表有限,适合转换。直播列表描述滑动窗口——只有连续录制或提供方发布会后点播资产时,“转完整场”才成立。不要指望免费一键转换器冻结 6 小时直播,除非它实际上在随时间录制。
只监控不保存时用播放器。授权归档已结束活动时,等 VOD m3u8 或用带清晰留存策略的桌面录制。法律:只转换你有权归档的内容。
真实任务的复制粘贴配方
仅在你有权处理的流上把这些当起点:
点播重封装 MP4:ffmpeg -i "https://example.com/master.m3u8" -c copy -bsf:a aac_adtstoasc -movflags +faststart out.mp4
强制某一视频档(主列表选择混乱时):直接打开该码率媒体列表 URL,而不是主列表。
带 Referer:ffmpeg -headers "Referer: https://origin.example/
" -i "URL" -c copy out.mp4
时间范围(秒):ffmpeg -ss 00:01:00 -i "URL" -t 00:02:00 -c copy clip.mp4
URL 务必加引号。Windows PowerShell 下优先 cmd 或仔细转义。重封装后先打开文件再删源。
何时更该用浏览器
画质、合法性与运维卫生
默认 -c copy,避免凭空掉画质。只在有明确目标(设备兼容、体积上限)时重编码。在归档旁记录命令、日期与源 URL 模板。不要脚本化下载你无权保留的内容。
若 FFmpeg 报编码不匹配或 ADTS AAC,上面的码流过滤与重编码示例通常能清掉。若列表是 403,先修鉴权再调编码——没有参数能修好被禁止的 URL。
FFmpeg vs 在线工具——诚实分工
FFmpeg 赢在控制力、可重复性,以及绕过浏览器 CORS。在线客户端工具赢在可及性:免安装、可视化进度、对非工程师更友好。没有绝对“更好”。既提供免费网页工具又文档化 FFmpeg 的站点(如本站),能在标签页失败时给用户升级路径,而不是死胡同。
若只记一条命令,记带 -c copy 与 +faststart 的重封装。若只收藏一页,在锁定笔记本上应急时收藏免费转换器。两者结合:转换器 服务人类工作流速度,FFmpeg 服务生产。更多:最佳转换器、转换器 vs 下载器。
常见问题解答
把 M3U8 转成 MP4 的 FFmpeg 命令是什么?
无损复制用 ffmpeg -i "url" -c copy output.mp4。
为什么加 -bsf:a aac_adtstoasc?
它在从 TS 移到 MP4 时修复 AAC 音频。
怎么修 403 错误?
传递所需的 -headers 或 -user_agent。
不安装 FFmpeg 能转换吗?
能——用我们的浏览器转换器(ffmpeg.wasm)。