FFmpeg M3U8转换完整教程
发布于 2026-01-12
FFmpeg是最强大的开源视频处理工具,本教程将教你如何使用FFmpeg将任意视频转换为M3U8/HLS格式。
📦 安装FFmpeg
🍎 macOS
brew install ffmpeg🐧 Ubuntu/Debian
sudo apt update && sudo apt install ffmpeg验证安装:
ffmpeg -version🎬 基础转换命令
最简单的转换
ffmpeg -i input.mp4 \ -codec: copy \ -start_number 0 \ -hls_time 10 \ -hls_list_size 0 \ -f hls \ output.m3u8
参数说明:
- •
-i input.mp4- 输入文件 - •
-codec: copy- 直接复制编码,不重新编码 - •
-hls_time 10- 每个片段10秒 - •
-hls_list_size 0- 保留所有片段 - •
-f hls- 输出HLS格式
重新编码转换(推荐)
ffmpeg -i input.mp4 \ -c:v libx264 -crf 23 -preset medium \ -c:a aac -b:a 128k \ -hls_time 6 \ -hls_playlist_type vod \ -hls_segment_filename "segment_%03d.ts" \ output.m3u8
📊 多码率自适应(ABR)
为了让播放器根据网络状况自动切换画质,需要生成多个码率版本:
生成多码率版本
# 360p ffmpeg -i input.mp4 -vf scale=640:360 -c:v libx264 -b:v 800k \ -c:a aac -b:a 96k -hls_time 6 -hls_playlist_type vod \ -hls_segment_filename "360p_%03d.ts" 360p.m3u8 # 720p ffmpeg -i input.mp4 -vf scale=1280:720 -c:v libx264 -b:v 2800k \ -c:a aac -b:a 128k -hls_time 6 -hls_playlist_type vod \ -hls_segment_filename "720p_%03d.ts" 720p.m3u8 # 1080p ffmpeg -i input.mp4 -vf scale=1920:1080 -c:v libx264 -b:v 5000k \ -c:a aac -b:a 192k -hls_time 6 -hls_playlist_type vod \ -hls_segment_filename "1080p_%03d.ts" 1080p.m3u8
创建主播放列表
手动创建 master.m3u8 文件:
#EXTM3U #EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360 360p.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=2800000,RESOLUTION=1280x720 720p.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080 1080p.m3u8
🔐 AES-128加密
加密可以保护视频内容,防止未授权下载。但请注意,这只是基础保护,专业用户仍可能绕过。
1. 生成密钥
openssl rand 16 > encrypt.key2. 创建密钥信息文件
创建 encrypt.keyinfo:
https://your-server.com/encrypt.key encrypt.key
3. 加密转换
ffmpeg -i input.mp4 \ -c:v libx264 -c:a aac \ -hls_time 6 \ -hls_key_info_file encrypt.keyinfo \ -hls_playlist_type vod \ encrypted.m3u8
⚠️ 常见问题
音视频不同步
解决方案:添加 -async 1 参数
ffmpeg -i input.mp4 -async 1 ...片段时长不准确
解决方案:强制关键帧间隔
-force_key_frames "expr:gte(t,n_forced*6)"转换速度太慢
使用 -preset ultrafast(牺牲质量换速度)或启用硬件加速(如 -c:v h264_nvenc)
⭐ 推荐设置
| 分辨率 | 视频码率 | 音频码率 | 适用场景 |
|---|---|---|---|
| 360p | 600-800 kbps | 64-96 kbps | 移动网络 |
| 480p | 1000-1500 kbps | 96-128 kbps | 普通WiFi |
| 720p | 2500-4000 kbps | 128 kbps | 高速网络 |
| 1080p | 4500-6000 kbps | 192 kbps | 光纤宽带 |