我有一个项目,其中我依次接收帧以对mp4-h264视频进行编码。我还在框架旁边收到以毫秒为单位的时间戳,以指示在视频中放置框架的位置。因此,我决定使用time_base
为10000来简化帧的放置,因为帧速率是可变的,平均fps为30。后来我了解到,这在某些视频播放器中会引起问题。我想知道是否有适当的方法来完成此任务。目前,我当前的解决方案是将time_base
设置为30,并简单地将frame->pts
设置为帧除以(10000/30)的时间戳。
原始设置
AVCodecContext *cctx;
AVStream* stream;
stream->time_base.num = 1;
stream->time_base.den = 10000;
stream->r_frame_rate.num = 30;
stream->r_frame_rate.den = 1;
cctx->time_base.num = 1;
cctx->time_base.den = 10000;
cctx->framerate.num = 30;
cctx->framerate.den = 1;
我的问题
time_base
的确切含义是因为我总是将time_base
仅仅用于提取帧的位置,并在编码过程中将其抽象出来。这就是为什么我虽然必须同时声明framerate
和time_base
的原因。如果仅是ffmpg抽象,为什么time_base
缺少大量丢失帧会导致仅在某些播放器中出现此问题。时基和帧速率是否需要匹配