如何控制关键帧生成的ffmpeg的?如何控制关键帧生成的ffmpeg的?(How to contro

2019-05-12 05:00发布

我正在做一个分割进行干预的ffmpeg的write_frame功能和写入数据输出到单独的文件。 每个分区文件包含大约3秒的视频片段。

该代码执行以下操作:

1 - Get transcoded packet  
2 - Check if it contains key frame data, if yes goto 3. 
3 - Check the duration of current segment, if it exceed 3 seconds, goto 4 
4 - Close file, and create new segment, write packet to segment file, goto-1

一般来讲,每隔段包含至少3个秒钟的视频数据,并将其与一个关键帧开始。

的问题是,所述输出视频的持续时间有很大的不同,某些含有3秒,一些含有5或6个。

我怀疑,这个问题由于ffmpeg的是如何生成的转码过程中的关键帧。 如果“距离”的两个相邻关键帧之间是6S,我得到6秒段。

这里是我的问题:

  1. 是真的,FFMPEG产生以不规则的间隔(和间隔时间关键帧可多达几秒钟(例如,6)?

  2. 我们怎样才能控制ffmpeg的关键帧生成? (我想应该有一个ffmpeg的命令对这个说法,也许-force_key_frames,但我不知道)

Answer 1:

  1. 这是可能的的ffmpeg基于场景变化检测产生在不规则间隔关键帧,。

  2. 关键帧间隔可以通过GOP大小来控制。 以下选项可以使用

-g(FFmpeg的)关键帧间隔,也被称为GOP长度。 这确定I帧之间的最大距离。 非常高的GOP长度将导致稍微更高效的压缩,反而会使视频寻求较为困难。

-keyint_min(FFmpeg的)最小的GOP长度,I帧之间的最小距离。



文章来源: How to control key-frame generation of ffmpeg?
标签: ffmpeg libav