如何在ffmpeg C++api中向h.264视频流插入关键帧(Iframe)
How to insert a key frame(Iframe) to a h.264 video stream in ffmpeg C++ api?
我有一个实时视频流,希望通过精确的时间戳(pts)从中剪切一些视频片段。
当我接收到一个avpacket时,我会对它进行解码,然后做一些事情并缓存该avpacket。我不想重新编码所有的avpacket,这需要占用cpu资源。
H.264流中有许多gop结构,通常我们应该从关键帧开始剪切视频,并在关键帧结束。否则,视频剪辑中的前一些帧将显示错误。
现在我使用av_write_frame将avpacket制作成视频。但有时gop的长度很长,比如它可能是2508.3s(每秒30帧)。这意味着两个I帧之间的距离可以是250帧。视频剪辑很短,我不想添加太多未使用的帧。
我该怎么办?我想我应该在视频剪辑的开始位置插入一个I帧。我可以把p帧改成I帧吗?
感谢您的阅读!
这在一般情况下是不可能的,但在特定情况下可能会发生。即便如此,也没有开源/免费的工具可以做到这一点,我也不知道有任何商业工具。我说这在一般情况下是不可能的,因为每个帧最多可以引用16个其他帧。所以你不能只替换一个框架,你需要替换所有被引用的框架。这样做可能需要几乎与编码整个GOP一样多的CPU。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 预处理器:插入结构名称中的前一个行号
- 从udp接收帧对于人脸识别来说太慢
- 在未初始化映射的情况下,将值插入到映射的映射中
- 如何在c++中只将键插入到bimap的一侧
- 如何将结构插入到集合中并打印集合的成员
- C++json插入数组
- Visual Studio 2019:插入多个C++风格的单行注释
- nlohmann-json将一个数组插入到另一个数组中
- 在 AVI、H.264 文件中查找关键帧
- 在stl映射中,关键帧是如何按升序排列的
- 使用重叠的关键帧合并两个未定义的贴图
- 如何在ffmpeg C++api中向h.264视频流插入关键帧(Iframe)
- 在多帧图像中插入修改过的像素数据
- c++中的动画,用旋转矩阵插值关键帧
- c++集/映射如何检查关键帧的相等性
- 有条件地将贴图关键帧复制到向量
- FFMPEG 读取关键帧
- 存储和访问动画的关键帧