2016/05/10

製作 GIF 動圖的方法(4)

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

沒有留言:

張貼留言