MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

Matplotlibのpauseを使ったアニメーションを簡単に動画にできるPythonスクリプト matplotrecorder

科学技術計算のためのPython入門――開発基礎,必須ライブラリ,高速化

科学技術計算のためのPython入門――開発基礎,必須ライブラリ,高速化

目次

はじめに

普段、

pythonで簡単なシミュレーションを作る時は、

MATLABと同じ方法で、

matploptlibで色々plotして、

pause関数を使うことで、

アニメーションを表示しています。

myenigma.hatenablog.com

 

本当は、matplotlibの推奨であるanimationモジュールを使って、

描画関数を作って、描画すればいいのですが

animation module — Matplotlib 2.0.0 documentation

animation Examples — Matplotlib 2.0.0 documentation

メインループの中で色々plotしながら、

アニメーションでデバックしたい時は、

animationモジュールを使う方法は面倒なので、

つい、このpauseを使った方法をしてしまいます。

 

そのようなアニメーションを作っている時に、

不意にそのアニメーションを動画にしたい時があるのですが、

animationモジュールを使っている場合は、簡単に動画が作れるのですが、

上記のように色んな所でplotし、pauseで表示するようなコードの場合、

動画を作るのが難しいという問題がありました。

 

そこで、そのようなmatplotlibアニメーションを

簡単に動画にできるPythonスクリプトを

作りましたので紹介したいと思います。

 

matplotrecorder

Pythonスクリプトは下記のリポジトリで公開されています。

github.com

 

こちらのリポジトリのREADMEでは、

こちらのツールを使って作成した、

サンプルのgif動画を見ることができます。

 

事前準備: ImageMagicのインストール

このスクリプトは、アニメーションの各フレームを

pngとして保存し、ImageMagicという

画像処理ライブラリを使って、png列を動画に変換しています。

www.imagemagick.org

 

従って、このスクリプトを使う前に、

ImageMagicをインストールし、

convertコマンドが使えるようになっている必要があります。

 

ImageMagicのインストール方法は下記を参照下さい。

www.imagemagick.org

qiita.com

qiita.com

 

動画の作成方法

上記のリポジトリのmatplotrecorderをDLし、

importして下記のサンプルコードのように

pauseの後にsave_frame() を呼び、

アニメーションが終わった後に、

save_movie()を呼んで、

動画を作成するだけです。

import matplotrecorder
import math

print("A sample recording start")

time = range(50)

x1 = [math.cos(t / 10.0) for t in time]
y1 = [math.sin(t / 10.0) for t in time]
x2 = [math.cos(t / 10.0) + 2 for t in time]
y2 = [math.sin(t / 10.0) + 2 for t in time]

for ix1, iy1, ix2, iy2 in zip(x1, y1, x2, y2):
      plt.plot(ix1, iy1, "xr")
      plt.plot(ix2, iy2, "xb")
      plt.axis("equal")
      plt.pause(0.1)

      matplotrecorder.save_frame()  # save each frame

# generate movie
matplotrecorder.save_movie("animation.mp4", 0.1)
#  matplotrecorder.save_movie("animation.gif", 0.1) #gif is ok.

save_movie関数では、動画ファイル名と、

frame rateを引数として、設定する必要があります。

またこの関数では、convertコマンドを使っているので、

convertコマンドが対応している, mp4やgifなどの拡張子を設定すれば、

その種類の動画ファイルが自動生成されるはずです。

使える動画フォーマットは下記が参考になります。

takuya-1st.hatenablog.jp

 

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

科学技術計算のためのPython入門――開発基礎,必須ライブラリ,高速化

科学技術計算のためのPython入門――開発基礎,必須ライブラリ,高速化