默认: auto (MIN(--keyint / 10, --fps))
设定IDR帧之间的最小间隔。
关于IDR帧的解释,参见 --keyint
keyint范围太小将导致IDR帧出现在"错误"的位置(如闪烁的场景(a strobing scene))。该选项限制每个IDR帧后必须经过多少帧才能出现下一个IDR帧。
min-keyint 的最大允许值为 --keyint/2+1
ffmpeg中使用keyint_min设置此项。
推荐值: 默认,或1倍帧率
完全禁止自动I帧选择算法(adaptive I-frame decision)
x264有一指标,用于衡量每一帧与前一帧的差异程度。
若该值小于scenecut,则检测到'场景切换'('scenecut')条件,
并放置一个I帧 (前提:该帧与上一个IDR帧的间隔小于min-keyint,否则就放置一个IDR帧)。
提高scenecut值将增加检测到的'场景切换'数量。
ffmpeg中使用-sc_threshold设置此项。
将scenecut设为0,相当于设定 no-scenecut
1.1 对文件进行转码,其中参数-g设置为100,-sc_threshold设置为40:
./ffmpeg -i h264_aac_20M.mp4 -f mp4 -b:v 200k -g 100 -sc_threshold 40 -y ./200k_no_scenecut.mp4
./key_frame_info ./200k_scenecut.mp4
{
"key_frames" :
[
{"frame":0, "ts":0.00},
{"frame":100, "ts":4.00},
{"frame":200, "ts":8.00},
{"frame":300, "ts":12.00},
{"frame":338, "ts":13.52},
{"frame":438, "ts":17.52},
{"frame":538, "ts":21.52},
{"frame":635, "ts":25.40},
...
...
]
}
./ffmpeg -i h264_aac_20M.mp4 -f mp4 -b:v 200k -g 100 -sc_threshold 0 -y ./200k_no_scenecut.mp4
./key_frame_info ./200k_no_scenecut.mp4
(其中key_frames为该视频的所有关键帧信息,frame为关键帧的帧号)
{
"key_frames" :
[
{"frame":0, "ts":0.00},
{"frame":100, "ts":4.00},
{"frame":200, "ts":8.00},
{"frame":300, "ts":12.00},
{"frame":400, "ts":16.00},
{"frame":500, "ts":20.00},
{"frame":600, "ts":24.00},
...
...
]
}
由上述信息可分析出: 当sc_threshold=0时,转码程序不会监测场景切换,直接根据-g=100来设置关键帧