11关于FFmpeg的dump打印出来的tbc,tbn,tbr的解释
1 关于tbn、tbc、tbr三个时基的讲述
- 1)tbn:容器(container)的时基。
对于输入容器:tbn一般是针对于输入容器的,被存放在封装上下文的视频流数组中的time_base,即AVFormatContext结构中的AVStream结构的成员time_base。例如我们dump函数打印时的左上角带有Input,就是代表输入流容器的信息。
对于输出容器:也是存放于上面的结构体中,但是因为我们需要转成各种流输出,所以输出的tbn会经常改变,例如flv转ts,那么tbn就从1000转成90k。有些输出容器是使用输入容器进行赋值的(即不转格式输出),但是对于有些无输入容器的视频流数据来说(例如调用海康SDK的出来的ps流),需要自己初始化输出容器的tbn。更细分析,由于输出容器是针对输出的,所以自然针对在解码时的压缩码流即avpacket,所以我们也说输出的容器时基为avpacket中的time_base。 - 2)tbc:解码器中的时基。存放于输入容器中的视频流中的解码上下文中。即AVFormatContext->codec->codec->time_base。
- 3)tbr:实际上不是时基,它表示帧率,该参数倾向于一个基准,所以往往tbr跟fps相同。很多时候tbc和tbn互为倒数。
英语描述:
- 1)tbn = the time base in AVStream that has come from the container。
- 2)tbc = the time base in AVCodecContext for the codec used for a particular stream。
- 3)tbr = tbr is guessed from the video stream and is the value users want to see when they look for the video frame rate。
2 图片理解
关于tbn,tbc,tbr这三者的描述,再我的关于FFmpeg各个常见结构体共同有的字段文章的第五点时基time_base中已经总结得很详细了。