ffmpeg 的 tbr tbc 和 tbn的意义
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ffmpeg 的 tbr tbc 和 tbn的意义相关的知识,希望对你有一定的参考价值。
参考技术A 使用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);
打印出来效果如下:
FFmpeg中几个重要结构体的意义
AVCodec是存储编解码器信息的结构体,特指一个特定的解码器,比如H264编码器的名字,ID,支持的视频格式,支持的采样率等;
AVCodecContext是一个描述编解码器采用的具体参数,比如采用的是那种编码器(H264或MPEG等),采用的采样率,声道数等;
AVPacket是存储编码后的数据信息的结构体(This structure stores compressed data.),可以理解为编码后等待被传输的数据包;
AVFrame是存储解码数据相关信息的结构体(This structure describes decoded (raw) audio or video data.),可以理解为编码前的帧数据;
AVStream是存储每一个视频/音频流信息的结构体;
以上是关于ffmpeg 的 tbr tbc 和 tbn的意义的主要内容,如果未能解决你的问题,请参考以下文章
FFmpeg-ffmpeg fps tbr tbn tbc的参数可以修改吗