在ffmpeg中使用可变帧速率进行编码

时间:2013-05-20 09:57:37

标签: ffmpeg

到目前为止,我正在使用ffmpeg使用固定帧(以编程方式)进行所有编码。现在我需要支持可变帧速率。我开始只是评论我的代码部分设置帧速率。 但它不起作用。我的功能在avcodec_open2失败了。请有人建议我如何支持可变帧速率。 我也开始知道并非所有编解码器都支持可变帧速率。因此,在使用可变帧速率进行编码时,通常使用哪些编解码器。请建议。

由于 普拉迪普

1 个答案:

答案 0 :(得分:5)

我意识到这个帖子已经很老了,但是我希望能帮助一些有同样问题的人(我刚刚做过)......

使用fps filterframerate 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)提供时间戳的库时,您当然应该使用它们。