FFMPEG - 格式不可用?

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");
}
2个回答

5

在最新的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_Contextsws_scale来实现。


1
这个在哪里有文档记录? - Ciro Santilli OurBigBook.com

1

您可以使用libx264rgb编解码器而不是libx264,这样就无需将视频转换为YUV420P格式。它支持当前的AV_PIX_FMT_RGB24类型。


你能详细说明如何做到这一点吗? - JJJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接