← Blog.backToBlog

FFmpeg:把 M3U8 转成 MP4(覆盖各种情况的命令)

8 min read

安装 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 是 H.264 + AAC,重封装进 MP4 很干净。HEVC/H.265 或 AV1 可能在现代浏览器能播,重封装后却在旧手机失败——那时再重编码为 H.264。多音轨/多字幕 HLS 在 FFmpeg 里可能需要显式 map;朴素免费工具可能只保留第一组音频。

若剪辑软件抱怨“可变帧率”或缺少 moov,用 -movflags +faststart 再封装,或用恒定帧率设置重编码。画质深入:高质量,4K:4K

直播 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 或仔细转义。重封装后先打开文件再删源。

何时更该用浏览器

对人来说,FFmpeg 并不总是到达成品的最快路径。若不熟终端、只是一次性归档短授权点播,且 CORS 允许浏览器拉取,则 在线转换器下载器 就够。需要请求头、自动化、直播录制窗口,或浏览器失败时再用 FFmpeg。

许多团队的混合流:制作先试网页工具;运维在 runbook 为同一 CDN 写一条 FFmpeg。相关:方法总览HLS 转 MP4免上传

画质、合法性与运维卫生

默认 -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)。