设置固定I帧间隔后libx264生成I帧间隔不一致的原因是什么?
已设置固定I帧间隔但libx264输出I帧间隔不一致的原因
本质逻辑
你通过-g 10设置的是最大GOP长度,并不是强制固定I帧间隔规则。libx264编码默认开启场景切换检测功能:当编码器判断前后两帧画面内容差异超过预设阈值时,会跳过当前GOP剩余帧数,直接在当前帧插入I帧并重置GOP计数,最终就会出现实际I帧间隔小于你设定值的情况。
你使用的足球测试素材包含大量快速运动、镜头切换片段,很容易触发场景切换检测逻辑,因此会出现30到38、38到47这类非10帧的间隔。
强制固定I帧间隔的设置方法
如果需要完全固定I帧间隔,需要额外添加x264私有参数关闭场景切换,同时限制最小I帧间隔和最大I帧间隔一致,完整命令如下:
ffmpeg -i football.y4m -c:v libx264 -bf 0 -g 10 -x264-params keyint=10:min-keyint=10:scenecut=0 football.mp4
相关参数说明:
keyint=10:等效于-g 10,设定最大I帧间隔为10帧min-keyint=10:设定最小I帧间隔为10帧,禁止编码器插入间隔小于10帧的I帧scenecut=0:完全关闭场景切换检测功能,不会因为画面突变强制插入I帧
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

