首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >少帧ImageMagick雨刷效应gif

少帧ImageMagick雨刷效应gif
EN

Stack Overflow用户
提问于 2018-10-26 07:59:24
回答 1查看 127关注 0票数 0

这个问题的可能历史:Eliminate slow speed factor in ffmpeg and image-magic commands

我正在使用这个具有雨刷效果的命令创建一个GIF,

代码语言:javascript
复制
convert -gravity southeast logo.png  -write MPR:logo \
  \( before.jpg -resize '1280x720!' MPR:logo -geometry +15+15 -composite -write MPR:before \) \
  \( after.jpg  -resize '1280x720!' MPR:logo -geometry +15+15 -composite -write MPR:after  \) \
  -delete 0--1                                           \
  MPR:before  \( MPR:after  -set delay 25 -crop 15x0 -reverse     \) \
  MPR:after   \( MPR:before -set delay 27 -crop 15x0   \) \
  -set delay 2 -loop 0 temp.gif -delete 1--1 -resize 640x thumb.jpg

这一切都很好,但它创造了一个gif的大小3MB+,因为有超过100帧的雨刷效果。

我们如何减少雨刷效果的帧数以及质量保持不变,但尺寸减少?我试图用不同的循环值附加不同的参数,但是没有什么效果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-26 19:09:51

下面是3个Imageamagick命令。第一个是你上面的。在第二部分中,我从两个输入图像(前后)创建了一个通用的彩色地图图像,并将其应用于每个帧。在第三,我做同样的彩色地图处理,但减少了帧数。我从网站和动画参考的所有图片,并将新的标志放在左下角,因为已经有一个在右下角。请注意,我向all添加了-layers优化,这大大减少了文件大小。

标志:

在此之前:

之后:

方法1(原件):

代码语言:javascript
复制
convert -gravity southwest everlogo.png -write MPR:logo \
\( before.jpg -resize '1280x720!' MPR:logo -geometry +15+15 -composite -write MPR:before \) \
\( after.jpg  -resize '1280x720!' MPR:logo -geometry +15+15 -composite -write MPR:after \) \
-delete 0--1 \
MPR:before \( MPR:after -set delay 25 -crop 15x0 -reverse \) \
MPR:after \( MPR:before -set delay 27 -crop 15x0 \) \
-set delay 2 -layers optimize -loop 0 temp1a.gif
2,246,665 bytes
174 frames

结果太大了,不能上传到这里。

Method2 (普通彩色地图):

代码语言:javascript
复制
convert -gravity southwest \
everlogo.png -write MPR:logo +delete \
\( before.jpg -resize '1280x720!' MPR:logo -geometry +15+15 -composite -write MPR:before \) \
\( after.jpg  -resize '1280x720!' MPR:logo -geometry +15+15 -composite -write MPR:after \) \
-delete 0--1 \
\( MPR:before MPR:after +append +dither -colors 255 -unique-colors -write MPR:colors +delete \) \
MPR:before +dither -remap MPR:colors \( MPR:after +dither -remap MPR:colors -set delay 25 -crop 15x0 -reverse \) \
MPR:after+dither -remap MPR:colors \( MPR:before +dither -remap MPR:colors -set delay 27 -crop 15x0 \) \
-set delay 2 -layers optimize -loop 0 temp1b.gif
2,004,345 bytes
173 frames

方法3(通用颜色图;作物宽度的两倍和延迟的四倍;根据需要调整延迟以匹配更好的方法2)

代码语言:javascript
复制
convert -gravity southwest \
everlogo.png -write MPR:logo +delete \
\( before.jpg -resize '1280x720!' MPR:logo -geometry +15+15 -composite -write MPR:before \) \
\( after.jpg  -resize '1280x720!' MPR:logo -geometry +15+15 -composite -write MPR:after \) \
-delete 0--1 \
\( MPR:before MPR:after +append +dither -colors 255 -unique-colors -write MPR:colors +delete \) \
MPR:before +dither -remap MPR:colors \( MPR:after +dither -remap MPR:colors -set delay 100 -crop 30x0 -reverse \) \
MPR:after+dither -remap MPR:colors \( MPR:before +dither -remap MPR:colors -set delay 108 -crop 30x0 \) \
-set delay 4 -layers optimize -loop 0 temp1c.gif
1,927,359 bytes
87 frames

我感到惊讶的是,如此显着地减少帧的数量并不能相应地减少动画文件的大小。但我怀疑这是由于-layers优化。

增添:

另外,在上面的所有代码中,我不理解在圆括号内设置延迟25和27,然后再将其设置为2的用法。我不认为动画gifs会有不同的延迟。唯一重要的是最后一个。

因此,就延迟和帧数而言,这两种方法是一样的。第一个使用-crop 15x0和-set延迟4,第二个使用-crop 30x0和-set延迟8。这会产生相同的速度动画,但第二个帧更少。第一个是174,第二个是88等等。但文件大小大致相同。因此,常见的彩色地图似乎导致文件大小的最大减少。

代码语言:javascript
复制
convert -gravity southwest everlogo.png -write MPR:logo \
\( before.jpg -resize '1280x720!' MPR:logo -geometry +15+15 -composite -write MPR:before \) \
\( after.jpg  -resize '1280x720!' MPR:logo -geometry +15+15 -composite -write MPR:after \) \
-delete 0--1 \
MPR:before \( MPR:after -crop 15x0 -reverse \) \
MPR:after \( MPR:before -crop 15x0 \) \
-set delay 4 -layers optimize -loop 0 temp3.gif
frames 174
2,246,665 bytes
代码语言:javascript
复制
convert -gravity southwest everlogo.png -write MPR:logo \
\( before.jpg -resize '1280x720!' MPR:logo -geometry +15+15 -composite -write MPR:before \) \
\( after.jpg  -resize '1280x720!' MPR:logo -geometry +15+15 -composite -write MPR:after \) \
-delete 0--1 \
MPR:before \( MPR:after -crop 30x0 -reverse \) \
MPR:after \( MPR:before -crop 30x0 \) \
-set delay 8 -layers optimize -loop 0 temp2.gif
frames 88
2,174,954 bytes
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53004096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档