ffmpeg中的time_base和framerate有何不同?

时间:2019-06-29 16:39:16

标签: ffmpeg

我有一个项目,其中我依次接收帧以对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仅仅用于提取帧的位置,并在编码过程中将其抽象出来。这就是为什么我虽然必须同时声明frameratetime_base的原因。如果仅是ffmpg抽象,为什么time_base缺少大量丢失帧会导致仅在某些播放器中出现此问题。时基和帧速率是否需要匹配

0 个答案:

没有答案