ffmpeg 的 tbr tbc 和 tbn的意义
使用ffmpeg 的同学,有的时候可能对tbr ,tbc tbn 的含义有些不太理解,并且不知道怎么对应里面的数据结构
我下面列举了几个例子,这样便于大家理解
tbn= the time base in AVStream that has come from the container
tbc= the time base in AVCodecContext for the codec used for a particular stream
tbr= tbr is guessed from the video stream and is the value users want to see when they look for the video frame rate
25 tbr代表帧率;
12800 tbn代表文件层(st)的时间精度,即1S=12800,和duration相关;
50 tbc代表视频层(st->codec)的时间精度,即1S=50,和strem->duration和时间戳相关。
便于理解,下图为我打印的解码后的时间戳 也就是 视频是25帧 的, 1S = 50 ;
拉取了一个微信的小视频分析了一下:
便于大家理解,ffmpeg 相关数据打印如下:
intstream_index = pkt->stream_index; (如果使用ffmpeg 的人肯定可以看懂了,我就不详细解释了)
LOGV("checkinpts_index_%d_rescale_ inpts %lldoutpts = %lldstreams.den=%d streams.num=%d codec.den=%d codec.num=%d \n",stream_index,inpts2,outpts2,\
ctx->streams[stream_index]->time_base.den,ctx->streams[stream_index]->time_base.num,\
ctx->streams[stream_index]->codec->time_base.den,ctx->streams[stream_index]->codec->time_base.num);
打印出来效果如下: