GrADSでアニメーションを作る
気象や海洋を研究している方ならば、GrADSでアニメーションを作るという機会は、あると思います。
アニメーションをどうやって作るか紹介します。
コントロールファイル確認
アニメーションを作成するために、controlファイルを確認します。
netCDFファイルの場合は、この作業はいりません。
OPTIONSでtemplateであることを確認しましょう。下は、controlファイルの例です。3行目を確認です。
DSET ^sample.bin
TITLE SAMPLE DATA OUTPUT
OPTIONS TEMPLETE
XDEF .....
GrADSのスクリプト作成
次に、GrADSのスクリプトを書いていきます。
GrADSのスクリプトにコマンドを書く場合、シングルクォーテーション(”)で囲む必要があります。
それでは、アニメーションを描くGrADSのスクリプトを書いていきましょう。
プログラミングの経験がある方は、上のスクリプトの意味は大体わかると思います。一応説明します。
スクリプトの1行目でcontrolファイルを開いています。netCDFファイルの場合、netCDFファイルを直接openしてください。
スクリプトの2行目で描画を開始するTステップを指定しています。ここは、シングルクォーテーションで囲まないでください。
もちろん、t=1である必要はなく、任意のtステップからスタートさせてください。
スクリプトの3行目から繰り返し文です。「while(t<100)」は、Tステップが100より小なら4行目から10行目まで処理をしますよという意味です。もちろん、t<100である必要はないので、自分用に書き換えてください。
スクリプトの4行目でTステップをGrADS側で指定しています。
スクリプトの5行目の描画処理は、自分の描きたい描画処理を書きましょう。ここは、GrADSのコマンドなのでシングルクォーテーションで囲みましょう。
スクリプトの6行目は、条件分岐しています。Tステップが10より小ならスクリプトの7行目を実行しています。
スクリプトの7行目は、描画した絵を保存しています。01.png,02.png,03.pngという具合で保存されます。
スクリプトの8行目は、スクリプトの6行目の条件に合致しない場合、実行するという意味です。別の言い方をするとTステップが10以上ならスクリプトの9行目を実行するという意味です。
スクリプトの9行目は、描画した絵を保存しています。10.png,11.png,12.pngという具合です。
スクリプト11行目は、Tステップを1ずつ増やします。1増やしたら、スクリプトの4行目にまた移動します。
スクリプト12行目は、繰り返し処理の終了を教えています。
画像保存する際、ファイル名を数字にしているのは、convertコマンド(後述)を実行してアニメーションを作る際、意図した順番でアニメーションが出来ないためです。
100枚以上の画像でアニメーションを作るとき
条件分岐を増やすことになりますが、GrADSでは、elseifという構文はありません。なので以下のようにスクリプトを書く必要があります。
if(t<10)
'gxprint 00't.png'
else
if(t<100)
'gxprint 0't'.png'
else
'gxprint' t'.png'
endif
endif
または、論理和を使うのもアリです。
if(t<10)
'gxprint 00't.png'
endif
if(t>10 & t<100)
'gxprint 0't'.png'
endif
if(t>100)
'gxprint 't'.png'
endif
もし1000枚を超えても条件分岐を追加すればよいだけです。
GrADSで実行
スクリプトを実行するとたくさんの画像がカレントディレクトリにできると思います。
その画像をくっつけてアニメーションを作りましょう。
アニメーションを作成
convertコマンドを用いてアニメーションを作成します。
実行できない場合、以下のコマンドを実行しましょう。OSはUbuntuです。
$ sudo apt install ImageMagick
以下のように実行しましょう。
$ convert -delay 20 *.png out.gif
「-delay」 は,一枚の画像を何秒表示させるかを意味しています。単位は、ミリ秒です。
「*.png」でGrADSで作成した画像を指定しています。
「out.gif」は、出力ファイル名です。これで、out.gifというファイル名のアニメーションファイルができます。
まとめ
GrADSでスクリプトを書き実行し、convertコマンドで完成。
この記事を読んだ方はこちらもおススメです。