• トップ
  • ブログ一覧
  • 【Python】ArtistAnimationを使って複数の図からアニメーションを作ってみた
  • 【Python】ArtistAnimationを使って複数の図からアニメーションを作ってみた

    広告メディア事業部広告メディア事業部
    2020.03.27

    IT技術

    ArtistAnimationでアニメーションに挑戦

    1つのフォルダに入っている、たくさんの画像や図、写真を連続して表示させて、アニメーション的動画にしたい。

    今回は、そんな方のために、コードをPythonで書いて行きたいと思います!

    ArtistAnimationとは?

    すでに出来上がってる図を、Python でアニメーション化する時の王道は「matplotlib」の「ArtistAnimation」でしょうか。

    「matplotlib」からの「ArtistAnimation」の詳細な説明はコチラ!

    【matplotlib:ArtistAnimation 説明サイト】
    https://matplotlib.org/api/_as_gen/matplotlib.animation.ArtistAnimation.html

    ArtistAnimation を使うと、沢山の「jpgファイル」や「pngファイル」を1つのフォルダに入れることで、Pythonで簡単に gifアニメにすることができます。

    ちなみに、画像については、写真でもペイントソフトで書いた図でも、問題ありません。

    ArtistAnimationの説明

    複数の画像を動画化させる「matplotlib」の中の「ArtistAnimation」というコマンドは、下記の関数で出来ています。

    ArtistAnimation(fig, artists [, interval] [, repeat delay] [, repeat] [, blit])

    うち []  は、デフォルト値が入っていて、省略可能なパラメータです。

    パラメータの詳細

    各パラメータの意味はコチラになります。

    fig

    描画のサイズなど。

    Figure。

    artists

    描画したい図のリスト。

    list関数にしてください。

    interval (option)

    何ミリ秒ごとに図を変えるか。

    デフォルトでは200ミリ秒ごと。

    numberです。

    repeat delay (option)

    アニメーションを繰り返させる場合、終了から再開まで何ミリ秒にするか。

    デフォルトでは0。

    numberです。

    repeat (option)

    繰り返しをさせるかどうか。

    TrueかFalseかで、デフォルトでは True の繰り返しアリになっています。

    blit (option)

    転送するかどうか。

    TrueかFalseかで、デフォルトでは False になっています。

    ArtistAnimationでアニメーションが完成

    それでは、実際に「ArtistAnimation」を使ってみます。

    まずは、動画化したい画像を1つのフォルダに入れます。

    今回 Python で動画にするのは、下の電磁場解析に関する5つの画像です。

    これを「anime」という名前のフォルダに入れました。

    この、フォルダに入れる画像の保存形式は、「png」でも「jpg」でも問題ないことを確認しています

    ArtistAnimationデフォルト 軸ありアニメーション

    あとは、下記のコードに「図の入ったフォルダ名」「読み込みたいファイル形式」「出来上がった動画の保存ファイル名」を入れるだけです。

    1import glob
    2from PIL import Image
    3 
    4import matplotlib.pyplot as plt
    5import matplotlib.animation as animation
    6
    7#フォルダ名を入れます
    8folderName = "anime"
    9     
    10#該当フォルダから画像のリストを取得。読み込みたいファイル形式を指定。ここではpng
    11picList = glob.glob(folderName + "\*.png")
    12     
    13#figオブジェクトの作成
    14fig = plt.figure()
    15     
    16#空のリスト作成
    17ims = []
    18     
    19#画像ファイルを空のリストの中に1枚ずつ読み込み
    20for i in range(len(picList)):
    21         
    22    #読み込んで付け加えていく
    23    tmp = Image.open(picList[i])
    24    ims.append([plt.imshow(tmp)])     
    25     
    26#アニメーション作成
    27ani = animation.ArtistAnimation(fig, ims, interval=300, repeat_delay=1000)
    28
    29#アニメーション保存。ファイル名を入れてください。ここではtest.gif
    30ani.save("test.gif")

    gifアニメは、プログラムと同じフォルダに作成されます。

    完成した動画

    出来上がった動画はコチラ!

    発表などに使いたいので、interval は「300」と長めにしました。

    完成したアニメーションを改善

    これでも動画としては、許容範囲かもしれません。

    ですが、matplot なだけに、周りに余計な軸がついてしまっています。

    そこで、「軸」や「数字」を消したコードはこちらになります。

    1import glob
    2from PIL import Image
    3 
    4import matplotlib.pyplot as plt
    5import matplotlib.animation as animation
    6
    7#フォルダ名を入れます 
    8folderName = "anime" 
    9
    10#該当フォルダから画像のリストを取得。読み込みたいファイル形式を指定。ここではpng 
    11picList = glob.glob(folderName + "\*.png")
    12     
    13#figオブジェクトの作成
    14fig = plt.figure()
    15
    16#figオブジェクトから目盛り線などを消す
    17plt.tick_params(bottom=False,
    18                left=False,
    19                right=False,
    20                top=False)
    21plt.tick_params(labelbottom=False,
    22                labelleft=False,
    23                labelright=False,
    24                labeltop=False)
    25
    26#空のリスト作成
    27ims = []
    28     
    29#画像ファイルを空のリストの中に1枚ずつ読み込み
    30for i in range(len(picList)):
    31         
    32    #読み込んで付け加えていく
    33    tmp = Image.open(picList[i])
    34    ims.append([plt.imshow(tmp)])     
    35     
    36#アニメーション作成  
    37ani = animation.ArtistAnimation(fig, ims, interval=300, repeat_delay=1000)
    38
    39#アニメーション保存。ファイル名を入れてください。ここではtest.gif
    40ani.save("test.gif")

    完成した動画

    出来上がりは、こんな感じになりました!

    さいごに

    いかがだったでしょうか?

    ArtistAnimation は、Python で写真や図などを動画化するのに、最も簡単なコマンドの1つだと思います。

    上のコードに、アニメーション化したいファイルが入った「フォルダ名」「ファイルの保存形式」「保存したいファイル名(変えなくてもいいです)」を入れるだけなので、とっても簡単です。

    ちょっとしたプレゼン、発表などの時にも役立つのではないでしょうか?

    ぜひ、ご参考くださいね!

    こちらの記事もオススメ!

    featureImg2020.07.30Python 特集実装編※最新記事順Responder + Firestore でモダンかつサーバーレスなブログシステムを作ってみた!P...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    広告メディア事業部

    広告メディア事業部

    おすすめ記事