文档章节

ffmpeg时间换算,对于seek播放有帮助

jamin-snails
 jamin-snails
发布于 2017/01/13 08:54
字数 216
阅读 354
收藏 0

根据pts来计算一桢在整个视频中的时间位置:  

timestamp(秒) = pts * av_q2d(st->time_base)  

计算视频长度的方法:  

time(秒) = st->duration * av_q2d(st->time_base)    

这里的st是一个AVStream对象指针。  

时间基转换公式  

timestamp(ffmpeg内部时间戳) = AV_TIME_BASE * time(秒)  

time(秒) = AV_TIME_BASE_Q * timestamp(ffmpeg内部时间戳)  

所以当需要把视频跳转到N秒的时候可以使用下面的方法:  

int64_t timestamp = N * AV_TIME_BASE;   

av_seek_frame(fmtctx, index_of_video, timestamp, AVSEEK_FLAG_BACKWARD);  

ffmpeg提供了不同时间基之间的转换函数:  

int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)  

这个函数的作用是计算a * bq / cq,来把时间戳从一个时基调整到另外一个时基。

在进行时基转换的时候,应该首选这个函数,它可以避免溢出的情况发生

© 著作权归作者所有

共有 人打赏支持
jamin-snails
粉丝 6
博文 22
码字总数 4851
作品 0
成都
高级程序员
私信 提问
加载中

评论(2)

jamin-snails
jamin-snails

引用来自“钛元素”的评论

我想知道怎么控制,ffmpeg参数控制么
控制的话,可以参考下,ffplay里面的代码,你搜索avformat_seek_file这个函数。还有一个 av_frame_seek好像,frame去seek的话,需要你自己去找到关键帧,不然很容易花屏,直接 seekfile,ffmpeg内部自己去找关键帧,但是seek的时间不准。
钛元素
钛元素
我想知道怎么控制,ffmpeg参数控制么
解密FFmpeg播放track mode控制

上一篇文章(http://my.oschina.net/u/2336532/blog/400790)我们解决了在FFmpeg下如何处理H264和AAC的扩展数据,根据解出的NALU长度恢复了H264的起始码和AAC的ADTS头,这样一般来说播放是没有...

yang_danny
2015/04/19
0
0
解密FFmpeg播放状态控制内幕

上一篇文章(http://my.oschina.net/u/2336532/blog/400790)我们解决了在FFmpeg下如何处理H264和AAC的扩展数据,根据解出的NALU长度恢复了H264的起始码和AAC的ADTS头,这样一般来说播放是没有...

东辉在线
2015/04/21
0
0
Android使用FFmpeg(七)--ffmpeg实现暂停、快退快进播放

Android使用FFmpeg(一)--编译ffmpeg Android使用FFmpeg(二)--Android Studio配置ffmpeg Android使用FFmpeg(三)--ffmpeg实现视频播放 Android使用FFmpeg(四)--ffmpeg实现音频播放(使用AudioTr...

天王盖地虎626
01/14
0
0
最新FFmpeg音视频核心技术精讲与实战(完整版)

第1章 课程导学与准备工作 全民娱乐时代,需要音视频等多媒体产品层出不穷,但会处理音视频数据的工程师却极度匮乏,进入音视频开发领域正当时,这门课程就是为这样的你而生。来吧!加入我们...

L272339
01/06
0
0
2018FFmpeg音视频核心技术精讲与实战(已完结)目前最新

第1章 课程导学与准备工作 全民娱乐时代,需要音视频等多媒体产品层出不穷,但会处理音视频数据的工程师却极度匮乏,进入音视频开发领域正当时,这门课程就是为这样的你而生。来吧!加入我们...

聂友华
2018/12/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

rabbitmq

灰暗
24分钟前
0
0
Flink

flink HA部署 flink搭建,采用分布式部署方式,分别为A,B,C三个节点。其中A为master;A,B,C为worker。 本文使用的用户是hadoop用户(自己新建) 先决条件 Java 1.8.x or higher scala 自己使用...

-九天-
51分钟前
1
0
数据中台和传统数仓的区别

中台系统把业务层同性的算法能力,服务能力,业务能力高度集成,有效组织 ,动态规划。更好的帮助上层业务。 今天就让我们看看关于数据中台的问答吧。 1 Q : 什么是数据中台? A : 数据中台是...

hblt-j
53分钟前
4
0
Java在什么时候会出现内存泄漏

在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对...

群星纪元
56分钟前
2
0
android 打开摄像头

private SurfaceHolder mHolder; private SurfaceView mSurfaceView; private Camera mCamera; mSurfaceView = (SurfaceView) this.findViewById(R.id.camsurfaceView1); mHolder = mSurface......

jingshishengxu
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部