ffmpeg时间单位解释和av_seek_frame方法

Mr.*_*oor 6 ffmpeg video-processing

time_base在ffmpeg 中意味着什么?文件(这里)说它是"每秒帧数".我在一个真实的例子中看到:

AVFormatContext->streams[video_index]->time_base== 1/30000

但是视频的AVCodecContext->time_base== 1001/60000

这让我很困惑,我不明白.

第二个问题是关于av_seek_frame方法.如果通过时间戳(最后一个参数是AVSEEK_FLAG_BACKWARD或0)进行搜索,则从av_seek_frame读取的当前位置开始搜索?还是从文件的开头?或者从最后一次av_seek_frame调用后的解码起始位置?

sas*_*alm 8

但视频的AVCodecContext-> time_base == 1001/60000

这让我很困惑,我不明白.

time_base的类型为AVRational,它是由分子和分母组成的有理数,而不是使用小数点.我假设他们不只是使用double的原因是这样你不会失去任何精度.

AVRational在来源中定义为:

typedef struct AVRational{
    int num; ///< numerator
    int den; ///< denominator
} AVRational;
Run Code Online (Sandbox Code Playgroud)

time_base也是每秒帧数的倒数,不等于它.因此,如果你有30 fps,这意味着时基是1/30,而不是30.