FFMPEG - 格式不可用?

时间:2013-05-15 12:21:06

标签: c++ video encoding ffmpeg

我正在将一些代码从FFMPEG 0.8转换为FFMPEG 1.2。调用方法avcodec_open2()时出错:“指定的像素格式%s无效或不支持”。我使用的格式是: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");
}

2 个答案:

答案 0 :(得分:4)

最新版本的ffmpeg MPEG2 / MPEG1 AV_PIX_FMT_RGB24不受支持。

您需要使用AV_PIX_FMT_YUV420PAV_PIX_FMT_YUV422P

因此,如果您的输入PIX格式不是AV_PIX_FMT_YUV420P / AV_PIX_FMT_YUV422P,则需要进行转换。您可以使用Sws_Contextsws_scale作为相同内容。

答案 1 :(得分:1)

除了转换为YUV420P,您还可以使用libx264rgb编解码器,而不是libx264。它支持当前的AV_PIX_FMT_RGB24类型。