Linux动态gif图的录制
前几天写了两篇博客vim的配置和Vim的自动代码补全插件YCM的安装和配置,反响还不错。为了演示效果,想着录制几张动态的gif效果图。抽空录制了几张,但是在Linux下录制的过程并不是一帆风顺。最开始想用大家推荐的byzanz,但是我在ubuntu13.04使用unity桌面(非gnome),byzanz依赖于gnome-panel, 所以只能在命令行下通过参数操作使用,很不方便。后来自己通过使用recordmydesktop录制成ogv视频再使用convert转换制作成gif。特将其注意事项记录下。不知道其他博友们再Linux下制作动态gif图片有啥推荐。
byzanz的安装与使用
Ubuntu下安装
sudo add-apt-repository ppa:fossfreedom/byzanz
sudo apt-get update
sudo apt-get install byzanz
你可以通过如下命令来完成录制过程:
byzanz-record -d 40 -x 0 -y 0 -w 400 -h 320 byzanz-demo.gif
其中:
- -d 40 为录制的时长为 40 秒
- -x 0 录制区域的横坐标
- -y 0 录制区域的纵坐标,记住:屏幕右上角为原点(0,0)
- -w 400 录制区域的宽度
- -h 320 录制区域的高度
byzanz-demo.gif 保存的文件名
详细参数可通过byzanz-record --help查看。
我使用unity桌面的ubuntu下不能使用byzanz的图形界面。即使是通过sudo apt-get install
gnome-session-fallback
并注销选择gnome桌面来安装byzanz也不能启用byzanz的图形界面。图形界面使用byzanz制作gif可以看参考部分的连接
recordmydesktop再convert成gif
recordmydesktop是一款著名的录屏工具。它有gtk版本。使用很方便
- 安装
sudo apt-get install imagemagick mplayer gtk-recordmydesktop
- 使用
gtk-recordmydesktop
录制并保存文件为 out.ogv - 执行如下命令將 out.ogv 分解成单帧图片
mplayer -ao null out.ogv -vo jpeg:outdir=.
- 执行如下命令將单帧图片压缩成 gif 图片
convert *.jpg out.gif
- 执行如下命令將 gif 图片进行压缩
convert out.gif -fuzz 10% -layers Optimize optimized.gif
第5步的压缩效果很好,我做的一个能将一个30多M的压缩成900多k
- 注意事项:
通过上述第4步产生的out.gif如果太大,在第5步中进行压缩优化时会出现
convert.im6: UnableToAcquireString `Cannot allocate memory‘ @ fatal/string.c/AcquireString/135.
错误。
小一点的不会出现这个错误。
我的解决方法比较笨。就是将第3步产生的单张jpg图片分成几个部分分别压缩成gif图片,这样每个gif图片都不会太大,再经过第5步压缩优化后合并成一个gif图片。例如我在录制这里的时长1分多钟的vim的配置效果图时,分解成单张的jpg图片有600多张,直接将他们压缩成gif图片大小有80多M,在进行第5步压缩优化时就会出现`Cannot allocate memory‘错误,我是将这600多张图分成2部分(前300张和后面300多张)分别压缩成2个gif图片,这样再压缩优化时就不会分配内存出错。再将这两张合成一张。
在将ogv视频合成gif图片时我也尝试过使用QGifer,但转换的质量效果没有使用convert的好,且压缩比率也没convert高
参考资料
RECORD YOUR LINUX DESKTOP IN AN ANIMATED GIF WITH BYZANZ