FFmpeg M3U8 转 MP4 教程【2025 完整指南】

2025 年实战教程,手把手教你使用 FFmpeg 将 HLS 播放列表保存为 MP4。

目录

简介

本教程将带你使用 FFmpeg 命令行工具,将 M3U8 或 HLS 播放列表转换为 MP4 文件。从环境安装、基础命令,到性能优化与故障排查,帮助你快速保存直播或点播流媒体内容。

前置条件

安装 FFmpeg

Windows

  1. 从 ffmpeg.org 下载最新版本。
  2. 将压缩包解压到 C:\\ffmpeg
  3. C:\\ffmpeg\\bin 添加到系统 PATH。

macOS

brew install ffmpeg

Linux(Ubuntu/Debian)

sudo apt install ffmpeg

基础转换命令

流复制(最快捷)

ffmpeg -i "https://example.com/playlist.m3u8" -c copy output.mp4

-c copy 选项会保留原始音视频编码,速度最快,前提是 MP4 容器能够兼容源流的编解码器。

重新编码(兼容性更好)

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

通过 H.264 视频和 AAC 音频重新编码,可在浏览器、智能电视和移动设备上获得最佳兼容性,但处理时间会比纯复制长。

高级选项

高质量输出

ffmpeg -i input.m3u8 -c:v libx264 -crf 18 -preset slow output.mp4

调整 -crf 值可以控制画质(值越低质量越高)。搭配慢速 preset,可在关注文件体积时提高压缩效率。

快速转换并修正音频

ffmpeg -i input.m3u8 -c copy -bsf:a aac_adtstoasc output.mp4

使用 aac_adtstoasc 比特流过滤器,可将 ADTS 格式的 AAC 音频转换为 MP4 支持的结构,无需重新编码。

自定义分辨率

ffmpeg -i input.m3u8 -s 1920x1080 -c:v libx264 -c:a copy output.mp4

借助 -s 参数将视频缩放到指定分辨率,同时保留原始音频流,适用于需要统一输出分辨率的场景。

常见问题与解决方案

CORS 跨域错误

为请求添加必要的 Header:

ffmpeg -headers "Referer: https://example.com" -i playlist.m3u8 -c copy output.mp4

协议不受支持

ffmpeg -protocol_whitelist file,http,https,tcp,tls -i playlist.m3u8 -c copy output.mp4

网络超时

ffmpeg -timeout 10000000 -i playlist.m3u8 -c copy output.mp4

批量转换脚本

Bash 脚本

#!/bin/bash
for file in *.m3u8; do
  ffmpeg -i "$file" -c copy "${file%.m3u8}.mp4"
done

Windows 批处理

for %%f in (*.m3u8) do ffmpeg -i "%%f" -c copy "%%~nf.mp4"

在线工具替代方案

不想使用命令行?试试我们的 在线 M3U8 转 MP4 工具,支持浏览器内转换、批量处理与进度追踪,无需安装。

常见问答

问:转换失败怎么办? 检查网络连通性、添加协议白名单,或确认流媒体没有 DRM 保护。

问:如何保持画质? 若目标设备支持原始编码,优先使用 -c copy 避免重新编码。

问:可以录制直播流吗? 可以,搭配 -t 3600 可限制录制时长为一小时。

总结

FFmpeg 功能强大且灵活,可满足各种 M3U8 转 MP4 场景。若希望更快速、免安装的方案,欢迎使用我们的 在线转换工具,直接在浏览器中完成任务。