Linux动态gif图的录制
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
Convert Ogv -video to Gif -animation
Linux动态gif图的录制的更多相关文章
- 技巧:Linux 动态库与静态库制作及使用详解
技巧:Linux 动态库与静态库制作及使用详解 标准库的三种连接方式及静态库制作与使用方法 Linux 应用开发通常要考虑三个问题,即:1)在 Linux 应用程序开发过程中遇到过标准库链接在不同 L ...
- Linux 动态库剖析
进程与 API 动态链接的共享库是 GNU/Linux® 的一个重要方面.该种库允许可执行文件在运行时动态访问外部函数,从而(通过在需要时才会引入函数的方式)减少它们对内存的总体占用.本文研究了创建和 ...
- Linux动态频率调节系统CPUFreq之三:governor
在上一篇文章中,介绍了cpufreq的core层,core提供了cpufreq系统的初始化,公共数据结构的建立以及对cpufreq中其它子部件提供注册功能.core的最核心功能是对policy的管理, ...
- Linux动态频率调节系统CPUFreq之二:核心(core)架构与API
上一节中,我们大致地讲解了一下CPUFreq在用户空间的sysfs接口和它的几个重要的数据结构,同时也提到,CPUFreq子系统把一些公共的代码逻辑组织在一起,构成了CPUFreq的核心部分,这些公共 ...
- windows动态库与Linux动态库
Linux动态库和windows动态库的目的是基本一致的,但由于操作系统的不同,他们在许多方面还是不尽相同.但是尽管有差异Linux动态库的windows动态库还是可以移植的,有一些规则以及经验是必须 ...
- 使用 firewalld 构建 Linux 动态防火墙
firewalld 是新一 Linux 代防火墙工具,它提供了支持网络 / 防火墙区域 (zone) 定义网络链接以及接口安全等级的动态防火墙管理工具.它也支持允许服务或者应用程序直接添加防火墙规则的 ...
- UML动态模型图简单介绍
UML动态模型图描述了系统动态行为的各个方面,包括用例图.序列图.协作图.活动图和状态图.下面就每种图做一个简单介绍: 用例图 用例图描述系统外部的执行者与系统提供的用例之间的某种联系.所谓用例是指对 ...
- Heatmap.js v2.0 – 最强大的 Web 动态热图
Heatmap 是用来呈现一定区域内的统计度量,最常见的网站访问热力图就是以特殊高亮的形式显示访客热衷的页面区域和访客所在的地理区域的图示.Heatmap.js 这个 JavaScript 库可以实现 ...
- 【BZOJ-2879】美食节 最小费用最大流 + 动态建图
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1366 Solved: 737[Submit][Status] ...
随机推荐
- 用js来实现那些数据结构 第二章
这一篇文章,我们一起来看看数组还有哪些用法,以及在实际工作中我们可以用这些方法来做些什么.由于其中有部分内容并不常用,所以我尽量缩小篇幅.在这篇文章内介绍完大部分的数组方法,加快我们实现其它数据结构的 ...
- Python与硬件学习笔记:蜂鸣器(转)
相信大家对蜂鸣器都不会陌生,很多产品和方案中都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警,比如按键按下.开始工作.工作结束或是故障等等.这里对单片机在蜂鸣器驱动上的应用作一下描述. 蜂鸣器的介绍 ...
- 【HackerRank】Missing Numbers
Numeros, The Artist, had two lists A and B, such that, B was a permutation of A. Numeros was very pr ...
- 获取CPU利用率
#define MB (1024 * 1024) MEMORYSTATUSEX statex; statex.dwLength = sizeof (statex); GlobalMemoryStatu ...
- Could not autowire field: private javax.servlet.http.HttpServletRequest
在写单元测试类的时候,报错,废了很大劲才给调试好,给大家分享下. 完整错误如下: Caused by: org.springframework.beans.factory.BeanCreationEx ...
- nginx最常见的18道面试题
Nginx的并发能力在同类型网页服务器中的表现,相对而言是比较好的,因此受到了很多企业的青睐,我国使用Nginx网站的知名用户包括腾讯.淘宝.百度.京东.新浪.网易等等.Nginx是网页服务器运维人员 ...
- Linux学习笔记001——win下安装Linux虚拟机
我研二之前算是一个纯粹的计算机小白,因为某些原因开始接触了计算机方面的知识. Linux系统也就是前几个月才听说,因某些需求需要在Linux环境下运行.纯的Linux系统不太现实, 所以在他人帮助和自 ...
- codeforces675D Tree Construction
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- js外观模式
外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 外观模式类图: 然而对于外观模式而言,是没有一个一般化的类图描述,下面演示一个外观模式的 ...
- Android框架之路——GreenDao3.2.2的使用
一.简介 GreenDAO是一个开源的安卓ORM框架,能够使SQLite数据库的开发再次变得有趣.它减轻开发人员处理低级数据库需求,同时节省开发时间. SQLite是一个令人敬畏的内嵌的关系数据库,编 ...