基础"/>
3、FFmpeg基础
1、FFmpeg 介绍 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库。 2、FFmpeg 组成 - libavformat:用于各种音视频[封装格式]封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能; libavcodec:用于各种类型声音/图像编解码; libavutil:包含一些公共的工具函数; libswscale:用于视频场景比例缩放、色彩映射转换; libswresample - 提供音频重采样,采样格式转换和混合等功能。 libavfilter - 各种音视频滤波器。 libpostproc - 用于后期效果处理,如图像的去块效应等。 libavdevice - 用于硬件的音视频采集、加速和显示。 libpostproc:用于后期效果处理; ffmpeg:该项目提供的一个工具,可用于格式转换、解码或[电视卡]即时编码等; ffsever:一个 HTTP 多媒体即时广播串流服务器; ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示; 3、FFmpeg 常用知识 1.封装格式 MPEG-4,其中 MPEG-1 和 MPEG-2 是采用相同原理为基础的预测编码、变换编码、 熵编码及运动补偿等第一代数据压缩编码技术; MPEG-4(ISO/IEC 14496)则是基于第二代压缩编码技术制定的国际标准,它以视听媒体对象为基本单元,采用基于内容的压缩编码,实现数字视音频、图形合成应用及交互式多媒体的集成。 MPEG 系列标准对 VCD、 DVD 等视听消费电子及数字电视和高清晰度电视 (DTV&&HDTV)、 多媒体通信等信息产业的发展产生了巨大而深远的影响. AVI,音频视频交错(Audio Video Interleaved)的英文缩写。 AVI 格式调用方便、图像质量好,压缩标准可任意选择,是应用最广泛、也是应用时间最长的格式之一。 FLV , FLASH VIDEO 的简称, FLV 流媒体格式是一种新的视频格式。由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,它的出现有效地解决了视频文件导入 Flash 后,使导出的 SWF 文件体积庞大,不能在网络上很好的使用等缺点。 2.编码格式 视频部分 h264、wmv、xvid、mjpeg(摄像头出来的每一帧都是mjpeg,缺点在于只有I帧、没有B帧、P帧) 音频部分 acc、MP3、ape、flac 3.文件封装格式和编码格式 音频帧和视频帧的帧率是不一致的,比如音频帧采样率是44.1khz,声音必须的源源不断输出,所以音频帧率可能为22.05帧,每个帧里存了2K采样数据. 视频解码- 软件解码:即通过软件让CPU来对视频进行解码处理,缺点耗电发热,优点兼容强
- 硬件解码:是将原来全部交由CPU(显卡上的一个核心处理芯片,处理计算机中与图形计算有关的工作)来处理的视频数据的部分交由GPU来做,优点不需要太好的CPU,发热低,缺点起步较晚,无法与软解相提并论,兼容性不强.硬解码都是固定帧率.比如只能60帧.
- 将音频码流(aac、ape等)解码成pcm
- YUV444:每一个Y对应一组UV分量,单位为字节,所以每个像素点有1个Y字节和1组(2字节,分别是U和V),所以为3字节.
- YUV422:每两个Y共用一组UV分量,所以每个每个像素点有1个Y字节和1/2组UV(1字节),所以为2字节.
- YUV420:每四个Y共用一组UV分量,所以4个像素点为6字节(4个Y、1个U、1个V),所以每2个像素点共用3字节,每个像素点为1.5字节(12bit).
- 对于YUV420格式(packed封装),每个像素点的Y,U,V是连续交*存储的。所以存储数据时,data[0]中就存的是yuvyuvyuv...
- 对于YUV420P格式(planar平面封装),先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V,比如:YYYYYYYY UU VV,所以Ffmpeg中存储P格式数据时,data[0]数组存y,data[1]数组存u,data[2]数组存v
- 对于YUV420SP格式(semi Planar半平面封装),先连续存储所有像素点的Y,然后连续存储UV,比如:YYYYYYYY UVUV
- Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
- Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
- Cb = U = -( 0.148 * R) - (0.291 * G) + (0.439 * B) + 128
- B = 1.164(Y - 16) + 2.018(U - 128)
- G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
- R = 1.164(Y - 16) + 1.596(V - 128)
- Y = 0.299R + 0.587G + 0.114B
- U'= (BY)*0.565
- V'= (RY)*0.713
- R = Y + 1.4075 * (V-128);
- G = Y - 0.3455 * (U-128) - 0.7169*(V-128);
- B = Y + 1.779 * (U-128);
- dts : 解码时间戳
- pts : 显示时间戳
- GOP : 一组完整的IBP帧画面
- I帧(intra picture) : 帧内编码帧,它将全帧图像信息进行 JPEG 压缩编码及传输,是一个完整图像
- B帧(bidirectional) : 双向预测内插编码帧,参考前面和后面两帧的数据加上本帧的变化而得出的本帧数据
- P帧 : 前向预测编码帧,参考前面而得出的本帧数据.
更多推荐
3、FFmpeg基础
发布评论