我如何使用 libavcodec 强制将当前帧编码为帧内帧

How can i forcing current frame to be encoded as intra frame using libavcodec

我想更改 gop 动态以适应播放器。较小的 gop 有助于降低首屏成本;大 gop 有助于降低比特率以节省带宽。

我发现nvenc有一个功能可以解决上面的问题。 https://docs.nvidia.com/video-technologies/video-codec-sdk/nvenc-video-encoder-api-prog-guide/#forcing-current-frame-to-be-encoded-as-intra-frame

但我正在使用 ffmpeg。 ffmpeg中有没有类似的功能?

如果 AVFrame->pict_type 设置为 AV_PICTURE_TYPE_I,则 NVENC 编码器默认会将其编码为帧内帧。他们还有一个私有选项来强制将其作为 IDR 框架。

对于后者,在打开编码器之前添加。

av_opt_set(avctx->priv_data, "forced_idr", "1", 0);