我有一个实时视频流,并希望通过准确的时间戳(pts)从中剪切一些视频片段。
当我收到一个avpacket时,我会解码它,并做一些事情并缓存avpacket。我不想重新编码所有的avpacket,它花费了cpu资源。
H.264流中有很多gop structure,通常我们应该在关键帧处切换视频,并在关键帧结束。否则视频剪辑中的前面一些帧会显示错误。
现在我使用av_write_frame将avpacket制作成视频。但有时gop的长度很长,例如它可能是250,8.3s(每秒30帧)。这意味着两个I帧之间的距离可以是250帧。视频剪辑很短,我不想添加太多未使用的帧。
我该怎么办?我想我应该在视频剪辑的起始位置插入一个i帧。我可以将p帧更改为i帧吗?
感谢您的阅读!
答案 0 :(得分:0)
这在通用案例中是不可能的,但可能在特定情况下。即使这样,也没有开源/免费工具可以做到这一点,我不知道任何商业工具。我在通用情况下说不可能的原因是每个帧最多可以引用16个其他帧。因此,您不能只替换单个帧,您将需要替换所有引用的帧。这样做可能需要几乎与编码整个GOP一样多的CPU。