视频压缩基础普及:I, P, B-frame, 宏块, 帧内(间)压缩等
2010-09-28 17:57:36| 分类: 视频相关 | 标签: |字号大中小 订阅
原理
从本质上来说,视频就是一种 彩色 像素点 的三维 排列 。 其中两个维度反映画面在空间上(水平和垂直)的运动方向,另一维度则反映 时间域 。 数据帧 是指某一时间点下的一组像素点。 简单说,一帧就是一副 静止画面 。
视频数据中必然会包含一些有关空间和时间的 重复数据 。 因此只要通过记录一帧中(空间差别)或几帧之间(时间差别)的差别,就可以对相同之处统一编码。 这种基于空间差异的编码利用了人眼对颜色细微变化的识别不如对亮度变化那么敏感的原理,将画面中颜色相近的不同色块替换成某一种颜色的色块,替换方法类似jpeg 图像压缩技术( JPEG图像压缩FAQ )。 在基于时间差异的编码中,被编码的只是帧与帧之间变化的部分,因为通常在连续的多帧中很大一部分像素点都没有变化。
视频质量
大多数的视频压缩都是 有损的-- 其运行前提是压缩之前视频中很多数据对于达到看不出毛病的高质量是多余的。 比如, DVD 所使用的视频编码标准 MPEG-2 就可以将长达两个多小时的视频数据压缩至原大小的十五至三十分之一,同时生成人们常说的适合 标清 电视的 高质量 画面。
视频压缩其实就是在 磁盘 空间、视频质量以及所需 播放设备 的成本之间进行 取舍 。 不过,如果使用有损方式过分压缩视频,就会出现图像 瑕疵 (有时候甚至影响观看)。
通常视频压缩要处理的就是一组组相邻的正方形 像素点 ,我们称其 宏块 (Macroblock )。 视频压缩编解码器 对这些一组组、一块块的像素点进行逐帧比较,然后仅对有 差别 的部分进行处理。
如果视频中没有运动画面,这种方法非常有效。 比如,一个包含静止文字的帧重复显示时只需要传递极少的数据。 对于含有大量动作的视频,帧与帧之间会有大量像素点发生变化。 发生变化的像素点越多,编解码器需要处理的数据越多,只有这样才能记录下大量像素点的变化。
如果视频中有爆炸、火焰、数千只鸟扇动翅膀或其他含有高频动作的图像,这些图像质量就会降低;或者在 可变比特率 的作用下,比特率提高使这些图像拥有和普通场景一样的质量。
程序提供者可以在视频文件进入传播渠道之前,控制视频的压缩比率。DVD , 蓝光 影碟以及 高清DVD 在制作过程中已进行了视频压缩。鉴于蓝光和高清碟有充足的存储空间,因此相比 互联网 或是 手机 上的视频片段,他们采用的视频压缩比率都较小。 各种用于将视频存储在硬盘或其他光盘上的软件通常都会降低视频的质量,但也有例外的时候。
在视频 后期制作 中也可以使用压缩率很小甚至不压缩的高比特率 视频编解码器 ,但得到的文件会很大。所以对于用来传播分享的视频几乎从不使用这种编解码器。 使用有损压缩一旦过度,使视频质量受损,要想恢复原来的质量是不可能的。
帧内压缩 VS 帧间压缩(intra frame vs interframe)
帧间压缩是压缩视频时用到的一种很强的技术。 帧间压缩是指借助当前帧之前或之后连续的若干帧内容来压缩当前帧;帧内压缩是指仅使用当前帧内容完成对当前帧的压缩,其实就相当于 图片压缩 。
对于帧间压缩最常用的方法就是将视频中每一帧与其前一帧进行比较。 如果前后两帧中包含完全相同的部分,程序会发出指令一点一点的将两帧相同的部分从前一帧复制到紧随其后的一帧。 如果帧与帧之间画面变化较简单,程序会发出指令对已复制的一帧进行位移、旋转、增加或降低亮度等操作使其完成变化。
虽然这类指令比上面提到的复制指令要长,但和帧内压缩的指令相比还是非常短的。 对于只是用于观看的节目,帧间压缩非常好用。不过如果视频中的一些片段需要剪辑,这种方法就会产生各种问题。
由于帧间压缩需要将数据从某一帧复制到另一帧,如果被复制的某一源帧被剪掉或是在转播时丢失,那么接下来一些需要复制该帧内容的帧就无法正常显示。 不过像 DV 之类的设备会使用帧内压缩单独处理每一帧。
编辑帧内压缩的视频几乎和编辑原始视频一样简单。只要找到每一帧的开始和结束,复制自己需要的帧,扔掉那些不要的即可。
帧内和帧间压缩另一个区别就是帧内压缩的视频每一帧所包含的数据量是相似的。 在多数帧间压缩视频中,某些帧(如 MPEG-2 中的“ I frames” )不能从其他帧中复制数据,因此就需要比其前后一些帧更多的数据。
我们可以开发一种电脑上使用的视频编辑器,当含有其他帧所需数据的I-frame 帧被剪掉时,编辑器会指出因此而出现的问题。 正是基于这种思路如今我们也可编辑像 HDV 这样的新格式。 不过,在处理同样画质的视频时,这种编辑工作所需的计算机硬件配置要远高于帧内压缩视频的编辑工作。
I, P, B-frame
视频压缩 中要用到的图像(帧)类型共有三种: I?frame 帧,P?frame 帧, 和B?frame 帧。 I?frame 就是一张‘ 内部编码的图片’ ,其实就相当于一张完整的图片,和传统的图片文件一样。P?frame 帧和B?frame 帧内只包含部分图像信息,因此他们所需的存储空间小于I?frame 帧,视频压缩率就是这样提高的。
P?frame 帧(可预测的帧)只包含与前一帧中不同的部分。 举例说,如果在一个场景中,一辆汽车从一个静止的背景前驶过,那么P?frame 帧中只需要包含汽车的运动。 压缩程序没必要将没有变化的背景存入P?frame 帧,这就节省了存储空间。 P?frame 帧也被称为delta-frame 帧 。B?frame 帧(双向可预测帧)可以节省更多存储空间,因为它可以利用本身与前后各帧的差别来确定自身内容(即只存储他与之前之后各帧所不同的内容)。
从本质上来说,视频就是一种 彩色 像素点 的三维 排列 。 其中两个维度反映画面在空间上(水平和垂直)的运动方向,另一维度则反映 时间域 。 数据帧 是指某一时间点下的一组像素点。 简单说,一帧就是一副 静止画面 。
视频数据中必然会包含一些有关空间和时间的 重复数据 。 因此只要通过记录一帧中(空间差别)或几帧之间(时间差别)的差别,就可以对相同之处统一编码。 这种基于空间差异的编码利用了人眼对颜色细微变化的识别不如对亮度变化那么敏感的原理,将画面中颜色相近的不同色块替换成某一种颜色的色块,替换方法类似jpeg 图像压缩技术( JPEG图像压缩FAQ )。 在基于时间差异的编码中,被编码的只是帧与帧之间变化的部分,因为通常在连续的多帧中很大一部分像素点都没有变化。
视频质量
大多数的视频压缩都是 有损的-- 其运行前提是压缩之前视频中很多数据对于达到看不出毛病的高质量是多余的。 比如, DVD 所使用的视频编码标准 MPEG-2 就可以将长达两个多小时的视频数据压缩至原大小的十五至三十分之一,同时生成人们常说的适合 标清 电视的 高质量 画面。
视频压缩其实就是在 磁盘 空间、视频质量以及所需 播放设备 的成本之间进行 取舍 。 不过,如果使用有损方式过分压缩视频,就会出现图像 瑕疵 (有时候甚至影响观看)。
通常视频压缩要处理的就是一组组相邻的正方形 像素点 ,我们称其 宏块 (Macroblock )。 视频压缩编解码器 对这些一组组、一块块的像素点进行逐帧比较,然后仅对有 差别 的部分进行处理。
如果视频中没有运动画面,这种方法非常有效。 比如,一个包含静止文字的帧重复显示时只需要传递极少的数据。 对于含有大量动作的视频,帧与帧之间会有大量像素点发生变化。 发生变化的像素点越多,编解码器需要处理的数据越多,只有这样才能记录下大量像素点的变化。
如果视频中有爆炸、火焰、数千只鸟扇动翅膀或其他含有高频动作的图像,这些图像质量就会降低;或者在 可变比特率 的作用下,比特率提高使这些图像拥有和普通场景一样的质量。
程序提供者可以在视频文件进入传播渠道之前,控制视频的压缩比率。DVD , 蓝光 影碟以及 高清DVD 在制作过程中已进行了视频压缩。鉴于蓝光和高清碟有充足的存储空间,因此相比 互联网 或是 手机 上的视频片段,他们采用的视频压缩比率都较小。 各种用于将视频存储在硬盘或其他光盘上的软件通常都会降低视频的质量,但也有例外的时候。
在视频 后期制作 中也可以使用压缩率很小甚至不压缩的高比特率 视频编解码器 ,但得到的文件会很大。所以对于用来传播分享的视频几乎从不使用这种编解码器。 使用有损压缩一旦过度,使视频质量受损,要想恢复原来的质量是不可能的。
帧内压缩 VS 帧间压缩(intra frame vs interframe)
帧间压缩是压缩视频时用到的一种很强的技术。 帧间压缩是指借助当前帧之前或之后连续的若干帧内容来压缩当前帧;帧内压缩是指仅使用当前帧内容完成对当前帧的压缩,其实就相当于 图片压缩 。
对于帧间压缩最常用的方法就是将视频中每一帧与其前一帧进行比较。 如果前后两帧中包含完全相同的部分,程序会发出指令一点一点的将两帧相同的部分从前一帧复制到紧随其后的一帧。 如果帧与帧之间画面变化较简单,程序会发出指令对已复制的一帧进行位移、旋转、增加或降低亮度等操作使其完成变化。
虽然这类指令比上面提到的复制指令要长,但和帧内压缩的指令相比还是非常短的。 对于只是用于观看的节目,帧间压缩非常好用。不过如果视频中的一些片段需要剪辑,这种方法就会产生各种问题。
由于帧间压缩需要将数据从某一帧复制到另一帧,如果被复制的某一源帧被剪掉或是在转播时丢失,那么接下来一些需要复制该帧内容的帧就无法正常显示。 不过像 DV 之类的设备会使用帧内压缩单独处理每一帧。
编辑帧内压缩的视频几乎和编辑原始视频一样简单。只要找到每一帧的开始和结束,复制自己需要的帧,扔掉那些不要的即可。
帧内和帧间压缩另一个区别就是帧内压缩的视频每一帧所包含的数据量是相似的。 在多数帧间压缩视频中,某些帧(如 MPEG-2 中的“ I frames” )不能从其他帧中复制数据,因此就需要比其前后一些帧更多的数据。
我们可以开发一种电脑上使用的视频编辑器,当含有其他帧所需数据的I-frame 帧被剪掉时,编辑器会指出因此而出现的问题。 正是基于这种思路如今我们也可编辑像 HDV 这样的新格式。 不过,在处理同样画质的视频时,这种编辑工作所需的计算机硬件配置要远高于帧内压缩视频的编辑工作。
I, P, B-frame
视频压缩 中要用到的图像(帧)类型共有三种: I?frame 帧,P?frame 帧, 和B?frame 帧。 I?frame 就是一张‘ 内部编码的图片’ ,其实就相当于一张完整的图片,和传统的图片文件一样。P?frame 帧和B?frame 帧内只包含部分图像信息,因此他们所需的存储空间小于I?frame 帧,视频压缩率就是这样提高的。
P?frame 帧(可预测的帧)只包含与前一帧中不同的部分。 举例说,如果在一个场景中,一辆汽车从一个静止的背景前驶过,那么P?frame 帧中只需要包含汽车的运动。 压缩程序没必要将没有变化的背景存入P?frame 帧,这就节省了存储空间。 P?frame 帧也被称为delta-frame 帧 。B?frame 帧(双向可预测帧)可以节省更多存储空间,因为它可以利用本身与前后各帧的差别来确定自身内容(即只存储他与之前之后各帧所不同的内容)。