Make
an animated GIF from the command line (4)
【前言】
動圖循環時,大多有畫面突變的現象,因為頭尾兩圖迥異。若將原動圖和其反轉圖連接,便可解決之。不過,當然這不適用於所有的狀況,因為很多畫面反轉後,會變得很突兀或反常。
前篇的嬰兒動圖倒可一試。
【方法】
反轉連接有兩種操作方式:從來源圖片製作或從現有動圖製作。
1.
從來源圖片製作之一。
以下指令先於記憶體中製作正轉動圖,再製作反轉動圖,經全部最佳化後,輸出檔案。
magick convert
( -delay 2x24 images\b*.png ) ( -delay 2x24 -reverse images\b*.png )
-fuzz 1% -layers OptimizeTransparency baby-join-png.gif
註一:資料夾的使用請看這系列文章的第一篇。
註二:第一對
()
可以不加。
註三:-reverse
在
()
內的位置不重要。
2.
從來源圖片製作之二。
當然還有一種土法煉鋼的方法,就是複製所有畫格到另一資料夾,反序改檔名,然後和原圖放在一起,才做動圖。
此法的好處是可以選圖,也就是去掉複製的頭尾圖,因為在循環播放中重複了,有時會有明顯的暫停現象。
3.
從現有動圖製作之一。
magick convert
baby.gif ( baby.gif -coalesce -reverse -delete 0,-1 ) -fuzz 1%
-layers OptimizeTransparency baby-join-gif1.gif
-delete
指標:
去掉該指標的畫格。指標是畫格的流水編號,從
0
開始;連續範圍用
-
表示,例如從第三到第七畫格,用
2-6
表示;倒數用負號,最後畫格為
-1;多個不連續指標用
,
分開。上述設定為去掉頭尾圖。
註一:因為
baby.gif
已最佳化,直接將之反轉會失真,用
-coalesce
選項可恢復原畫格,但檔案會變很大,所以須再最佳化一次。
註二:若用未最佳化的動圖,檔案會大很多。
4.
從現有動圖製作之二。
magick convert
baby.gif -coalesce -duplicate 1,-2-1 -fuzz 1% -layers
OptimizeTransparency baby-join-gif2.gif
-duplicate
次數,指標:
次數是複製的次數。-duplicate
1,-2-1
表示自倒數第二畫格起一直到第二畫格複製一次,也就是反轉並去掉頭尾。
【後語】
無縫接軌是本文的目的,還有其他方法,後文再述。
【附錄】批次檔的完整內容
ffmpeg
-ss 1:11 -i source.mp4 -t 6 images\1%%3d.png
echo
選圖
pause
for
/L %%a in (1018,2,1123) do (
magick convert
images\%%a.png -crop 1080x720+0+0 -resize 30%% +repage
images\b%%a.png
)
magick convert
-delay 2x24 images\b*.png -fuzz 1%% -layers OptimizeTransparency
baby.gif
magick convert
( -delay 2x24 images\b*.png ) ( -delay 2x24 -reverse images\b*.png )
-fuzz 1%% -layers OptimizeTransparency baby-join-png.gif
magick convert
baby.gif ( baby.gif -coalesce -reverse -delete 0,-1 ) -fuzz 1%%
-layers OptimizeTransparency baby-join-gif1.gif
magick convert
baby.gif -coalesce -duplicate 1,-2-1 -fuzz 1%% -layers
OptimizeTransparency baby-join-gif2.gif
沒有留言:
張貼留言