Qt+ffmpeg仿格式工厂:编程中遇到的问题(五)

来源:互联网 发布:sql库位库存分配 编辑:程序博客网 时间:2024/05/23 07:25

FFMPEG配界面之视音频转换进度。FFMPEG是一个非常强大的视频处理库,几乎所有视频播放器处理软件都离不开ffmpeg。下面来说说ffmpeg如何用qt显示视频处理的进度。

说到进度,qt首先就会考虑到qprogressbar,qprogressbar首先设置进度条总长度,后设置进度数据。问题就是以什么数据作为总进度长度,以什么数据作为更新的进度长度?在我的程序是以视频的dts数据作为进度条更新和总长的。首先获取视频数据的最大长度所对应的dts的数值,所使用的方法是使用av_seek_frame函数,参数之一是视频的总长度。跳到视频长度最大值后,调用av_read_frame函数获取一帧,后读取帧的dts即是视频所对应最大dts后把dts通过信号与槽机制通知进度条设置最大进度。之后seek_frame到视频开始处,之后进行正常读取数据,每读取一帧数据就emit帧数据的dts。为什么使用dts不用pts呢?这是因为有的视频帧的pts没有设置为空,但dts一般都会设置。