动图如何做成的?

提问

卓老师您好,特别好奇您是怎么处理动图的,包括局部放大,重点勾画,最最最关键的,是怎么做到生成的GIF动图还那么小的! 记得以前您在一篇推文里说过以后会专门写一篇来教教大家,不知您有时间能不能赐教哇 祝好!

动图如何做成的?

回复

在推文中增加动图,相比于静态图片来讲,可以表达更多、更丰富的内容:例如智能车运行情况、电路工作波形、内容讲解过程的批注等等。即使作为普通插图背景也使得原本枯燥技术性推文充满活跃信息。当然,缺点就是增加了微信阅读时手机数据流量的消耗。

虽然在推文中使用插入视频可以提供更清晰、时间长、有音效的媒体,但视频数据流量大、上载审核时间长、每个推文限三个等因素,在使用上不如动图灵活。

动图如何做成的?
现在微信公众号推文的动图,实际上是一种比较古老的图片格式-GIF(Graphics Interchange Format)文件,早期用于较简单的图像、小动画或者低分辨了视频剪辑。不知道为什么公众号中现在返老还童,支持这样的格式。

由于这种格式历史比较悠久,因此制作GIF文件的在线工具和独立的软件工具很多。大家可以很容易找到很好的容易使用的免费工具。针对你提问中的好奇点,下面仅仅介绍如何形成带有局部放大和批注的动图,如何压缩动图。

形成带有局部放大和批注的动图

所有动图文件都是由一个个单独图片组成的,这些图片连续播放就形成动态图像。这些图片可以由软件逐帧编辑生成,也可以直接通过动态抓屏软件将屏幕播放的视频采集下来形成。

在推文中这些带有放大、批注的图片就是是对我编写和使用的教学软件-TEASOFT的屏幕进行动态抓拍的,然后通过GIF编辑软件形成GIF文件。

动图如何做成的?

TEASOFT软件是我用来上课教学的软件,它比较好的适应理论性强的课程内容展示,同时也能够完成教堂动态交互以及MOOC课程的录制。例如前几天推文所介绍本学期信号与系统课程同学通过这个公众号参与课堂讨论与练习。

下面视频中就是直接使用TEASOFT软件录屏所形成的MOOC课程作业讲解,其中对于作业的讲解过程展示了该软件再使用中的特点。

压缩动图

所有希望在推文中使用动图的同学都会发现一个要命的限制:微信公众号中的动图要求文件不能够超过2M。这个限制也许是为了节省大家的数据流量。但这个限制给动图的使用设置了一个比较高的门槛。正是这个限制,使得动图的表达时间受到限制,在网页上的动图大部分仅仅够一个表情的变化的时间,或者简单的循环重复过程。为了延长动图的时间,就需要寻找压缩动图文件的方法。

GIF文件本身在编码仅仅采用了非常简单的压缩算法:采用256调色板的方式,在损失一定色彩质量的情况下,仅适用一个字节就可以表达一个彩色像素点;采用LZW无损数据压缩算法进一步减小文件大小。

在很多GIF文件编辑软件中都提供了一定压缩动图的方法,下面就我所使用的GIF Movie Gear软件给大家介绍一下进行动图压缩的手段,进而提高每张动图可表达的时间长度。

方法1:图片裁剪

这是一个简单粗暴,但非常有压缩效果的方法。通过对于图像中不需要的部分进行裁剪,删除无效信息,使得2M数据文件中只保留感兴趣的图像信息。

动图如何做成的?

方法2:压缩调色板

如果图片中有效颜色种类不多的情况下,将调色板中颜色数量减小,可以降低每个像素所占的BIT位数。比如将调色板中的颜色降低到32,那么每个像素只占5个bit,比256调色板就压缩了5/8.

动图如何做成的?

这种方法对于场景颜色丰富的图像来说,就会降低图片的颜色质量。

方法3:抽帧

即压缩图像的采样率。这样做损失了动图动态的细腻,使得图片出现不连贯的感觉。

动图如何做成的?

请注意,相比于前面两种,抽帧所到来的压缩倍数,实际上和抽帧的比率不成正比。例如,进行2:1的抽帧,最后的数据文件并不是压缩两倍。

方法4:减小分辨率

例如将原来800600的图像,压缩到480320,就可以将像素个数减少到原来的30%左右。所带来的后果就是图片变得模糊了。

动图如何做成的?

方法5:帧间差

将GIF文件中相邻的图片进行比较,对于没有变化的像素使用0表示。如果相连两个图片镜头中的景象比较接近,这样,就会出现大片的连续0的像素。这就会使得LZW压缩算法达到更高的压缩比率。在GIF重建的时候,浏览器会自动补齐这些大片连续为0的像素,从而还原图片。

动图如何做成的?

这种方法对于固定镜头拍摄的场景,或者屏幕抓取的操作过程中的动图,压缩效果非常好。

比如上面方法1~5中,显示GIF Movie Gear软件压缩方法使用过程的动图,就是对抓屏图片序列采用帧间差进行压缩,可以达到10倍以上的压缩效果。

但有两个因素,会使得帧间差的压缩能力大大降低。一是图像中的噪声;二是镜头的晃动。

摄像头拍摄固定场景,虽然图像看起来没有什么变化,但是由于噪声,使得相邻两帧图片对应的像素并不相等,因此就无法通过帧间差减少数据量。因此,需要通过图片像素冻结手段,降低图片噪声波动。具体方法就是将相邻两帧图片中数值相差小于一定阈值的像素自动设置成相同的数值。这个阈值可以根据图像拍摄过程的噪声、环境光线的干扰以及压缩倍率的要求进行设置。

阈值越高,压缩倍数越高,但在图片中会带来图像的伪影。仔细观察下图就会看到信标灯闪烁所留下的伪影痕迹。

动图如何做成的?

消除晃动是提高帧间差效果的关键。如果在拍摄时能够使用固定的拍摄架来稳定镜头是最好的,也可以使用专业的手持稳定图像拍摄器辅助稳定镜头。

但是,在现场拍摄时,往往不一定有条件固定镜头,特别是使用手机拍摄图像中,就会出现很严重的抖动现象。后期制作的时候,可以使用一些镜头消抖算法来进行后期处理,使得镜头变得稳定。下图就是对原本非常晃动的镜头经过稳定后处理的效果,可以看到镜头的中心始终稳定在展示摩托车的中心。

动图如何做成的?

上面的像素冻结算法和图片消抖算法都在TEASOFT软件中具备,所以使用TEASOFT软件也大大方便我进行课程内容的准备了。

但是如果拍摄过程中,还存在着镜头放大倍数的变化,那么使用简单的消抖算法就无法彻底根除稳定镜头。它只能再一定程度上,减少镜头的晃动。

动图如何做成的?
所以在拍摄时,尽量使用统一的焦距完成拍摄,这位后期制作GIF文件会打下良好的基础。

综合利用前面的一些方法,就可以大大压缩GIF文件的长度,进而可以在2M字节的文件中表现更多的动态过程,传递更多的信息。

动图如何做成的?
本文最前面封面中的女生,她在学校文艺演出中的录像片段是最后一个动图。由于手拍摄晃动厉害,同时还有镜头焦距的变化,综合前面各种压缩的方法,在2M字节的文件中也只能表现这短短的10秒钟的过程。