ImageMagickで画像サイズを変更、ffmpegで連番画像を動画に変換。
その一連の作業をPythonスクリプトで行う。
# usage: # srcdir dstdir [0/1/2] # 0 ... 連番画像作成 + 動画作成 # 1 ... 連番画像作成 # 2 ... 動画作成 import subprocess import sys import os import shutil import glob #import random ############################################ # コマンドライン引数 args = sys.argv # ディレクトリを二つ取得 dir_in = args[1] dir_out = args[2] mode = int(args[3]) ############################################ # 入力画像一覧 file_name_list = glob.glob(dir_in + "/*.*", recursive=True) if mode==0 or mode==1: index=0 for infile in file_name_list: sindex = str(index).zfill(8) index += 1 # 変換後の画像サイズ xysize = "426x240" # "1920x1080" # 拡張子抜きのファイル名 resultname = os.path.splitext(os.path.basename(infile))[0] # 出力ファイル名作成 outfile = dir_out + "/" + sindex + ".jpg" # ImageMagickのコマンド作成 cmd = "magick " + infile + " -gravity center -background gray -resize " + xysize + " -extent " + xysize + " " + outfile # ImageMagick実行 subprocess.call(cmd) if mode==0 or mode==2: # https://qiita.com/livlea/items/a94df4667c0eb37d859f # 連番画像を0.2fps(5秒で1枚)の動画と考えて、 # それを15fps(1秒に15枚)の動画として作成。結果、5秒間に15x5枚同じ画像を表示する動画となる。 subprocess.call('ffmpeg -framerate 0.2 -i ' + dir_out + '/' + '%08d.jpg' + ' -vcodec libx264 -pix_fmt yuv420p -r 15 out.mp4')
こんなスクリプトを作って、以下のように実行する。
実行結果: