【问题标题】:How to insert a key frame(Iframe) to a h.264 video stream in ffmpeg C++ api?如何在 ffmpeg C++ api 中将关键帧(Iframe)插入到 h.264 视频流中?
【发布时间】:2016-03-13 13:38:12
【问题描述】:

我有一个实时视频流,并希望通过准确的时间戳(pts)从中剪切一些视频片段。

当我收到一个 avpacket 时,我会对其进行解码,然后做一些事情并缓存 avpacket。我不想重新编码所有的avpackets,它会消耗cpu资源。

H.264流中有很多gop structure,通常我们应该从关键帧开始剪切视频,并在关键帧结束。否则视频剪辑中的前面一些帧会显示错误。

现在我使用av_write_frame 将avpacket 制作成视频。但有时gop的长度很长,比如250、8.3s(每秒30帧)。这意味着两个 I 帧之间的距离可以是 250 帧。视频剪辑很短,我不想添加太多未使用的帧。

我该怎么办?我想我应该在视频剪辑的开始位置插入一个 i-frame。我可以将 p 帧更改为 i 帧吗?

感谢您的阅读!

【问题讨论】:

    标签: c++ ffmpeg h.264


    【解决方案1】:

    这在一般情况下是不可能的,但可能在特定情况下。即便如此,也没有开源/免费工具可以做到这一点,而且我不知道有任何商业工具。我说在一般情况下不可能的原因是每个帧最多可以引用 16 个其他帧。所以你不能只替换一个框架,你需要替换所有引用的框架。这样做可能会占用几乎与编码整个 GOP 一样多的 CPU。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 2021-12-04
      • 2011-01-11
      • 1970-01-01
      • 2019-02-21
      • 2011-07-15
      • 2015-12-19
      相关资源
      最近更新 更多