【FFmpeg+Qt开发】转码流程 H.264 转(mov、mp4、avi、flv)等视频格式 示例详解

目录 一、FFMPEG 转码 1.1转码流程 1.2转码示例 🚗本文主要是基于FFMPEG技术…

目录

一、FFMPEG 转码

1.1转码流程

1.2转码示例


🚗本文主要是基于FFMPEG技术编解码,继续延申,对FFMPEG转码部分进行详细介绍

🚗希望对正在学习FFMPEG技术的小伙伴们有所帮助!

一、FFMPEG 转码

1.1转码流程

上文对FFmpeg编码部分进行介绍完之后,我们得到了H.264的压缩码流数据。

但是,我们常用的播放器是没办法打开这样的视频文件的,那么可以由此思考一下,如何才能够将这样的文件转换成我们能够播放的视频文件呢?

没错!这里就需要用到我们的转码了!

🔴转码:视频转码技术将视频信号从一种格式转换 成另外一种格式 (例如:H.254 转成 MP4)

mp4、flv、avi、mov等 这些皆为我们常看到的视频格式。

另外,许多现有的视频会议系统是基于旧的视频编码标准H.263而建立,而最新的视频会议系统采用了H.264基线规范。因此,实时视频转码技术是实现两者之间通信的必不可少的因素!

转码的流程图,如下图所示:

在正式进入转码的讲解之前,首先先了解一下相关的原理,这其中就包括了I/B/P帧,以及我们的时间基PTS/DTS设置。

I/B/P帧:

  • I帧又称为内部画面,是关键帧,它采用帧内压缩法,也称为“关键帧”压缩法;
  • B帧是双向预测的帧间压缩算法。当把一帧压缩成B帧时,它根据相邻的前一帧、本帧以及后一帧数据的不同点来压缩本帧,也即仅记录本帧与前后帧的差值。一般地,I帧压缩效率最低,P帧较高,B帧最高;
  • P帧由在它前面的B帧或者I帧预测而来,它比较与它前面的P帧或者I帧之间的相同信息或数据,也即考虑运动的特性进行帧间压缩。

举例说明:

如下图所示,红色I帧、蓝色P帧、绿色B帧

显示的顺序是1,2,3,4,5,6,解码的顺序就为1,2,5,3,4

为什么是这样呢?这里就涉及了PTS和DTS,下面来讲一下。

时间基 PTS/DTS:

  • PTS是渲染用的时间戳,我们视频帧是按照PTS时间戳来展示的
  • DTS是解码时间戳,用于视频解码的

1.如果没有B帧,PTS=DTS ;

2.如果有B帧,就需要更大的缓存来存储解码的帧数据。B帧要等I帧和P帧解码完成之后才开始。

1.2转码示例

🟢转码类的定义

🟢具体步骤如下

🟢测试主函数,代码如下:

需要改成avi、mov、flv等格式,同理,在主函数更改后缀即可!

保存的MP4文件及打开效果,如下所示:

🔵输入H.264文件,输出MP4文件

🔵生成MP4打开效果

🎧接着奏乐接着舞!是用MP4格式进行播放!咱们继续放动漫!

🚀FFMPEG技术—环境配置,详见:

FFmpeg+Qt开发(一):Windows下 环境搭建 详细步骤_猿力猪的博客-CSDN博客_windows下qt使用ffmpeg

🚀​FFMPEG技术—解码流程,详见:

FFmpeg+Qt开发(二):解码流程 详细分析+代码示例 这一篇就够了_猿力猪的博客-CSDN博客_ffmpeg解码教程

🚀FFMPEG技术—编码流程,详见:

FFmpeg+Qt开发(三):编码流程 普通视频编码+示例详解 一学就会_猿力猪的博客-CSDN博客

✍ 本文主要介绍了FFmpeg技术中的转码部分,如有疑问,欢迎各位评论区学习交流!

✍ 觉得博主写的不错的,麻烦!😀点赞!😀评论!😀收藏!支持一下哈!蟹蟹你们!

本文来自网络,不代表软粉网立场,转载请注明出处:https://www.rfff.net/p/4210.html

作者: HUI

发表评论

您的电子邮箱地址不会被公开。

返回顶部