这个问题的可能历史:Eliminate slow speed factor in ffmpeg and image-magic commands
我正在使用这个具有雨刷效果的命令创建一个GIF,
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帧的雨刷效果。
我们如何减少雨刷效果的帧数以及质量保持不变,但尺寸减少?我试图用不同的循环值附加不同的参数,但是没有什么效果。
发布于 2018-10-26 19:09:51
下面是3个Imageamagick命令。第一个是你上面的。在第二部分中,我从两个输入图像(前后)创建了一个通用的彩色地图图像,并将其应用于每个帧。在第三,我做同样的彩色地图处理,但减少了帧数。我从网站和动画参考的所有图片,并将新的标志放在左下角,因为已经有一个在右下角。请注意,我向all添加了-layers优化,这大大减少了文件大小。
标志:

在此之前:

之后:

方法1(原件):
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 (普通彩色地图):
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)
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等等。但文件大小大致相同。因此,常见的彩色地图似乎导致文件大小的最大减少。
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 bytesconvert -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 byteshttps://stackoverflow.com/questions/53004096
复制相似问题