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版本。使用很方便

  1. 安装 
    sudo apt-get install imagemagick mplayer gtk-recordmydesktop
  2. 使用gtk-recordmydesktop录制并保存文件为 out.ogv
  3. 执行如下命令將 out.ogv 分解成单帧图片 
    mplayer -ao null out.ogv -vo jpeg:outdir=.
  4. 执行如下命令將单帧图片压缩成 gif 图片 
    convert *.jpg out.gif
  5. 执行如下命令將 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

Ubuntu使用byzanz截取动态效果图

使用 Byzanz 录制 Gif 动画或 Ogv 视频

ubuntu动态截图,制作GIF动画

Convert Ogv -video to Gif -animation

提取视频制作为GIF动画

最新文章

  1. C# 在数组中判断是否存在某个数组值
  2. mac安装虚拟机
  3. (转载)Resin安装配置及使用教程
  4. Android 采用Layout Inflater创建一个View对象
  5. Android回调
  6. POJ 2778 DNA Sequence(AC自动机+矩阵加速)
  7. nginx+tomcat实现动静分离
  8. 加载页面(Loading)
  9. select 语句占位符
  10. MVC Model Binder
  11. mysql之sql语句细节问题汇总
  12. HTTPS 传输优化详解之动态 TLS Record Size
  13. Table点击某个td获取当前列的头名称
  14. 【学习笔记】分布式Tensorflow
  15. 如何使用Hive&R从Hadoop集群中提取数据进行分析
  16. svn 创建主干 分支版本
  17. shell 脚本 删除文件内容为空的文件
  18. [Linux][Ubuntu18.04.1] nginx+php+MySQL环境搭建
  19. Centos7 安装Power Shell
  20. 解决dns服务器未找到问题 &&DNS解析服务器&&连接问题

热门文章

  1. token的生成和应用
  2. 利用 :before 特性实现图片按比例显示
  3. .NET自带泛型委托方法Func、Action和Predicate
  4. 微服务(MicroServices)
  5. 多版本python的使用
  6. svn working copy locked的解决方法
  7. js替换字符串中的数字或非数字
  8. [转载]解析 Java 类和对象的初始化过程
  9. @RequestMapping
  10. print webpage