2016-05-12 356 views
2

我再利用我從的ffmpeg開發64位版本的示例代碼在我的應用對視頻信號編碼:的ffmpeg:avcodec_open2返回無效的參數

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位。

我從代碼中提取的樣本是「decode_encoding.c」。

任何想法?

+1

嘗試的倍數來設置'pContext _-> codec_type = 1; //視頻' – fandyushin

回答

0

只是一些想法:

  • 看看這個:FFMPEG - format not available?看來ffpmeg希望你設置本身是由編碼器支持的pix_fmt。
  • 你的時間似乎很奇怪。我想它應該是1/fps,而不是fps/1
  • 以比特率播放。我依稀記得,至少在幾年前,這個值預計會以kbit/s的bit/s爲單位,這取決於編解碼器。 (對於mpeg2,400 kbit/s也很低,但它應該仍然有效,我猜)。
  • 爲第一測試中,使用像720×480。IIRC MPEG2標準分辨率只支持特定分辨率,至少兩個尺寸必須8.
+0

它是分辨率 - 720x480的作品..謝謝..(我也改變了其他值你推薦) – roari

相關問題