ffmpeg:avcodec_open2返回无效参数

时间:2016-05-12 11:25:40

标签: c++ ffmpeg

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

AVCodec* pCodec_{nullptr};
AVCodecContext* pContext_{nullptr};

avcodec_register_all();
pCodec_ = avcodec_find_encoder(AV_CODEC_ID_MPEG2VIDEO);
if (!pCodec_) {}

pContext_ = avcodec_alloc_context3(pCodec_);
if (!pContext_) {}

pContext_->bit_rate = 400000;
pContext_->width = size.width();
pContext_->height = size.height();

pContext_->time_base.den = 1;
pContext_->time_base.num = fps;

pContext_->gop_size = 10;
pContext_->max_b_frames = 1;
pContext_->pix_fmt = AV_PIX_FMT_BGR0;

if (codec_id == AV_CODEC_ID_H264) {
    av_opt_set(pContext_->priv_data, "preset", "slow", 0);
}

int err = avcodec_open2(pContext_, pCodec_, nullptr);
if (err < 0) {}

AVCodec *和AVCodecContext *看起来像是正确分配的。 avcodec_open2然后返回无效参数(-22)。

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

我从代码中获取的代码是&#34; decoding_encoding.c&#34;。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

只是一些想法:

  • 看看这个:FFMPEG - format not available?似乎ffpmeg希望你设置一个pix_fmt,编码器原生支持它。
  • 你的时间基数似乎很奇怪。我想它应该是1 / fps,而不是fps / 1
  • 使用比特率播放。我依稀记得,至少在几年前,这个值预计是以bit / s为单位的kbit / s,具体取决于编解码器。 (对于mpeg2,400 kbit / s也相当低,但我认为它仍然可以工作。)
  • 进行第一次测试,使用标准分辨率,如720×480.IIRC mpeg2仅支持某些分辨率,至少两个尺寸必须是8的倍数。