1. FFmpeg命令解读
ffmpeg
-i 1.mp4
-vf scale=720:1280
-c:a aac -ar 48000
-b:a 96k
-c:v h264
-profile:v main
-crf 23 -g 48
-keyint_min 48
-sc_threshold 0
-b:v 1200k
-maxrate 1300k
-bufsize 1800k
-hls_time 4
-hls_playlist_type vod
-hls_segment_filename ./m3u8/1/segment%03d.ts
./m3u8/1/1.m3u8
这是一个FFmpeg命令,用于将视频文件转换为HLS(HTTP Live Streaming)格式。我详细解释这个命令的各个部分:
命令结构分解
基本输入输出
-
ffmpeg -i 1.mp4- 输入文件 -
./m3u8/1/1.m3u8- 输出的HLS播放列表文件路径
视频处理参数
-
-vf scale=720:1280- 视频滤镜,将视频缩放为720×1280分辨率(竖屏视频比例9:16) -
-c:v h264- 视频编码器设置为H.264 -
-profile:v main- H.264编码配置文件设置为"main"级别 -
-crf 23- 恒定速率因子,控制视频质量(值越小质量越高,文件越大,23是常用值) -
-g 48- 关键帧间隔(GOP大小)为48帧 -
-keyint_min 48- 最小关键帧间隔为48帧 -
-sc_threshold 0- 禁用场景切换检测,强制使用固定的GOP结构 -
-b:v 1200k- 视频比特率设置为1200kbps -
-maxrate 1300k- 最大视频比特率限制为1300kbps -
-bufsize 1800k- 缓冲区大小设置为1800kbps,用于比特率控制
音频处理参数
-
-c:a aac- 音频编码器设置为AAC -
-ar 48000- 音频采样率设置为48kHz -
-b:a 96k- 音频比特率设置为96kbps
HLS特定参数
-
-hls_time 4- 每个视频片段的时长为4秒 -
-hls_playlist_type vod- HLS播放列表类型设置为VOD(Video On Demand,点播) -
-hls_segment_filename ./m3u8/1/segment%03d.ts- 指定视频片段文件的命名格式和路径
-hls_segment_filename ./m3u8/1/segment%03d.ts是FFmpeg命令中用于指定HLS视频片段文件命名和存储路径的参数。让我详细解释这个参数的各个部分:参数分解
./m3u8/1/segment%03d.ts
./m3u8/1/- 这是视频片段文件的存储目录路径
./表示从当前工作目录开始
m3u8/是m3u8文件夹
1/是以输入文件名($i变量,此处假设为"1")命名的子目录整体路径表示:当前目录下的m3u8文件夹中的"1"子文件夹
segment- 这是视频片段文件名的前缀,所有片段文件都以"segment"开头
%03d- 这是一个格式化占位符,用于生成递增的数字序列
%d表示整数
03表示数字占3位,不足时前面补零因此会生成:001, 002, 003, ... 这样的序列
.ts- 这是文件扩展名,表示这些是MPEG传输流文件(Transport Stream)实际效果
当FFmpeg处理视频时,它会:
- 在
./m3u8/1/目录下创建多个.ts文件- 文件名会是:
segment001.ts,segment002.ts,segment003.ts, ...- 每个.ts文件包含约4秒的视频内容(由
-hls_time 4参数决定)播放列表内容
生成的
1.m3u8文件会包含类似这样的内容:#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:4 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:4.0, segment001.ts #EXTINF:4.0, segment002.ts #EXTINF:4.0, segment003.ts ... #EXT-X-ENDLIST这种结构使得视频播放器可以按顺序下载和播放这些片段,实现流媒体播放效果。
整体功能
这个命令将一个MP4视频文件转换为HLS流媒体格式,具体功能包括:
- 视频转换:将视频缩放为720×1280分辨率(适合移动设备竖屏播放)
- 编码优化:使用H.264编码,设置适合流媒体播放的参数
- 切片处理:将视频切分为4秒的小片段(.ts文件)
- 生成播放列表:创建.m3u8播放列表文件,用于顺序播放这些片段
- 文件组织:将输出文件按输入文件名组织到对应目录中
使用场景
这种格式特别适合:
- 网页视频播放
- 移动应用视频流
- 自适应比特率流媒体
- 视频点播服务
HLS格式允许视频根据网络状况自适应调整质量,并且支持边下载边播放,是现代网页视频播放的主流技术之一。
2. 批量转换MP4文件为M3U8格式的脚本
视频参数:
- 竖屏720x1280
- 文件大小控制在800K以内
#!/bin/bash
# 批量转换MP4文件为M3U8格式的脚本
# 视频参数:竖屏720x1280,文件大小控制在800K以内
for i in {2..12}
do
echo "正在处理 $i.mp4..."
# 创建目录
mkdir -p ./m3u8/$i
# 检查文件是否存在
if [ -f "$i.mp4" ]; then
# 转换视频
ffmpeg -i $i.mp4 -vf scale=720:1280 -c:a aac -ar 48000 -b:a 96k -c:v h264 -profile:v main -crf 23 -g 48 -keyint_min 48 -sc_threshold 0 -b:v 1200k -maxrate 1300k -bufsize 1800k -hls_time 4 -hls_playlist_type vod -hls_segment_filename ./m3u8/$i/segment%03d.ts ./m3u8/$i/$i.m3u8
echo "$i.mp4 转换完成"
else
echo "$i.mp4 文件不存在,跳过"
fi
done
echo "所有转换任务完成!"