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     #随机移动,参数是位移大小

加边框

convert -raise 5x5 input.jpg output.jpg
convert +raise 5x5 input.jpg output.jpg

使用ImageMagick的如下命令生成gif

  1. 执行如下命令將单帧图片压缩成 gif 图片:
convert -delay 120 -loop 0 *.png  out.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)。

参考

个人博客: Fan's Blog

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容