Filter滤镜剖析—time_base时间基

作者:罗上文,微信:Loken1,公众号:FFmpeg弦外之音

帧同步的数据结构里面有两个时间基 time_base,如下:

  1. FFFrameSyncIn::time_base,输入流的时间基
  2. FFFrameSync::time_base,帧同步器的时间基

FFFrameSyncIn::time_base 其实是一个冗余的字段,它是等于输入流的时间基的,存多一个字段是为了方便知道从输入流读取的 AVFrame 的时间基是多少。

1-1

不过需要注意,FFFrameSyncIn::time_base 仅仅是刚从 AVFIlterLink 读取的 AVFrame 的时间基,它并不是 FFFrameSyncIn::ptsFFFrameSyncIn::pts_next 的时间基。

FFFrameSyncIn::ptsFFFrameSyncIn::pts_next 的时间基是 FFFrameSync::time_base

他每次从 AVFIlterLink 读取到 AVFrame 之后,都会把 pts 的时间基转成 FFFrameSync::time_base,如下:

1-2


简单来说,AVFilterContext 有多个输入流,每个输入流有各自不同的时间基。FFFrameSync 也有多个输入流,但是他们统一使用同一个时间基 FFFrameSync::time_base,这样在执行同步算法的时候,方便比较 pts

FFFrameSync 里,无论是输入还是输出,其实使用的时间基都是 FFFrameSync::time_base,如下:

1-3

上图中,mainpic 就是滤波处理后输出AVFrame,他的时间基还是 FFFrameSync::time_base

所以当传递给下一级 AVFilterContext 的时候,要转化一下时间基。


FFmpeg书籍版权所属@罗上文 2025 all right reserved,powered by Gitbook该文件修订时间: 2026-08-14 15:25:19

results matching ""

    No results matching ""