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

pra*_*411 5 ffmpeg

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

谢谢Pradeep

iko*_*o79 5

我意识到该职位已经很老了,但是我希望能够帮助一些遇到相同问题的人(我刚刚做了)...

使用fps过滤器或帧速率过滤器。作为ffpmeg n00b,也不能保证100%正确,但是至少这对我有用:

我创建了一个filtergraph,就像在filtering_video.c示例中一样。例如,对于的filters参数avfilter_graph_parse_ptr,我指定fps=fps=30:round=near。然后,每当我得到帧时,就将帧输入到filtergraph中,将

float fps = (float)( codecContext->time_base.num ) / codecContext->time_base.den;
this->frame->pts = (__int64)( ( timestamp - timestamp0 ) / fps );
Run Code Online (Sandbox Code Playgroud)

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