图像视频编码和FFmpeg(5)-----FFmpeg关键结构体的关系和编解码的基本过程

        之前都没怎么讲和使用FFmpeg,现在开始来讲一下FFmpeg。

        下面列出了使用FFmpeg时会用到的一些比较重要的结构体和他们之间的关系

         

        每一个结构成员的解释和使用,可以分别查看一个博客和FFmpeg学习资料,我这里就不说了。

        无论是编码还是解码,AVCodecContext都是一个关键结构,它指明了编码类型和对应的编/解码器。我们必须手动为它设定编解码器。

 

        下面说一下编解码的过程。

        编码:

        1.     初始化AVFormatContext,即获得格式上下文的信息。这个很多重要。

        2.     new一个AVStream结构,从而获得AVCodecContext结构。

        3.     对AVCodecContext结构进行设置。比如设置分辨率、帧率、码率等东西。在后面的编码中,会根据这里的设置进行处理的。

        4.     查找对应格式的编码器。

        5.     分配一个AVFrame结构保存将要编码的图像。

        6.     用编码器编码并写入视频文件中。

  

        解码:

        1.     利用视频名获得并初始化AVFormatContext结构。

        2.     通过AVFormatContext结构得到AVStream结构(在前面的关系图中可以看到他们之间的联系),并进一步得到AVCodecContext。

        3.     查找对应视频格式的解码器。

        4.     分配AVPacket结构用来存放视频数据,并分配一个AVFrame结构用于保存解码后的图像。

        5.     从视频文件中读取数据,并放到AVPacket中。

        6.     解码器解码并存放到AVFrame中。

 

 

你可能感兴趣的:(ffmpeg)