Linux中gif的制作和图片转换

图片转换命令convert convert 命令是由 ImageMagick 包提供。

选择转换为jpg图片会比转换为png图片小很多。 jpg 图片比 png小。
缩放:
convert -sample 80x60 input.jpg output.jpg

缩放后图像保持原来的长宽比例(也可同时转换格式,好用法):
convert -sample 25%x25% input.jpg output.jpg

类型转换
convert 1.jpg 1.png

特殊效果
convert -charcoal 2 input.jpg output.jpg#炭笔 convert -colorize 255 input.jpg output.jpg#着色 可以指定三种颜色 red/green/blue convert -implode 4 input.jpg output.jpg#内爆效果 convert -solarize 42 input.jpg output.jpg#曝光,模拟胶片曝光 convert -spread 5 input.jpg output.jpg#随机移动,参数是位移大小

【Linux中gif的制作和图片转换】加边框
convert -raise 5x5 input.jpg output.jpg convert +raise 5x5 input.jpg output.jpg

使用ImageMagick的如下命令生成gif
  1. 执行如下命令將单帧图片压缩成 gif 图片:
convert -delay 120 -loop 0 *.pngout.gif

  1. 执行如下命令將 gif 图片进行压缩:
convert out.gif -fuzz 10% -layers Optimize optimized.gif

  1. 一个复杂一点的命令
convert -delay 50 frame1.gif -delay 100 frame1.gif -delay 150 frame1.gif -loop 0 -pause 200 animated.gif

利用ffmpeg将mp4转换为gif 方法一: 直接将视频转换为gif
# 将整个small.mpr转换为gif ffmpeg -i small.mp4 small.gif# 从视频第2秒开始,截取3秒片段为gif ffmpeg -t 3 -ss 00:00:02 -i small.webm small-clip.gif# 转换为高质量的gif ffmpeg -i small.mp4 -b 2048k small.gif

方法二: 先转换为图片,再利用convert转换为gif
# 每10帧每秒 ffmpeg -i input.mp4 -r 10 output%05d.png# 在利用Imagemagick的convert工具转换为gif convert output*.png output.gif

在第一步时指定目录:
mkdir /tmp/gif/ffmpeg -i input.mp4 -r 10 /tmp/gif/output%04d.png

Peek Peek是一个gif记录工具。缺点:录制后不能进行调整;优点:安装方便
sudo add-apt-repository ppa:peek-developers/stable sudo apt update && sudo apt install peek

在Ubuntu 16.04上安装了 Peek后,这个软件无法捕捉到图像,捕捉界面是全黑的。
Gifine Gifine可以录制简短的Gifs或者videos。优点:录制后能进行调整;缺点:安装麻烦,
尝试了一次Gifine,制作全屏gif,时间大概40s,占用了我10G内存,3.3G交换分区。制作小的gif还是可以。
原因:当时帧率默认为30;总共录制的图片多达1238张,每张图有100KB,总共有136MB。
解决办法:录制前改小帧率;录制后适当删除一些帧。
制作长gif:可以选择使用Gifine,录制多段小gif,再利用convert命令进行合并。
总体来说Gifine还是不错的。
每一帧,对应一张图片
Ubuntu 16.04安装 Gifine
依次运行下面的命令进行安装:
This has been tested on a fresh install of Ubuntu 16.04 LTS.
Install git:
$ sudo apt install git

Next, install all of the gifine's dependencies and sub-dependencies:
$ sudo apt install -y \ ffmpeg \ graphicsmagick \ gifsicle \ luarocks \ libxext-dev \ libimlib2-dev \ mesa-utils \ libxrender-dev \ glew-utils \ libglm-dev \ cmake \ compiz \ gengetopt \ libglu1-mesa-dev \ libglew-dev \ libxrandr-dev \ libgirepository1.0-dev

Install slop
sudo add-apt-repository ppa:nilarimogard/webupd8 sudo apt-get update sudo apt-get install slop

Install LGI:
$ sudo luarocks install lgi

LuaRocks is the package manager for Lua modules.
Install gifine
$ sudo luarocks install --server=http://luarocks.org/dev gifine

另可直接参照:GitHub Gifine
这里Gifine说只需在slop和xrectsel之间选择一个进行安装,且建议安装的是 slop ,所以上面我们安转了 slop。
依赖项xrectsel的安装方法
Github xrectsel
而xrectsel又依赖libx11,这可以通过安装libx11-dev来解决。
sudo apt install libx11-dev -y cd /tmp git clone https://github.com/lolilolicon/xrectsel.git cd xrectsel sudo ./bootstrap sudo ./configure && sudo make && sudo checkinstall # 然后输入一些信息,(必须输入版本号才能生成xrectsel的deb安装包) sudo dpkg -i xrectsel-***.deb

Gifine使用说明
使用技巧:录制前先将要录制的界面缩小,帧率设置为4,录制后删除效果不佳的帧;这样会大大减小最后生成的gif的大小。
录制前:
打开Gifine后,你可以进行两种操作:录制视频帧或者加载视频帧。
设置帧率"Framerate"为5或10
录制后:
录制视频帧后,可以进行裁剪,可以设置帧延迟、帧率以及循环次数的选项。
  • Trim left of : 剪切掉左侧的帧(每一帧,对应一张图片)
  • Trim right of: 剪切掉右侧的帧
  • Delete frame:删除当前帧
  • Halve frame: 将帧的数量减半(删除一半的图片)
  • Reset cuts:恢复所有裁剪的图片
  • Delay:延时。一般设置为8或9,延时太小图片变化的太快,看不清楚。
技巧: 在gif的开头和结尾不要切换的太快,保留一定图片,有助于提升gif的表达效果。
录制的视频帧不会自动清除,它们保存在/tmp/gifine_**文件夹下,你还可以重新加载;在初始界面选择"Load directory"加载目录来加载。
补充 在GitHub上找到的几个shell工具
都依赖于ffmpeg; makes creating high-quality gifs from video files
gifgen
https://github.com/lukechilds/gifgen
make-gif
https://github.com/shmibs/make-gif
使用google的guetzli压缩图片
google/guetzli: Perceptual JPEG encoder
请注意,Guetzli旨在用于高品质图像。您应该始终倾向于提供未压缩的图像(例如尚未使用任何JPEG编码器压缩的图像,包括Guetzli)。
参考
  • 如何在 Linux 桌面上使用 Gifine 录制 GIF 动画?
  • 使用 ffmpeg 实现 MP4 与 GIF 的互转
  • Convert video (.mp4 or other) to high quality animated gif
  • 8 BEST SCREEN RECORDERS FOR LINUX IN 2017
个人博客: Fan's Blog

    推荐阅读