ffmpeg的时基
来源:互联网 发布:ubuntu mate 15.04 编辑:程序博客网 时间:2024/06/04 19:29
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。
- ffmpeg的时基
- ffmpeg编译时的问题
- FFMPEG 的手册 FFmpeg Documentation
- 解决编译ffmpeg时的错误
- ffmpeg解析mpeg2ts时的数据结构分析
- ffmpeg解析mpeg2ts时的数据结构分析
- ffmpeg编译时的编译选项说明
- 编译ffmpeg neon时出现的问题
- ffmpeg用g++编译时的注意事项
- ffmpeg用g++编译时的注意事项
- cygwin编译ffmpeg时出现的问题
- ffmpeg 安装时需要的类库
- FFMPEG 和 FFMPEG-PHP 的安装
- FFMPEG 和 FFMPEG-PHP 的安装
- FFMPEG的.Net封装,FFmpeg.NET
- [Ffmpeg] ffmpeg编解码的若干注意事项
- FFmpeg学习6:视音频同步——详细阐述了时基的概念
- FFMPEG 的手册
- java反射
- 【问题解决】Mac上Android环境变量配置后Jenkins打包找不到环境变量问题
- 算法分析与设计第十五周:593. Valid Square
- Solr的日志配置
- websocket客户端的代码
- ffmpeg的时基
- 557. Reverse Words in a String III
- 对象审计+查看审计内容+查看对哪些用户对象进行对象审计+取消对象审计
- lintcode(182)删除数字
- linux下安装Nginx
- JAVA-JDBC: (1) java连接数据库的粗略步骤
- 通讯录管理系统终章
- System.getProperty
- 【C/C++】解决“不是有效的win32应用程序”思路