我有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文件吗?
答案 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。