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