シミュレーションなどを行っていると、全体の様子をアニメーションで表示したいときがあります。
画像ファイル(snapshot)を連結してアニメーションを作成します。
今までは、GIFアニメーション(拡張子がgif)を作成してきました。
しかし、画像数が少ないと特に問題はないのですが、自分の場合、画像数が多くなり容量が増えて以下のようなエラーメッセージが出力されてしまいました。
cache resources exhausted
画像数が増えてもアニメーションを作成したいと思い、いろいろ調べたことをまとめてみました。OSは、Ubuntuです。
GIFアニメーションとは
GIFアニメーションは画像形式の一種で、簡易的なアニメーションを表示することができます。動く画像です。
GIFアニメーションはフレーム毎に圧縮をかけてないので 容量が大きくなります。
MP4動画形式とは
MP4は、あらゆる機器やOSを問わず標準で対応しているファイル形式です。
圧縮率が高く、データサイズが小さいながらも高画質で、最近の動画形式の主流となっています。
GIFアニメーションの作り方
convertコマンドでGIFアニメーションを作成していました。
command not foundと出力される場合は、imagemagickをインストールしてください。
$ sudo apt install ImageMagick
$ convert -delay xx 対象ファイル 出力ファイル
「-delay」は、オプションです。一枚の画像を何秒表示させるかを設定します。xxに数値を入れます。単位はミリ秒なので注意してください。
対象ファイルは、画像ファイル名を入れてください。通常ワイルドカードを使います。
注意として、画像ファイル名は、連番でなければなりません。
連番とは、連続した番号であり、001の次は002,003…..という具合です。連番でないと意図した順番でアニメーションが作成されません。
また、10枚以上の画像ファイルをアニメーションするのに01ではなく1とするのもダメです。
画像ファイル名の例
$ ls
image_01.png image_04.png image_07.png image_10.png
image_02.png image_05.png image_08.png
image_03.png image_06.png image_09.png
意図したアニメーションが描けるかは、lsコマンドを実行して意図した順番に画像ファイルが並んでいるかを確認するのもよいかと思います。
出力ファイルは、アニメーションファイル名です。拡張子は、gifです。
convertコマンド実行例
$ convert -delay 10 image_*.png out.gif
MP4動画形式の作り方
ffmpegコマンドで作成します。
command not foundと出力される場合は、以下のコマンドを実行してください。
$ sudo apt install ffmpeg
$ ffmpeg -r xx -i 対象ファイル 出力ファイル
「-r」は、一秒間に何枚画像ファイルを表示するかというオプションで、xxに数値を入れます。
「-i」は、対象の画像ファイルを指定するオプションです。
対象ファイルは、10枚~99枚なら、%02d.png、100枚~999枚なら、%03d.pngという具合で指定します。(.pngは、拡張子で画像ファイルによって異なります。)また、画像ファイルは001.png,002.png…..のような連番である必要があります。
出力ファイルは、アニメーションファイル名です。拡張子は、.mp4です。mp4である必要はなく、動画形式ファイルの拡張子をつけてください。
$ ffmpeg -r 10 -i %03d.png out.mp4
また、ffmpegコマンドは、GIFアニメーションを動画にしたり、動画から画像ファイルにしたりと多機能なコマンドです。今後の記事にまとめたいと思います。
まとめ
短いアニメーション(画像ファイルが100枚未満)では、GIFアニメーション。
長いアニメーション(画像ファイルが100枚以上)では、MP4動画。
100枚で区切るのはあくまで自論ですが…