2016/05/07

製作 GIF 動圖的方法(1)



Make an animated GIF from the command line (1)


【前言】

有很多免費的應用程式可以用來製作 GIF 動圖,不少是圖形界面的軟體,很方便。但若想只用指令,要如何做呢?

本系列文章專門介紹用指令行程式製作 GIF 動圖。主要的兩個程式是 ImageMagick FFmpeg (ImageMagick 已含有)

圖片的處理是用 ImageMagick 7,但圖片的來源通常是影片,所以會用 FFmpeg 從影片中抽出圖片。

作業系統先用 Windows

因指令很多,不可能臨時在命令視窗/虛擬終端機輸入,所以常用 .bat 檔。但要注意的是,二者稍有不同;例如:% 符號,在終端機只用一個 %,而在 .bat 檔中,要用 %%。本系列範例皆是虛擬終端機的用法。

本文只敘述較單純的例子:先用 ImageMagick 製造 0 9 的數字圖,再轉為動圖。


【步驟】

0. 工作資料夾。

新增一個專用的資料夾。
在此夾中新增 .bat 檔。若有用到影片,也移至此。
在此夾中新增圖片資料夾,如:images


1. 製作數字圖。

以下指令可在 images 子資料夾中建立一個數字 1 的方圖:

magick convert -size 100x100 -font Tahoma -gravity Center label:1 images\number-1.png

 -size x: 設定圖片尺寸。
 -font: 設定字型。
  列出電腦中可用字型:magick convert -list font
 -gravity: 設定位置。
  列出可用位置:magick convert -list gravity
 label:: 文字內容。
 最後為輸出檔名,由副檔名指定格式。


若要建立 0 9 的數字,不須 9 個指令,只要用 for 指令即可:

for /L %a in (0,1,9) do (
magick convert -size 100x100 -font Tahoma -gravity Center label:%a images\number-%a.png
)

註:batch 指令不在本文討論範圍。


2. 製作動圖。

magick convert -delay 100 images\*.png numbers.gif

 -delay: 間隔,單位是百分之一秒。
  完整設定是:個數x每秒個數每秒個數的預設值是 100;雖然用 x,但意義相當於 /
  所以 -delay 100 就等於 -delay 100x100,相當於 100/100,即間隔為 1 秒。
  所以 -delay 100x100 等於 -delay 50x50 等於 -delay 1x1



註一:此指令的順序很重要,先設定間隔,次給來源圖,最後為輸出檔名。若來源圖先,則間隔的設定無效,結果間隔就用預設值 0

註二:-delay 是對其後所有的圖都有效,若其後是動圖,則每一畫格皆有效。

註三:圖片在資料夾中的順序就是組成動圖的順序。所以圖片檔名要考慮清楚。


【後語】

1. 之所以稱 Animated GIF 為動圖而非動畫是因為動畫通常指像卡通之類的影片;很明顯 Animated GIF 不是卡通,為了區別,故稱之為動圖。


2. 動圖的顯示速度和顯示引擎有關,不同的瀏覽器、不同的看圖程式,速度就可能不同。


3. 本文介紹的方法很簡單吧!下一篇敘述自影片中抽出圖片,再製作成動圖。


【附錄】批次檔的完整內容

for /L %%a in (0,1,9) do (
magick convert -size 100x100 -font Tahoma -gravity Center label:%%a images\number-%%a.png
)

magick convert -delay 100 images\*.png numbers.gif

沒有留言:

張貼留言