我们经常在浏览网页视频的时候试图下载,但是将文件打开后发现扩展名是 .m3u8,使得系统默认或是常见的播放器无法打开它,这时候就需要借助转码工具,我经过查找,发现大部分可以实现上述功能的软件需要收费,要么就是不好用,所以特别推荐大家使用FFmpeg
操作系统:macOS 15.3
设备:MacBook Air
什么是FFmpeg?
FFmpeg是一个开源跨平台的音视频处理工具,它可以用来录制、转换和流式播放音视频文件。FFmpeg支持多种音视频格式和编解码器,具有强大的功能和灵活性,被广泛应用于多媒体处理领域。它可以用于从视频中提取音频、将视频转换为不同的格式、进行视频剪辑和合并等操作。
什么是m3u8?
M3U8是一种音视频流媒体播放列表文件格式的扩展名。这种格式通常用于指定媒体文件的存储路径和播放顺序,常用于网络直播和视频点播服务中。M3U8文件可以包含多个媒体片段的链接地址,以及一些播放器需要的元数据信息。播放器可以根据M3U8文件中的内容逐个请求和播放这些媒体片段,从而实现较为灵活和高效的流媒体播放。
推荐使用 Homebrew 安装
Homebrew是 macOS 上最常用的包管理工具,安装 FFmpeg 非常方便。如果还没有安装可以看我的这一篇博客macOS包管理器HomeBrew的安装和使用(适合小白)-CSDN博客文章浏览阅读1k次,点赞18次,收藏16次。为什么 Mac 开发者离不开它?有人说:"没有Homebrew的Mac就像没有App Store的iPhone"https://blog.csdn.net/m0_74390545/article/details/147191631?fromshare=blogdetail&sharetype=blogdetail&sharerId=147191631&sharerefer=PC&sharesource=m0_74390545&sharefrom=from_link首先打开终端,在终端运行如下命令
brew install ffmpeg
如果需要更多编解码器(如 libx264、libvpx),可以安装完整版:
brew install ffmpeg --with-options
然后验证安装
运行以下命令检查 FFmpeg 是否安装成功:
ffmpeg -version
输出示例
成功安装的版本提示
我们选择直接复制流的方法(很快,不需要重新编码,适用于未加密的m3u8)
打开终端运行以下命令
ffmpeg -i "改成你的路径/输入文件名称.m3u8" -c copy -bsf:a aac_adtstoasc "改成你的路径/输出文件名称.mp4"
-i "输入.m3u8":指定 M3U8 文件或 URL。
`-c copy`:直接复制视频和音频流(不重新编码,速度极快)。
`-bsf:a aac_adtstoasc`:修复部分 M3U8 的 AAC 音频问题。
也可以输入网页的m3u8链接
记得改成你的路径/输入(输出)文件名称
这里举一个例子
我这里使用了一个名为test的m3u8文件,将它输出成了test1的mp4文件,输入和输出路径是一样的,都是桌面
输出成功:
我们就可以在指定的路径下看到视频啦
场景 | 命令示例 |
---|---|
基本转换 | `ffmpeg -i input.m3u8 -c copy output.mp4` |
重新编码 | `ffmpeg -i input.m3u8 -c:v libx264 -c:a aac output.mp4` |
加密流 | `ffmpeg -i encrypted.m3u8 -key "xxx.key" -c copy output.mp4` |
调整分辨率 | `ffmpeg -i input.m3u8 -vf "scale=1280:720" output.mp4` |
Tips:转换的时候推荐优先尝试 `-c copy` 直接复制,若失败再改用重新编码。遇到问题可检查 M3U8 文件是否完整或加密!
这里给大家提供一个shell脚本,亲测非常好用
首先创建脚本文件,打开终端运行如下指令
nano batch_convert.sh
粘贴以下脚本
-替换 `/path/to/your/m3u8_files` 为你的实际文件夹路径。
-如果文件是其他格式(如 `.ts`),将 `*.m3u8` 改为 `*.ts`。
#!/bin/bash
cd /path/to/your/m3u8_files
for file in *.m3u8; do
output="${file%.*}.mp4"
ffmpeg -i "$file" -c copy -bsf:a aac_adtstoasc "$output"
echo "已转换: $file → $output"
done
echo "批量转换完成!"
其中
#!/bin/bash
# 进入存放 M3U8 文件的目录
cd /path/to/your/m3u8_files
# 遍历所有 .m3u8 文件并转换
for file in *.m3u8; do
output="${file%.*}.mp4" # 生成对应的 MP4 文件名
ffmpeg -i "$file" -c copy -bsf:a aac_adtstoasc "$output"
echo "已转换: $file → $output"
done
echo "批量转换完成!"
然后保存并运行脚本
按 `Ctrl + O` 保存 → `Enter` → `Ctrl + X` 退出编辑器。
赋予脚本执行权限并运行:
chmod +x batch_convert.sh
./batch_convert.sh
这样我们就可以批量转化路径下的视频文件了
输出示例:
1. 文件名含空格或特殊字符
在脚本中用双引号包裹变量(如 `"$file"`),避免路径解析错误。
2. 部分文件转换失败
检查失败的 M3U8 文件内容是否完整(如 `.ts` 分片是否存在)。
尝试强制重新编码:
ffmpeg -i "$file" -c:v libx264 -c:a aac -crf 23 "${file%.*}.mp4"
3. 输出到指定文件夹,修改脚本中的输出路径:
output="/path/to/output/${file%.*}.mp4"
FFmpeg 是开源、跨平台的多媒体处理工具,支持几乎所有视频/音频格式的编解码,无需依赖第三方软件,通过命令行即可快速完成 M3U8 转 MP4,且支持直接复制流(`-c copy`)避免重新编码,转换速度极快,结合脚本(如 Shell、Python)轻松实现批量转换,显著提升效率,尤其适合处理大量直播录播文件。
FFmpeg 在 M3U8 转换中兼具速度、灵活性和可靠性,是开发者与普通用户处理流媒体文件的终极工具。
最后附上FFmpeg官网,方便深入学习和使用
FFmpeghttps://ffmpeg.org/希望这篇文章可以帮助你高效的完成视频转换,享受便捷效率的乐趣!