Qt之FFMpeg 实现视频解码编码转码流程详解
Posted ze言
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt之FFMpeg 实现视频解码编码转码流程详解相关的知识,希望对你有一定的参考价值。
一、FFmpeg模块分类
libavformat,格式封装,包含了多媒体格式的分离器和混流器的库
libavcodec,包含音频/视频解码器和编码器的库
libavutil,包含简化编程功能的库,如通用音视频工具,像素、IO、时间等工具
libavfilter,包含媒体过滤器的库,可以用作音视频特效处理,添加滤镜、水印
libavdevice,包含输入输出设备的库,如摄像头、拾音器
libswscale,视频图像缩放,像素格式互换的库
libavresample,libswresample,重采样,类似图像缩放
二、FFmpeg核心结构体
AVFormatContext:封装格式上下文结构体,保存了视频文件封装格式相关信息,如文件名、音视频流、时长、比特率等信息;
AVCodecContext:编解码器上下文结构体,保存了视频(音频)编解码相关信息,如编解码器类型、视频宽高、音频通道数、采样率等;
AVCodec:每种视频(音频)编解码器(例如H.264解码器)对应一个该结构体;
AVStream:存储音频或视频流信息的结构体;
AVPacket:存储音频或视频编码数据;
AVFrame:存储一帧解码后像素(采样)数据(原始数据)。
三、播放流程
四、实现FFmpeg解码
解码实现的是将压缩域的视频数据解码为像素域的 YUV 数据。实现过程大致如下图所示。
实现过程描述:
- 有待解码的压缩域的视频。
- 根据压缩域的压缩格式获得解码器。
- 解码器的输出即为YUV像素数据
五、实现FFmpeg转码
1、传统的编码转换步骤
2、转码流程图
拓展:
1、编码的目的:
压缩媒体数据。在图像或音频压缩的时候,可借助图像特性或声音特性进行压缩,可以达到比通用文件压缩技术更高的压缩比。
2、封装的目的:
2.1 为了在一个文件流(Stream)中能同时存储视频流、音频流、字幕流、附件(t)、数据(d)等内容。
2. 2确保数据在网络环境下实现可靠快速传输。
ffmpeg转码flv到avi《转》
一个视频转码器,则需要对视频进行解码,然后再对视频进行编码,因而相当于解码器和编码器的结合。
下面图列举了一个视频的转码流程。
输入的视频封装格式是flv 视频编码标准是H.264 音频编码标准是AAC;
输出的视频封装格式是avi,视频编码标准是MPEG2,音频编码标准是MP3。
从流程可以看出:
首先从输入视频中分离出视频码流和音频压缩码流,
然后分别将视频码流和音频码流进行解码,
获取到非压缩的原始像素数据/音频采样数据,
接着将非压缩的像素数据/音频采样数据重新进行编码,
获得重新编码后的视频码流和音频码流,
最后讲视频码流和音频码流重新封装成一个文件。
以上是关于Qt之FFMpeg 实现视频解码编码转码流程详解的主要内容,如果未能解决你的问题,请参考以下文章