如何使用FFMPEG创建具有恒定持续时间的m3u8播放列表和mpeg-ts块?

时间:2015-10-15 15:29:40

标签: ffmpeg http-live-streaming video-encoding hls m3u8

我有mp4文件(Big Buck Bunny):
持续时间:00:09:56.50
比特率:2048 kb / s
尺寸:1280x720
fps:29.97
我在2秒后设置了常量关键帧 我想为HLS准备这个视频 我使用它来生成m3u8播放列表并生成ts块:

ffmpeg -i input.mp4 -hls_time 2 out.m3u8

但不幸的是,我不明白它是如何运作的 我认为这个命令会生成298个2秒的块,但它只生成152个不同长度的块(3 - 9秒)。
但最奇怪的是它创建了m3u8文件,只有5个文件链接。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:9
#EXT-X-MEDIA-SEQUENCE:148
#EXTINF:8.341667,
out148.ts
#EXTINF:7.841167,
out149.ts
#EXTINF:0.967633,
out150.ts
#EXTINF:8.341667,
out151.ts
#EXTINF:7.140467,
out152.ts
#EXT-X-ENDLIST

我认为m3u8文件必须包含视频的所有部分。有人可以解释一下如何在2秒内创建298个块并正确填充m3u8文件吗?

1 个答案:

答案 0 :(得分:6)

要每2秒强制一个关键帧,您可以使用-g指定GOP大小:

ffmpeg -i input.mp4 -g 60 -hls_time 2 out.m3u8

其中29.97 fps * 2s~ = 60帧,表示关键帧每60帧。

否则它将等待在关键帧上拆分,最小持续时间会有所不同。

要保持所有细分添加-hls_list_size 0,否则只保留默认值5。