此问题的可能历史记录: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
一切正常,但是由于雨刷效果超过100帧,因此它会创建gif大小为3MB +的gif。
我们如何减少抽头效果的帧数,以及画质保持不变,但尺寸减小?我尝试将不同的参数附加到不同的循环值,但没有任何效果。
答案 0 :(得分:0)
这是3个Imageamagick命令。首先是你的。在第二个中,我从两个输入图像(之前和之后)创建一个公共的颜色图图像,并将其应用于每个帧。第三,我进行相同的颜色映射处理,但是减少了帧数。我从网站上获取了所有图片,并引用了动画,并将新徽标放在左下角,因为在右下角已经有一个了。请注意,我为所有图层添加了-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的用法。我认为动画gif不会有不同的延迟。唯一重要的是最后一个。
所以就延迟和帧数而言,这两者是相同的。第一个使用-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 bytes
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