ffmpeg的时基

FFMPEG的很多结构中有AVRational time_base;这样的一个成员,它是AVRational结构的

typedef struct AVRational{
     int num; ///< numerator
     int den; ///< denominator
 } AVRational;

AVRational这个结构标识一个分数,num为分数,den为分母。

实际上time_base的意思就是时间的刻度:

如(1,25),那么时间刻度就是1/25

(1,9000),那么时间刻度就是1/90000

那么,在刻度为1/25的体系下的time=5,转换成在刻度为1/90000体系下的时间time为(5*1/25)/(1/90000) = 3600*5=18000

ffmpeg中做pts计算时,存在大量这种转换

在以下结构中都有

AVCodecContext:编解码上下文。

AVStream:文件或其它容器中的某一个track。

如果由某个解码器产生固定帧率的码流

AVCodecContext中的AVRational根据帧率来设定,如25帧,那么num = 1,den=25

AVStream中的time_base一般根据其采样频率设定,如(1,90000)

在某些场景下涉及到PTS的计算时,就涉及到两个Time的转换,以及到底取哪里的time_base进行转换:

场景1:编码器产生的帧,直接存入某个容器的AVStream中,那么此时packet的Time要从AVCodecContext的time转换成目标AVStream的time

场景2:从一种容器中demux出来的源AVStream的frame,存入另一个容器中某个目的AVStream。

            此时的时间刻度应该从源AVStream的time,转换成目的AVStream timebase下的时间。

其实,问题的关键还是要理解,不同的场景下取到的数据帧的time是相对哪个时间体系的。

demux出来的帧的time:是相对于源AVStream的timebase

编码器出来的帧的time:是相对于源AVCodecContext的timebase

mux存入文件等容器的time:是相对于目的AVStream的timebase

这里的time指pts。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏DeveWork

WordPress免插件仅代码实现“返回顶部、返回底部、评论”效果(样式一)

本文所说的”返回顶部、返回底部、评论 “相信你知道是什么东东了吧?  一般你在各大网站的右下角都能看到类似的东东,但许多网站都普遍只有“返回顶部”的效果。不过就...

1647
来自专栏IT技术精选文摘

程序员必知必会的那些邪恶的脚本

set -o errexit 等价于 set -e,表示有任何错误(命令的返回状态非 0 )时即退出。

932
来自专栏吉浦迅科技

DAY14:阅读CUDA C runtime之错误检查和Call stack

1103
来自专栏社区的朋友们

基于 python 、js 的一个网页模块开发流程总结

这篇文章主要介绍了在功能模块中的一些关键处理思路和流程,以及一些比较典型的问题,都是比较基础的东西。其中的内容,相信各位大牛还有许多更好的处理方式。水平有限,总...

8570
来自专栏玉树芝兰

如何用Sikuli自动录入成绩?

手里明明有一份学生成绩Excel表格,却还得一一手动把它们输入到教务系统?类似这样的简单重复枯燥操作,其实你都可以一键让电脑自动替你完成。

672
来自专栏mukekeheart的iOS之旅

iOS学习——iOS原生实现二维码扫描

  最近项目上需要开发扫描二维码进行签到的功能,主要用于开会签到的场景,所以为了避免作弊,我们再开发时只采用直接扫描的方式,并且要屏蔽从相册读取图片,此外还在二...

37315
来自专栏Python中文社区

Python爬虫一步步抓取房产信息

專 欄 ❈ Garfield_Liang,Python中文社区专栏作者。 简书地址:http://www.jianshu.com/u/cac1d39abfa9...

2556
来自专栏逍遥剑客的游戏开发

游戏配置序列化

2664
来自专栏Seebug漏洞平台

TP-LINK 远程代码执行漏洞 CVE-2017-13772 趣谈

原文地址:《A CURIOUS TALE OF REMOTE CODE EXECUTION, THE TP-LINK STORY – CVE-2017-1377...

9126
来自专栏xingoo, 一个梦想做发明家的程序员

AngularJS 国际化——Angular-translate

对于一个用户群面向全球的的应用来说,不得不考虑国际化的问题。当然,即便是刚刚起步的小应用,如果有心搞大,也应该提前设计国际化的方案。 本篇讲述使用Angul...

2278

扫码关注云+社区