[GMT] 動畫製作的簡單說明與準備

昨天課堂上,我和同學們一起準備期中報告,有些同學富有挑戰精神,決定製作動畫。但是沒有真正跑過,電腦也沒有準備好相關的環境,因此製作就碰到了問題。下面記述一些基本觀念與如何在 Mac 環境下製作 GMT 的範例動畫。

基本概念

用GMT製作動畫大概可以分成以下幾個階段:

  1. 準備資料(切圖、計算等等)。
  2. 準備固定、不隨偵數變化的底圖,假設另存為 Base.ps。這邊檔案不能終結。
  3. 撰寫迴圈,準備繪製「動」畫的部分。
    1. 複製 Base.ps 檔案到一個暫存檔 tmp.ps。
    2. 以繪圖指令將變動的部分加入 tmp.ps。
    3. 將 tmp.ps 轉換為圖片檔(jpg, tiff etc.)
  4. 組合所有圖片變成 gif 檔,範例中使用 graphicsmagick 這個軟體完成。

安裝 GraphicsMagick

在 Mac 上可以用 Homebrew 來確定套件資訊:

因為要遠端使用 X11 ,因此我安裝時就加了下面兩個參數「–with-ghostscript –with-x11」(不知道對不對啦 😛 )

安裝完成後,以「gm」測試是否安裝成功:

gmt_shell_functions.sh

GMT 開發者寫了一些簡單的 shell 工具給大家使用,詳細的說明可以到>這邊<查看。

以範例一來說,我們主要會用到的是:

  • gmt_cleanup .gmt :刪除所有含有PID數字($$)的暫存檔,有「參數」時同時刪除「參數*」的檔案。
  • gmt_abort “${0}: First frame plotted to ${name}.ps”:終止程式執行,並將第一個參數輸出至標準錯誤輸出。
  • gmt_set_framename ${name} ${frame}:設定檔案的名字,參數一是前綴(prefix),參數二是流水號,程式會組合成「參數一_XXXXXX」。
  • gmt_set_framenext ${frame}:將流水號加一。

 

GMT 的範例動畫

GMT 的範例有附了五個動畫,其中很妙的是,要真正畫出動畫來,在呼叫 anim_xx.sh 的時候,一定要傳入至少一個參數,否則只會輸出第一張圖片給你看,至於參數是什麼就不是哪麼重要了。

其他要知道的一些 bash 語法與變數是:

  • $$ :代表執行時的 PID (Process ID),這邊用來指定暫存檔檔名,讓他不會重複。
  • $# :代表有多少變數傳入(類似 C++ main中「argc」)
  • $n (n為整數):代表呼叫Script時傳入的第幾個參數(類似 C++ main中「argv」)
  • while [判斷式] ; do

    done
  • if [判斷式] ; then

    fi
  • printf “文字” 變數:格式化輸出文字
  • <<< 字串:將後面的文字以「字串」的形式輸入標準輸入

設定變數以及一些參數:

首先先設定一些關於動畫的變數,包括影像大小、禎數、檔名等等。

第一行「. gmt_shell_functions.sh」是引入「gmt_shell_functions.sh」這個檔案,就跟C/C++開頭的 #include 相似吧!

這邊也先畫好了一張基底圖

 

繪製變動的部分

這邊開始畫每張變動的部分。首先創造一個暫存資料夾,接著複製底圖,然後針對變動部分繪製內容,最後轉ps檔為圖片並存到暫存資料夾中。

這邊有許多判斷式表示法:[n1 OP n2],比較運算子(OP): -eq:等於-ne:不等於、-lt:小於-le:不大於、-gt:大於-ge:不小於(equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to)
可以參考這邊

組合並轉檔

這邊用 GraphicsMagick 進行轉檔,因此 「${GRAPHICSMAGICK-gm}」可以取代成「gm」或 「GraphicsMagick安裝路徑/bin/gm 」。
convert 啟動轉檔模組, -delay 表示延遲時間(1/100 s)、-loop 表示迭代剛剛轉存好的 tiff 檔案、最後一個變數是輸出的位置。

最後寫一個網頁來呈現結果, cat 會把後面到「END」前的文字(html程式碼)存進「${name}.html」中。

清除暫存檔案

 

參考資料:

  • GMT 官網與 code :http://gmt.soest.hawaii.edu/doc/5.3.3/gallery/anim01.html#anim-01
  • Bash 說明:http://www.tldp.org/LDP/Bash-Beginners-Guide/html/Bash-Beginners-Guide.html
  • gm convert 官方說明:http://www.graphicsmagick.org/convert.html

請多多指教!

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料