使用ffmpeg进行可变帧率编码

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

你解决了这个问题吗?我也很感兴趣。@praks411 - GangstaGraham
1个回答

8
我知道这篇文章已经很老了,但是我希望能够帮助一些遇到相同问题的人(就像我遇到的问题)......
使用 fps 滤镜framerate 滤镜。作为一个新手,不能保证百分之百的正确性,但至少对我有用:
我创建了一个过滤器图,就像在 filtering_video.c 示例中一样。对于 avfilter_graph_parse_ptr 的 filters 参数,例如我指定了 fps=fps=30:round=near。然后我在获得帧的时候将它们馈送到过滤器图中,计算时间戳为:
float fps = (float)( codecContext->time_base.num ) / codecContext->time_base.den;
this->frame->pts = (__int64)( ( timestamp - timestamp0 ) / fps );

其中timestamp是帧以秒为单位的时间,timestamp0是记录第一帧的时间。两者都是浮点值,并来自于我的自定义定时器。当您使用提供捕获帧的时间戳库(如DirectShow)时,应该当然使用那些时间戳。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接