Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在初始化(FFMPEG)后更改AvcodeContext的设置_Ffmpeg_Libav - Fatal编程技术网

如何在初始化(FFMPEG)后更改AvcodeContext的设置

如何在初始化(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

我有一个关于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
,因为上下文已经设置为width
1920并初始化。我可以使用
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从一开始就是低效的。有人对我如何着手做这件事有什么建议吗?多谢各位

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

谢谢!我是否正确地重新初始化了上面的编码器?或者,我如何填充帧?创建一个过滤器图。