当前位置: 首页 > news >正文

[转载] FFMPEG之AVRational TimeBase成员理解

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。

 

转自:http://blog.csdn.net/supermanwg/article/details/14521869

转载于:https://www.cnblogs.com/iZander/p/5707834.html

相关文章:

  • 用GNS3制作路由交换网络拓扑图
  • libevent
  • linux下历史命令history使用方法
  • matlab灰度变彩色+白平衡算法实现
  • Activityd的四种启动模式
  • 详解web.xml中元素的加载顺序
  • HDU 5773 The All-purpose Zero
  • 整理样本标签
  • OpenSSL命令---s_client
  • Wireshark设置interface 时提示“There are no interfaces on which a capture can be done ”
  • MooseFS维护技巧集锦
  • linux 文件管理
  • Java安全——提供者相关的体系架构
  • 服务器TIME_WAIT和CLOSE_WAIT详解和解决办法
  • vijos 1426
  • angular2 简述
  • iOS小技巧之UIImagePickerController实现头像选择
  • Iterator 和 for...of 循环
  • Javascript 原型链
  • JAVA并发编程--1.基础概念
  • js
  • Map集合、散列表、红黑树介绍
  • Redis学习笔记 - pipline(流水线、管道)
  • Spring Cloud中负载均衡器概览
  • TypeScript迭代器
  • Web设计流程优化:网页效果图设计新思路
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 反思总结然后整装待发
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 深度学习入门:10门免费线上课程推荐
  • 微服务框架lagom
  • 我是如何设计 Upload 上传组件的
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 因为阿里,他们成了“杭漂”
  • 转载:[译] 内容加速黑科技趣谈
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • #宝哥教你#查看jquery绑定的事件函数
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (12)Linux 常见的三种进程状态
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)丶RabbitMQ的六大核心
  • (二十四)Flask之flask-session组件
  • (附源码)springboot教学评价 毕业设计 641310
  • (十)T检验-第一部分
  • .dwp和.webpart的区别
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .Net Web窗口页属性
  • .net 发送邮件
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET命名规范和开发约定
  • .Net下的签名与混淆
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件