3

我正在将一些代码从 FFMPEG 0.8 转换为 FFMPEG 1.2。在调用该方法期间出现错误avcodec_open2()

Specified pixel format %s is invalid or not supported

我使用的格式是 : 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");
}
4

2 回答 2

5

不支持最新版本的 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

于 2013-05-15T13:31:36.643 回答
1

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

于 2019-05-02T18:21:41.107 回答