到目前为止,我正在使用ffmpeg使用固定帧(以编程方式)进行所有编码。现在我需要支持可变帧速率。我开始只是评论我的代码部分设置帧速率。 但它不起作用。我的功能在avcodec_open2失败了。请有人建议我如何支持可变帧速率。 我也开始知道并非所有编解码器都支持可变帧速率。因此,在使用可变帧速率进行编码时,通常使用哪些编解码器。请建议。
由于 普拉迪普
答案 0 :(得分:5)
我意识到这个帖子已经很老了,但是我希望能帮助一些有同样问题的人(我刚刚做过)......
使用fps filter或framerate filter。作为一个ffpmeg n00b,也不能保证100%的正确性,但至少这对我有用:
我创建了一个过滤器图形,就像在filtering_video.c示例中一样。对于filters
的{{1}}参数,我指定了avfilter_graph_parse_ptr
。然后,每当我得到一些时,我就将帧输入到滤波器中,将pts计算为
fps=fps=30:round=near
其中float fps = (float)( codecContext->time_base.num ) / codecContext->time_base.den;
this->frame->pts = (__int64)( ( timestamp - timestamp0 ) / fps );
是以秒为单位的帧时间,timestamp
是第一帧被记录的时间。两者都是浮点值,并且来自我的自定义构建计时器。当您使用为您捕获的帧(例如DirectShow)提供时间戳的库时,您当然应该使用它们。