【FFmpeg+Qt开发】编码流程 普通视频编码+示例详解 一学就会

目录 一、FFMPEG 编码 1.1编码流程 1.2编码示例 🚗本文主要是基于FFMPEG技术解码部分,继续延…

目录

一、FFMPEG 编码

1.1编码流程

1.2编码示例


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

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

一、FFMPEG 编码

1.1编码流程

🔴编码:像素数据编码后➡压缩码流数据。

例如:将YUV的像素数据编码后得到H.264的压缩码流数据。

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

编码与解码同理,在使用FFMPEG编码视频文件之前,要确定完成 注册所有组件 这一步骤

其中,包含了相关结构体,本文不做过多阐述,详细可于文末链接,查看解码部分内容。

🔴编码思路分析:

  1. 注册所有的组件
  2. 根据需要的码流数据的格式,来猜测的需要的编码器
  3. 打开目标文件流
  4. 新建视频流
  5. 设置编码器上下结构的一系列参数,为编码做好准备
  6. 查找对应的编码器
  7. 打开编码器
  8. 读取普通视频数据 or 摄像头数据,进行解码,保证得到的是YUV的像素数据
  9. 先写入编码的头部信息
  10. 正式开始,进行编码,将一帧像素数据压缩成码流数据
  11. 保存写入文件中
  12. 得到最终的编码后的码流数据

下面,博主举例说明,对解码后的视频文件来进行编码,究竟是怎么样的操作呢?

1.2编码示例

🟢解码类的定义

具体实现如下:

🟢注册所有组件

🟢猜测输出格式

🟢打开视频文件流

🟢新建视频流

🟢编码器的参数设置:格式、宽、高、码率、帧率

🟢根据猜测到的编码器ID查找编码器

🟢找到之后打开编码器

🟢写入编码的头部信息,完成编码前的所有初始化工作

🟢开始真正的编码

🟢循环处理去接收码流数据、写入视频信息完成一帧编码

PS:编码的一帧像素数据给编码器进行编码的时候,可能一个 AVPacket 放不下,就需要两个
AVPacket。另外,将接收到的 AVPacket 码流数据写入视频信息中,完成一帧像素数据的编码。

🟢写入尾巴帧、关闭输入流、释放空间

🟢基本流程已经完成,接下来结合前一篇文章(解码部分),把解码得到的像素数据给编码类去实现编码

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

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

🔵H.264文件

🔵生成H.264打开效果

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

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

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

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

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

FFmpeg+Qt开发(四):转码流程 H.264 转(mov、mp4、avi、flv)等视频格式 示例详解_猿力猪的博客-CSDN博客

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

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

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

作者: HUI

发表评论

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

返回顶部