使用 FFmpeg 处理高质量 GIF 图片(3)

第一张GIF图片使用stats_mode=full(默认)。在整个展示过程中背景都没有变化,结果是天空因为明智的颜色得到了更多的关注。另一方面,作为结果,文本的淡出遭到了破坏:

centerimg

另一方面,第二张GIF图片是使用stats_mode=diff,这对移动物体很有帮助。事实上,文本淡出的表现更好,代价是天空的抖动产生了点小问题:

centerimg

获得最佳的颜色映射输出

paletteuse滤波器具有稍微多点的选项来操作。最明显的是抖动(dither选项)。唯一可有效预测的抖动是Bayer抖动,其它所有的抖动都是基于误差扩散。

如果你真的希望使用Bayer(因为你有速度或尺寸的限制),你可以使用bayer_scale选项来减小或增加它的方格图案。
pattern.

当然你同样可以通过使用dither=none来完全禁用抖动。

关于误差扩散抖动,你将会希望使用floyd_steinberg,sierra2和sierra2_4a。关于这些的详细信息,我将你重定向到这里DHALF.TXT.

对于懒惰的人,floyd_steinberg是最受欢迎的了,而sierra2_4a是sierra2(这个才是默认的)的一个快速/小型化的版本,扩散的原理是用三个像素来代替七个像素。heckbert是记录在我前面提到的论文中的一个,但只是作为参考文献引入的(你大概没想到)。

这里是不同的抖动模式的一个小预览:

原始的 (31.82K) :

centerimg

dither=bayer:bayer_scale=1(132.80K):

centerimg

dither=bayer:bayer_scale=2(118.80K):

centerimg

dither=bayer:bayer_scale=3(103.11K):

centerimg

dither=floyd_steinberg(101.78K):

centerimg

dither=sierra2(89.98K):

centerimg

dither=sierra2_4a(109.60K):

centerimg

dither=none(73.10K):

centerimg

最终,在使用了抖动之后, 你可能会对diff_mode选项感兴趣。在此引用一段话:

只有变化中的矩形区域会被预处理。这与 GIF的错切/偏移压缩机制比较类似。如果仅仅图像中的一部分在改变,这个选项有利于编码加速,并且该选项还通过一些方法限制误差扩散抖动的范围在矩形区域内,该矩形区域即是移动场景的边界 (如果场景变动不大,这更利于确定的输出同时,减小了移动噪声和输出更好地GIF压缩).

换句话说:如果想在图像里对背景使用误差扩散抖动,虽然背景是静态的,但可以通过这个选项限制误差在整幅图像的扩散。如下是与之相关的典型例子:

centerimg

注意仅当顶部和底部的文本同时在动的时候,猴子的脸部图像是怎么抖动的。 (注意最后面几帧).

Linux下编译FFmpeg之下载源文件并编译

Linux 编译升级 FFmpeg 步骤

CentOS 5.6 上安装 FFMPEG

Ubuntu下安装FFmpeg

Ubuntu 12.04下编译ffmpeg 

Ubuntu 14.04下PPA安装FFmpeg 2.2.2 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/3d5cf9575bce8fc85ab4f733c66e169c.html