M3U8 是什么?如何使用 FFmpeg 分割 MP4 制作 M3U8 播放列表

怎样使用 FFmpeg 把一个 MP4 视频分割成若干个 TS 视频切片并生成 M3U8 文件?使用 FFmpeg 将 MP4 视频转换为 TS 切片并生成 M3U8 播放列表,主要有两种常用的命令行处理方式。您可以根据具体需求选择最合适的方法。

M3U8 是什么文件?

M3U8 本质上是一个基于纯文本的媒体播放列表文件,它是 HTTP Live Streaming(HLS)协议的核心组成部分。

需要特别明确的是,M3U8 文件本身并不包含任何实际的音视频数据。

你可以把它想象成一份"视频播放清单"或"导航图",它通过一系列指令,告诉播放器去哪里获取视频片段、片段的播放顺序以及每个片段的时长等信息。

方法一:单步直接转换

如果您希望一步到位完成转换,可以使用以下命令。这种方式无需生成中间文件,效率较高:

ffmpeg -i input.mp4 -c:v copy -force_key_frames "expr:gte(t,n_forced*2)" -hls_time 2 -hls_segment_filename %d.ts -f hls output/playlist.m3u8

核心参数说明:

-c:v copy:复用原始视频编码,不进行重新转码,速度极快。

-force_key_frames:强制设置关键帧间隔,使其与切片时长相匹配。

-hls_time 2:设置每个 TS 切片的时长(此处为 2 秒,可根据需要调整)。

-hls_segment_filename %d.ts:设置生成的 TS 文件命名格式。

-f hls:指定输出格式为 HLS(HTTP Live Streaming)。

方法二:两步高效转换

如果您需要更精细的控制,或者单步转换遇到兼容性问题,可以分两步进行:

第一步:将 MP4 无损转换为 TS 格式

ffmpeg -y -i input.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb output.ts

-vbsf h264_mp4toannexb:这是关键步骤。MP4 容器使用 AVCC 格式,而 HLS 协议要求 TS 分片必须以起始码开头的 Annex-B 格式。此过滤器确保后续生成的切片能被标准播放器正确识别,避免黑屏或卡顿。

第二步:将 TS 文件切片并生成 M3U8

ffmpeg -i output.ts -c copy -map 0 -f segment -segment_list output.m3u8 -segment_time 8 output%04d.ts

-segment_time 8:设定每个切片的时长为 8 秒。

-segment_list output.m3u8:指定生成的 M3U8 播放列表文件名。

除了使用命令行,如果您不熟悉终端操作,也可以使用带有图形用户界面(GUI)的软件。这类软件通常只需添加视频素材并勾选"生成 m3u8"选项,即可自动完成按段落或时长的分割与索引生成,支持批量处理,操作更为直观。

相关推荐
可乐鸡翅yeah_1 天前
HLS视频编码兼容性全解,H.264/H.265流媒体浏览器适配排错实战
音视频·firefox·safari·m3u8
可乐鸡翅yeah_1 天前
HLS流媒体首屏起播慢深度优化,从分片、索引、播放器全链路调优
开发语言·javascript·ecmascript·m3u8·m3u8在线
可乐鸡翅yeah_5 天前
hls.js 播放质量埋点实战,采集卡顿、起播、错误指标定位线上用户问题
开发语言·前端·javascript·ecmascript·音视频·m3u8·音视频在线播放
可乐鸡翅yeah_6 天前
MPEG‑TS 分片 PTS/DTS 时间戳异常排错,HLS 音画不同步定位实战
运维·测试用例·音视频·媒体·m3u8
可乐鸡翅yeah_6 天前
HLS CORS 跨域问题完整排查实战,解决 M3U8 与 TS 分片跨域报错
android·ios·音视频·m3u8·音视频在线播放
可乐鸡翅yeah_6 天前
多浏览器 HLS 兼容性差异排查,Chrome、Firefox、Safari 表现不一致定位
chrome·ffmpeg·音视频·firefox·safari·m3u8
可乐鸡翅yeah_7 天前
HLS 自动化拨测与手动调试分工,流媒体线上监控体系建设实践
运维·自动化·测试用例·音视频·媒体·m3u8·音视频在线播放
可乐鸡翅yeah_7 天前
M3U8测试流使用指南,流媒体开发自测与环境校验标准化方案
网络·ffmpeg·音视频·m3u8·m3u8在线·音视频在线播放