C++ ffmpeg:avcodec_open2返回无效参数

C++ ffmpeg:avcodec_open2返回无效参数,c++,ffmpeg,C++,Ffmpeg,在我的应用程序中,我正在重用开发人员64位版本的FFmpeg的示例代码来编码视频: AVCodec*pCodec{nullptr}; AVCodecContext*pContext{nullptr}; avcodec_寄存器_all(); pCodec=avcodec\U find\U编码器(AV\U CODEC\U ID\U MPEG2视频); 如果(!pCodec_551;){} pContext=avcodec\u alloc\u context3(pCodec); 如果(!pContex

在我的应用程序中,我正在重用开发人员64位版本的FFmpeg的示例代码来编码视频:

AVCodec*pCodec{nullptr};
AVCodecContext*pContext{nullptr};
avcodec_寄存器_all();
pCodec=avcodec\U find\U编码器(AV\U CODEC\U ID\U MPEG2视频);
如果(!pCodec_551;){}
pContext=avcodec\u alloc\u context3(pCodec);
如果(!pContext_551;){}
pContext->比特率=400000;
pContext->width=size.width();
pContext->height=size.height();
pContext->time\u base.den=1;
pContext->time\u base.num=fps;
pContext->gop_size=10;
pContext->max\u b\u frames=1;
pContext->pix\u fmt=AV\u pix\u fmt\u BGR0;
if(编解码器id==AV编解码器id\U H264){
av_opt_set(pContext_uuu->priv_udata,“预设”,“慢速”,0);
}
int err=avcodec_open2(pContext_、pCodec_、nullptr);
如果(err<0){}
AVCodec*
AVCodecContext*
看起来分配正确<然后返回无效参数(
-22

我使用:Windows 10 64,VS2013编译器,Qt Creator IDE,ffmpeg(2016-05-12)64位

我从中获取代码的示例是

有什么想法吗?

只是一些想法:

  • 看看这个:ffpmeg似乎希望您设置一个由编码器本机支持的pix_fmt
  • 你的时基看起来很奇怪。我想应该是1/fps,而不是1/fps
  • 播放比特率。我模模糊糊地记得,至少在几年前,这个值应该是位/秒的kbit/s,这取决于编解码器。(同样,对于mpeg2来说,400kbit/s是相当低的,但我想它仍然可以工作)
  • 对于第一次测试,使用标准分辨率,如720×480。IIRC mpeg2仅支持某些分辨率,至少两个维度都必须是8的倍数

尝试设置
pContext->codec\u type=1;//视频
错误告诉我们在何处查看尝试设置
pContext->sample\u fmt
使用ffmpeg 4.2.4中的所有可用值尝试此操作,该值小于15,分辨率为-720x480。。非常感谢。(我还更改了u建议的其他值)