2013-05-20 32 views
5

直到现在,我正在使用固定帧(编程)使用ffmpeg完成所有编码。现在我需要支持可变帧频。我刚刚开始评论我设置帧频的代码部分。 但它不工作。我的功能在avcodec_open2失败。请有人建议我如何去支持可变帧频。 另外我也知道不是所有编解码器都支持可变的帧速率。所以当使用可变帧频编码时,通常使用哪些编解码器。请建议。ffmpeg中的可变帧频编码

感谢 普拉迪普

+0

你知道如何做到这一点吗?我也对此感兴趣。 @ praks411 – GangstaGraham

回答

4

我知道后很老了,但是我希望能够帮助有同样的问题(我只是做了)一些人...

使用fps filterframerate filter 。作为一个ffpmeg n00b以及,100%的正确性不能保证,但至少这对我有效:

我创建了一个筛选器图,就像在filtering_video.c示例中一样。例如,对于filters参数avfilter_graph_parse_ptr,我指定fps=fps=30:round=near。然后我喂帧到每当FilterGraph动态我得到了一些,计算PTS作为

float fps = (float)(codecContext->time_base.num)/codecContext->time_base.den; 
this->frame->pts = (__int64)((timestamp - timestamp0)/fps); 

timestamp其中是帧的时间,以秒和timestamp0是被记录在第一帧的时间。两者都是浮点值,并且是我自定义的定时器的结果。当您使用提供时间戳的库(如DirectShow)时,您当然应该使用这些。