美文网首页
FFMPEG之TimeBase成员理解

FFMPEG之TimeBase成员理解

作者: allenyang羊羊 | 来源:发表于2019-12-21 10:56 被阅读0次

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/supermanwg/article/details/14521869
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为(51/25)/(1/90000) = 36005=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。
————————————————
版权声明:本文为CSDN博主「supermanwg」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/supermanwg/article/details/14521869

相关文章

  • FFMPEG之TimeBase成员理解

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:...

  • FFmpeg总结

    一、概述 本文会讲到的内容:1、FFmpeg结构2、FFmpeg解码3、FFmpeg的时间timebase4、FF...

  • [FFmpeg]PTS/DTS/Timebase

    声明,此文章为转载CSDN的作者,讲解的比较详细 作者:bixinwei来源:CSDN原文:https://blo...

  • iOS ffmpeg 理解

    教程一:视频截图(Tutorial 01: Making Screencaps) 首先我们需要了解视频文件的一些基...

  • ffmpeg入门教程

    ffmpeg入门之视频播放器原理和ffmpeg开发环境搭建以及如何阅读官网文档https://www.jiansh...

  • 附加: FFmpeg概念理解

    FFmpeg 介绍 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LG...

  • 《FFmpeg Basics》中文版-01-FFmpeg基本介绍

    正文 为了最优地使用各种FFmpeg组件,需要正确理解FFmpeg的基本属性和特性。如果你基础差了点,看了不知道说...

  • 2018-09-06

    iOS 开发之编译ffmpeg (报错分析1) 1. ffmpeg 自动下载及编译 目前用的最多的是 :build...

  • 线程池及红黑树复习--Apple的学习笔记

    FFmpeg也算是入门了。回顾我之前理解的流媒体开发就是指FFmpeg是错误的,因为流媒体开发主要是指网络视频,否...

  • 实现最小YUV视频解码器

    本文记录了使用ffmpeg进行视频解码的最小解码器代码,通过这个小程序可以理解ffmpeg的解码过程及用到的api...

网友评论

      本文标题:FFMPEG之TimeBase成员理解

      本文链接:https://www.haomeiwen.com/subject/huqxictx.html