【问题标题】:How to control key-frame generation of ffmpeg?如何控制 ffmpeg 的关键帧生成?
【发布时间】:2012-12-16 13:36:09
【问题描述】:

我正在制作一个分段器,它可以干预 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 在转码过程中如何生成关键帧。如果两个相邻关键帧之间的“距离”是 6 秒,我得到 6 秒的片段。

这是我的问题:

  1. ffmpeg 以不规则的间隔生成关键帧是真的吗(间隔时间可以长达几秒(例如 6)?

  2. 我们如何控制 ffmpeg 关键帧的生成? (我想应该有一个 ffmpeg 命令的参数,可能是 -force_key_frames,但我不确定)

【问题讨论】:

    标签: ffmpeg libav


    【解决方案1】:
    1. ffmpeg 可以根据场景变化检测生成不规则间隔的关键帧。

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

    -g (FFmpeg) 关键帧间隔,也称为 GOP 长度。这决定了 I 帧之间的最大距离。非常高的 GOP 长度将导致稍微更有效的压缩,但会使在视频中的查找更加困难。

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

    【讨论】:

    • 我必须在我的代码中设置“-keyint_min”值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多