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_YUV420Pまたはを使用する必要がありますAV_PIX_FMT_YUV422P

したがって、入力 PIX 形式がAV_PIX_FMT_YUV420P/AV_PIX_FMT_YUV422Pでない場合は、変換が必要になります。Sws_Contextsws_scaleを同じように利用できます。

于 2013-05-15T13:31:36.643 に答える
1

YUV420P に変換する代わりに、libx264 ではなく libx264rgb コーデックを使用することもできます。現在の AV_PIX_FMT_RGB24 タイプをサポートしています。

于 2019-05-02T18:21:41.107 に答える