上一篇文章说到一个mp4切片ts的方法,本篇文章是转载来至网络,和我另一个文章方法不同,解决思路也不同。
这里说明另一个方法。具体看下面介绍。切片完成解决之后,可以看我上一篇使用hlsjs做一个m3u8播放器
使用FFmpeg命令hls切片成ts文件得到切片时长不准大小不一
使用如下FFmpeg命令进行hls切片
ffmpeg -i video2.mp4 -hls_time 1 -f hls out.m3u8
由于使用了参数“-hls_time 1”,所以预计生成的ts文件时长会是1秒左右。但结果却是最终生成的ts文件时长都远远大于1秒,如下图所示:
产生上述现象的原因是:ts文件的切割还跟视频的GoP大小(两个I帧之间的间隔)有关,并不是指定1秒切一个ts文件就能保证1秒切一个ts文件的。任何一个视频流在播放端要能获取到完整的GoP才能播放,所以一个ts文件所实际包含的时间是GoP的整数倍。
知道问题产生的原因就好办了,只要我们在FFmpeg命令中设置I帧间隔就可以了。我们将切片的命令修改为如下命令:
ffmpeg -i video2.mp4 -force_key_frames "expr:gte(t,n_forced*1)" -strict -2 -c:a aac -c:v libx264 -hls_time 1 -f hls out.m3u8
其中,参数-force_key_frames “expr:gte(t,n_forced*1)”表示强制每1秒一个关键帧
参数-strict -2是为了使用aac音频编码
执行完上述命令后,我们可以在生成的m3u8文件中看到生成的ts文件时长已经变为1秒了,如下图所示: