at backyard

Color my life with the chaos of trouble.

Pythonで画像を繋ぎ合わせてGIFを作るスクリプト

昨晩はPythonopencv使って顔検出で遊んでました。
昔のコードを引っ張り出してコードをいじりながら遊んでいたのですが、いやはや、こういうのは面白くてついついやってしまいますね。 気づけば時間が溶けていて夜更かししてしまいました。

さて、顔検出で無数の画像を繋ぎ合わせてgif化したいと思った際にサクッと画像を繋ぎ合わせてgif動画を作るスクリプトを書きました。
pillowが必要になるのでインストールした上で利用してください。

pip install Pillow

スクリプトはこちらになります。
なお、下記の定数の値を変更することで作成されるGIFの内容を変更できるようにしています。

  • IMAGE_COUNT_LIMIT - 利用する画像の上限枚数(大量に画像がある場合、エラーになるので今は200を上限しています)
  • DURATION - 一枚の画像に対する表示時間となります。数を低くすると、GIFがよりなめらか(細かく)表示されるようになります
from PIL import Image
from os import path
from glob import glob
import sys


IMAGE_COUNT_LIMIT = 200
DURATION = 100


def create_gif(input_dir, output_filename):
    fp_list = sorted(glob(path.join(*[input_dir, '*'])))
    images = []
 
    for i, fp in enumerate(fp_list):
        images.append(Image.open(fp))
        if(i == IMAGE_COUNT_LIMIT):
            break
 
    images[0].save(output_filename, save_all=True, append_images=images[1:], optimize=False, duration=DURATION, loop=0)
    print("Successful")


if __name__ == "__main__":
    args = sys.argv

    usage_text = """Usage:
  python make_git.py <input_dir_name> <output_filename>"""

    if len(args) != 3:
        print(usage_text)
        sys.exit()

    input_dir = args[1]
    output_filename = args[2]
    
    print("Input dir: ", input_dir)
    print("Output filename: ", output_filename)

    create_gif(input_dir, output_filename)

引数の処理を始め、ところどころ手抜き感はありますが、まあ使い捨てのスクリプトということで大目に見てください。

使い方は下記のとおりです。

python make_git.py <input_dir_name> <output_filename>