Simple concept about video


img

前言

上篇讲了一些图片的基础构成和相关概念,实际上这些也都可以用在视频上

图片的延伸

视频本质上是图片在时间上的延伸,图片拥有的分辨率,宽高比,像素也完全适用于视频,同时视频引入了时间维度,而与时间关系起来后,也就有了更多概念,诸如比特率,关键帧。

视频格式

首先还是要看格式,针对移动设备而言,android支持主流的MPEG4-H.264和VP8(WebM), 原生支持这两种是有原因的,HTML5标准默认也支持这两种,这使得大家形成一种常规约定,如果内容源能在浏览器内播放,那么也能在android上播放;基本上是的视频的生成和消费做到一次生成,出处播放。

  • MPEG4-H.264 很奇怪的名字对么,MPEG是Motion Picture Experts Group的缩写,是98年后新一代的视频编码规范,分为AVC(Advanced Video Config)和SP(Simple Profile)两大类, 平时讲的.MP4实际上就是说MPEG4-H264 AVC这种格式,.3GP一般指的就是MPEG4-H264 SP;
    这里有一张wiki上的示意图,包含了其他几种格式的主要用途;

220px-MPEG.svg.png

  • VP8 VP8或者说WebM,其实也很是Android2.3以后就支持的格式,压缩率甚至优于MP4,但是MP4已经被广泛接受并使用,所以并没有形成主流,当然也有其他原因,比如WebM的功能因版本而异;需要注意的是WebM指的是Google冲ON2那里获取的许可开源版的的VP8;

你知道视频压缩率惊人么

现在回到另一个话题,就是视频是怎么构成的,压缩的大致肌理又是什么?

帧简单理解可以看成是某一时刻视频的一个切面,也就是一张图片;连续的很多帧最终构成了一个在时间上连续视频;从这个概念讲,帧符合在讲图片时图片时的各种公式,定义,包括大小计算;

帧率

帧率描述的是一秒钟内包含多少帧,直接影响视频的流畅和细腻;由于人眼的识别能力,一般24帧就会让眼球产生连贯错觉,目前视频的主流帧率主要是24帧和30帧,再高也没有多大意思,人眼已经无法分辨;

关键帧

做动画的时候有个关键帧的概念,这个概念实际上就是从视频上的来的;为什么有关键帧,实际上适合视频压缩存储相关联的,根据已经知道的单帧画面是ARGB,帧率达到24,那么一秒钟产生的视频大小是很惊人的, 我么以480*800的分辨率试着计算一下大小:

size per second = 480 * 800 * 3 * 24 bytes = 27648000 bytes = 26.3671875 MB

每秒大小达到了26MB,1分钟则是26 * 60 MB= 1.54 GB, 如果换成高清HD(1920 * 1080)数量更惊人。
这样的大小规模完全超出了我们的日常认知,比如用优酷客户端,40分钟的视频大小只要200MB左右,理论和实际这么大的差距是如何引起的?

简单来说,视频的存储不是把每一帧的所有像素信息都独立存储,通过一定间隔选取关键帧,关键帧周围的帧与关键帧进行数据上的比较,类似于diff,比如说10帧选一个关键帧,存储的时候只需要将关键帧和另外9个差量数据存储即可,这样就可以大大减少占用空间,当完整算法并不是这样一句话就能跳过去的;

小结

可以讲视频的处理是一门独立的学科,可以专门研究,本文旨在介绍其基本原理;

参考

  • Pro Android Graphic


作者:小文子
本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.