没有合适的资源?快使用搜索试试~ 我知道了~
音视频编解码相关的基础知识点。RGB与YUV表示。预测编码:帧内预测与帧间预测。I帧、P帧、B帧概念。PTS与DTS。GOP序列。H.264编码标准。H.264码流分析。数字音频信号。IDR帧与I帧的区别与联系。SPS与PPS。宏块。
资源推荐
资源详情
资源评论
视频
所谓视频编码就是指通过特定的压缩技术,将某个视频格式文件转换成另一种视频格式文件的方式。视频流传输中
最重要的编解码标准有国际电联(ITU-T,国际电信联盟)的H.261、H.263、H.264等,运动静止图像专家组(由ISO
国际标准化组织与IEC国际电子委员会于1988年联合成立 )的MPEG系列标准MPEG1、MPEG2、MPEG4 AVC等。
其中ITU-T H.264/MPEG-4 AVC是 ITU-T与ISO/IEC连手合作制订的新标准。ITU-T方面称之为H.264。但ISO/IEC的
则将这个新标准归纳于MPEG系列,称为MPEG-4 AVC。
而H.265则被视为是ITU-T H.264/MPEG-4 AVC标准的继任者,又称为高效率视频编码(High Efficiency Video
Coding,简称HEVC)。
图像的物理现象
牛顿利用三棱镜将太阳光分解成彩色的光带。各色光因其所形成的折射角不同而彼此分离,就像彩虹一样,所以白
光能分解成多种色彩的光。经过不断地实验发现,红绿蓝(RGB)三种色光无法被分解,所以称它们为三原色光,
等量的三原色光相加会变成白光。
假设一部手机屏幕分辨率是1280x720,说明在水平方向有720个像素点,垂直方向有1280个像素点,所以手机屏
幕就有1280x720个像素点。每个像素点都由三个子像素点组成。当需要显示某个图像时,就会把这副图像的每个
像素点的RGB通道分别对应的屏幕上的子像素点绘制到屏幕上,从而显示整个图像。
图像的表示
RGB表示
一个图像可以由RGB组成,一般常用的表示方式有:
浮点表示
取值范围为0.0~1.0,在OpenGL ES中对每个子像素点的表示就是这种方式
整数表示
取值范围为0~255或者00~FF(十六进制) 8位表示一个子像素,32位表示一个像素,比如RGBA_8888格
式。而Android中RGB_565的表示方法为16位数据表示一个像素,R用5个bit表示,R使用6个bit,B用5
个bit。
在计算一张1280x720的RGBA_8888图像的大小,可采用: 1280 * 720 * 4=3.516MB 这也是Bitmap在内存中占用
的大小。所以每一个图像的裸数据都是很大的,直接在网络传输或者存储到本地文件不太可能,于是就有了图像的
压缩格式,比如JPEG、PNG、WEBP等。 但是这种压缩不能直接应用于视频压缩,因为对于视频来说,还有时域上
的因素要考虑,也就是说,不仅要考虑一张图像的编码,还要考虑多个帧(图像)的联系,能够进一步减少视频。
YUV表示
对于视频帧的裸数据,其实更多的是YUV数据格式的表示,YUV主要应用于优化彩色视频信号的传输,且能兼容老
式黑白电视。与RGB相比,YUV只需要占用极少的频宽(RGB需要三个独立的视频信号同时传输)。YUV中Y代表
明亮度,也称灰阶值;U与V表示的则是色度(色调和饱和度)也可以记作:YCbCr。如果只有Y数据,那么表示的
图像就是黑白的。
YUV的采样方式有三种:
1. YUV 4:4:4采样,每一个Y对应一组UV分量。
2. YUV 4:2:2采样,每两个Y共用一组UV分量。
3. YUV 4:2:0采样,每四个Y共用一组UV分量。
我们常见的NV21与I420格式都是属于YUV420。但是NV21属于YUV420SP ,而I420属于YUV420P。
如上图,可以看到NV21的uv数据是 vu交替的,而Y是连续的。Y是平面格式,UV是打包格式 ,称之为
YUV420SP。而I420(YU12)则是平面格式,称之为YUV420P。我们可以计算一帧1280x720的视频帧,用
YUV420P的格式表示,数据量为: 1280 x 720 x 3 / 2 = 1.318MB ,如果fps是30,按照一般电影长度为90分钟
计算,那么这部电影用YUV420P存储,数据量为:208G。 所以仅用这种方式来存储电影肯定是不行的,更别说网
络上进行流媒体的播放了,因此就需要进行视频编码。
视频编码
视频是连续的图像序列,由连续的帧构成,一帧即为一幅图像。由于人眼的视觉暂留效应,当帧序列以一定的速率
播放时,我们看到的就是动作连续的视频。 这么多连续的图像数据如果不经过编码的数据量太大了。比如一个
1920x1080分辨率,24位,每秒30帧的视频,一秒钟需要 1920\*1080\*24\*30=1492992000 位数据,大约为:
1.5Gbps(bps: 位/秒 )。
左图是一个时长为2小时,经过编码封装后的的mp4文件;右图则是从mp4中抽取出来的一分钟的解码后的视频数
据。可以看到2小时的音频+视频文件大小为516M,而单独的未压缩编码的1分钟的yuv图像数据为1.73G。
因此我们可以先简单的理解编码最主要的目的就是压缩数据。所谓视频编码就是指通过压缩技术,将原始视频格式
的文件转换成另一种视频格式文件。
原始视频压缩的目的是去除冗余信息。大量统计表明,同一副图像的临近像素之间有着相关性,相邻图像之间内容
也存在相似,也就是说有大量的冗余信息。编码就是为了压缩 ,要实现压缩,就要设计各种算法,将视频数据中的
冗余信息去除,包括空间上的冗余和时间上的冗余。
如何编码?
编码的关键步骤有:
剩余12页未读,继续阅读
资源评论
川峰
- 粉丝: 1346
- 资源: 34
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功