如何在初始化(FFMPEG)后更改AvcodeContext的设置
我有一个关于Libavcodec的问题,我在网上找不到答案。我正在尝试使用H.264对帧进行编码。我遇到的问题是,我希望编码的帧具有可变的宽度和高度。我理解,要在Libavcodec中编码帧,需要将“宽度”和“高度”参数传递给AvCodecContext结构,然后将其初始化为:如何在初始化(FFMPEG)后更改AvcodeContext的设置,ffmpeg,libav,Ffmpeg,Libav,我有一个关于Libavcodec的问题,我在网上找不到答案。我正在尝试使用H.264对帧进行编码。我遇到的问题是,我希望编码的帧具有可变的宽度和高度。我理解,要在Libavcodec中编码帧,需要将“宽度”和“高度”参数传递给AvCodecContext结构,然后将其初始化为: AVCodec *codec = codec = avcodec_find_encoder(AV_CODEC_ID_H264); AVCodecContext *context = avcodec_alloc_conte
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
,因为上下文已经设置为width1920并初始化。我可以使用avcodec\u close()
创建一个全新的AvCodecContext并删除上一个,如下所示:
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);
但是当我这样做的时候,我的程序意外地崩溃了,我觉得每次我需要更改一个简单的宽度/高度设置时,重新创建avcodecedcontext从一开始就是低效的。有人对我如何着手做这件事有什么建议吗?多谢各位 那不是什么事。您必须重新初始化编码器,或将帧缩放/填充到相同大小谢谢!我是否正确地重新初始化了上面的编码器?或者,我如何填充帧?创建一个过滤器图。