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] ...
随机推荐
- 011_Eclipse中使用HDFSFileSystemAPI事例介绍
需求 1.文件操作 1)上传本地文件到HDFS 2)读取文件 3)在hadoopfs中新建文件,并写入 4)重命名文件 5)删除hadoopfs上的文件 2.目录操作 1)读取某个目录下的所有文件 2 ...
- Python编程-编码、变量、数据类型
一.Python和其他语言对比 C语言最接近机器语言,因此运行效率是最高的,但需要编译. JAVA更适合企业应用. PHP适合WEB页面应用. PYTHON语言更加简洁,丰富的类库,使初学者更易实现应 ...
- 父元素设置overflow,绝对定位的子元素会被隐藏或一起滚动
一般情况: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <met ...
- 六、golang中的结构体和方法、接口
结构体: 1.用来自定义复杂数据结构 2.struct里面可以包含多个字段(属性) 3.struct类型可以定义方法,注意和函数的区分 4.strucr类型是值类型 5.struct类型可以嵌套 6. ...
- 20145239杜文超《网络对抗》- Web安全基础实践
20145239杜文超<网络对抗>- Web安全基础实践 基础问题回答 (1)SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查 ...
- Python的format函数
Python的format函数 自python2.6开始,新增了一种格式化字符串的函数str.format(),此函数可以快速处理各种字符串. 语法 它通过{}和:来代替%. 请看下面的示例,基本上总 ...
- java深入探究14-lucene
项目代码:链接:http://pan.baidu.com/s/1qXVcfCw 密码:apw1 01 回顾索引 定义:索引是对数据库表中一列或多列的值进行排序的一种结构 目的:加快对数据库表中记录的查 ...
- HBase学习3(win下使用Eclipse搭建hbase开发环境)
第一步:创建一个java project命名为wujiadong_hbase 第二步:在该工程下创建一个folder命名为lib(储存依赖的jar包) 第三步:将集群中的hbase安装目录下载一份到w ...
- 【转】nodejs mysql 链接数据库集群
1.建立数据库连接:createConnection(Object)方法 该方法接受一个对象作为参数,该对象有四个常用的属性host,user,password,database.与php中 ...
- QT 布局时使用 addStretch 可伸缩设置
今天在使用addStretch,布局的时候,发现addStretch竟然是可以平均分配的,有意思.比如: QVBoxLayout *buttonLayout = new QVBoxLayout; bu ...