Linux下录制部分区域生成GIF

最近整理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

//ishell-imgs.b0.upaiyun.com/blog/some/screenruler.png

我们再来看下起始位置

//ishell-imgs.b0.upaiyun.com/blog/some/byzanz-2.png

大概是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

//ishell-imgs.b0.upaiyun.com/blog/some/byzanz.gif

572.8KB大小,是不是效果还不错呢