Jul*_*ard 3 c++ video encoding ffmpeg
我正在将一些代码从 FFMPEG 0.8 转换为 FFMPEG 1.2。我在调用该方法时出错avcodec_open2():
Specified pixel format %s is invalid or not supported
Run Code Online (Sandbox Code Playgroud)
我使用的格式是:AV_PIX_FMT_RGB24。它应该默认启用,对吗?
下面是我的代码:
av_register_all();
codec = avcodec_find_encoder(AV_CODEC_ID_MPEG2VIDEO);
if(!codec)
{
throw SystemException("codec not found");
}
codecContext = avcodec_alloc_context3(codec);
codecContext->bit_rate = 200000;
codecContext->time_base.den = 1;
codecContext->time_base.num = 90000;
codecContext->gop_size = 8;
codecContext->pix_fmt = AV_PIX_FMT_RGB24;
_codecContext->width = 320
_codecContext->height = 240
if(avcodec_open2(_codecContext, _codec, NULL) < 0)
{
throw SystemException("Unable to open codec");
}
Run Code Online (Sandbox Code Playgroud)
在最新版本的 ffmpeg MPEG2/MPEG1 AV_PIX_FMT_RGB24中不受支持。
您将需要使用AV_PIX_FMT_YUV420P或AV_PIX_FMT_YUV422P。
因此,如果您输入的 PIX 格式不是AV_PIX_FMT_YUV420P/ AV_PIX_FMT_YUV422P,则需要进行转换。您可以使用Sws_Context和sws_scale。