gpt4 book ai didi

ffmpeg - 初始化后如何更改 AVCodecContext 的设置(FFMPEG)

转载 作者:行者123 更新时间:2023-12-04 22:58:40 25 4
gpt4 key购买 nike

我有一个关于 Libavcodec 的问题,我在网上找不到答案。我正在尝试使用 H.264 对帧进行编码。我遇到的问题是我希望编码的帧具有可变的宽度和高度。我知道要在 Libavcodec 中编码帧,您需要将“宽度”和“高度”参数传递给 AvCodecContext 结构,然后将其初始化为:

AVCodec *codec = codec = avcodec_find_encoder(AV_CODEC_ID_H264);
AVCodecContext *context = avcodec_alloc_context3(encoder->codec);
context->width = 1920;
//OTHER SETTINGS HERE
//FINALLY...
avcodec_open2(context, codec, NULL);

假设,在我初始化了这个上下文之后,我需要编码一个不同的帧,现在它的宽度为 900 .我不能简单地做 context->width = 900因为上下文已经设置为宽度 1920并初始化。我可以创建一个全新的 AvCodecContext 并使用 avcodec_close() 删除前一个如下:
AVCodec *codec = codec = avcodec_find_encoder(AV_CODEC_ID_H264);
AVCodecContext *context = avcodec_alloc_context3(encoder->codec);
context->width = 900;
//OTHER SETTINGS HERE
//FINALLY...
avcodec_open2(context, codec, NULL);

// DO THE ENCODING HERE

avcodec_close(context);

但是当我这样做时,我的程序意外地崩溃了,我觉得每次我需要更改简单的宽度/高度设置时重新创建 AVCodecContext 开始效率低下。有人对我如何去做这件事有任何建议吗?非常感谢!

最佳答案

那不是一回事。您必须重新初始化编码器,或将帧缩放/填充到相同大小

关于ffmpeg - 初始化后如何更改 AVCodecContext 的设置(FFMPEG),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59763027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com