最近整理Github发现有一个这样的需求,有些效果或者演示,通过一张GIF图演示很直观 ,比文字描述直观很多,而且有时候一些“小”gif教程,效果出奇的好,所以整理总结了总结研究了几个方法,请按需取用
(一) recordmydesktop+mplayer+ImageMagick
虽然我介绍了这个方法,但还是建议大家尝试方法二,因为这个方案的选区实在心塞,虽然这样,但是我还是要记录一下,万一某个环节有了优秀替代,变得很方便了呢
首先,使用recordmydesktop录制视频,格式为ogv,然后使用mplayer将视频转为图片序列,最后使用ImageMagick的convert将图片合成为gif图
1, 使用recordmydesktop录制视频的部分不多介绍,网上教程很多
2, mplayer命令行具体命令
mplayer -ao null <video file name> -vo jpeg:outdir=output
3, ImageMagick的convert
convert output/* output.gif
你也可以在转换的过程中进行缩放等操作
convert output.gif -fuzz 10% -layers Optimize optimised.gif
recordmydesktop在使用的过程中,只能通过其提供的小窗口进行选区,会导致精度不足,可以通过批处理插件来在图片序列阶段修改图片尺寸
- 在生成图片序列后可以自己删除前部或后部的图片,以减少GIF的冗余内容
- 此方法的优点是可以精确控制gif结束时间,因为录制视频,结束录制按Ctrl+Alt+S就可以了
(二) byzanz + screenruler + xdotool
byzanz是一个终端输入命令录制GIF的工具,screenruler是一把尺子,我们可以通过它来确定我们的区域长宽,xdotool可以获取鼠标的坐标,这样可以控制选区起始位置,非常方便,不过对于时间,你可能需要好好的把握了,因为指定时间后,你需要在指定时间内精准完成操作,由于导出直接就为GIF,所以如果要修改时长,那么只能重新图片序列化再合并,虽然麻烦点点,但是这种方法录制的GIF质量还是很不错的
我们看一下byzanz的说明
$ byzanz-record --help
用法:
byzanz-record [选项...] 录制您的当前桌面会话
帮助选项:
-?, --help 显示帮助选项
--help-all 显示全部帮助选项
--help-gtk 显示 GTK+ 选项
应用程序选项:
-d, --duration=SECS 动画的时间 (默认:10 秒)
--delay=SECS 开始之前的延时(默认:1 秒)
-c, --cursor 录制鼠标光标
-a, --audio 录音
-x, --x=像素 要录制矩形的 X 坐标
-y, --y=像素 要录制矩形的 Y 坐标
-w, --width=像素 录制矩形的宽度
-h, --height=像素 录制矩形的高度
-v, --verbose 详细
--display=显示 要使用的 X 显示
根据参数我们可以精确的获得所需区域
如下是一个算法演示网页,我想把它录制成gif,红色区域就是我想录制的区域,使用screenruler工具,就是黄色的那个尺子,就可以方便的测量出我们录制区域的长宽了(右键,可进行尺子设置)
大概长度是420px,高度是140px
我们再来看下起始位置
大概是y的坐标为90px,x坐标为340px
你也可以使用xdotool getmouselocation命令,鼠标放在选区的左上角,运行命令可以直接获取x,y坐标(推荐)
$xdotool getmouselocation
x:327 y:96 screen:0 window:37749219
byzanz-record -c -x 340 -y 90 -w 420 -h 140 -d 10 finish.gif
录制出来了,因为刚才都是粗略估计的,所以还是有些误差,根据效果再进行微调,包括时常参数,长宽,xy等
byzanz-record -c -x 340 -y 90 -w 400 -h 140 -d 22 finish.gif
572.8KB大小,是不是效果还不错呢
- 算法演示的网站是http://zh.visualgo.net/
- 猜猜这是什么排序算法?