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的参数可以修改吗

ffmpeg concat 让视频更长

无法使用 ffmpeg 更改视频字幕编解码器

使用 FFmpeg 裁剪视频会过度增加 tbn 值

ffmpeg中的时间单位以及时间转换函数(av_q2d av_rescale_q)

魔兽70TBC附魔大全