ffmpeg中的可变帧速率编码

ffmpeg中的可变帧速率编码,ffmpeg,Ffmpeg,到目前为止,我一直在使用ffmpeg使用固定帧(以编程方式)进行所有编码。现在我需要支持可变帧速率。我一开始只是对设置帧速率的代码部分进行注释。 但是它不起作用。我的函数在avcodec_open2上失败。请有人建议我如何去支持可变帧速率。 我也知道不是所有的编解码器都支持可变帧速率。因此,在使用可变帧速率编码时,通常使用哪些编解码器。请建议 谢谢 Pradeep我意识到这篇文章已经很老了,但是我希望能够帮助一些有同样问题的人(我刚刚做了) 使用或。作为ffpmeg n00b,也不能保证100%

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

谢谢
Pradeep

我意识到这篇文章已经很老了,但是我希望能够帮助一些有同样问题的人(我刚刚做了)

使用或。作为ffpmeg n00b,也不能保证100%的正确性,但至少这对我是有效的:

我创建了一个filtergraph,就像示例中一样。例如,对于
avfilter\u graph\u parse\u ptr
filters
参数,我指定了
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)提供时间戳的库时,您当然应该使用这些时间戳。

您知道如何做到这一点吗?我也对这个感兴趣@普拉克斯411