スポンサーリンク
具体例:
上記、magickのappendを、ディレクトリの中の全ての画像に対して行う関数を作成する。
このスクリプトで"glass/"ディレクトリと"metalic/"ディレクトリ内の連番画像をappendでつなげて"appends/"ディレクトリへ保存する
import subprocess # コマンドラインを実行する import os # パス文字列の操作など import glob # ファイル一覧取得など ############################################ ############################################ ## # @brief 画像データを横に二つ並べる処理を全ての画像に対して行う # @param [in] dir_left 左側に配置する画像が存在するディレクトリ # @param [in] dir_right 右側に配置する画像が存在するディレクトリ # @param [in] dir_out 出力先のディレクトリ def image_append(dir_left , dir_right , dir_out): # 各ディレクトリの中のファイル一覧 L_images = glob.glob(dir_left + "/*.png", recursive=True) R_images = glob.glob(dir_right + "/*.png", recursive=True) # L_images,R_imagesのリストの要素をそれぞれiL,iRとして for(iL,iR) in zip(L_images,R_images): # 拡張子なしの left側のファイル名を取得 oname = os.path.splitext(os.path.basename(iL))[0] # 出力ファイル名作成 opathname = dir_out + "/" + oname + ".png" # コマンド作成 command = "magick convert +append " + iL + " " + iR + " " + opathname # 作成したコマンドの確認 print(command) # コマンドの実行 subprocess.call(command) ############################################ ############################################ # 連番画像作成 引数は全てディレクトリ名 image_append("glass" , "metalic" , "appends")
これ単体ならわざわざPythonから呼び出す必要はないが、上記スクリプトに続けて呼び出したいのでPythonからcallする。
import subprocess # コマンドラインを実行する import os # パス文字列の操作など import glob # ファイル一覧取得など ############################################ ############################################ ## # @brief 連番画像から動画を作成 # @param [in] source 画像の場所とファイル名のパターン # @param [in] outFileName 出力ファイル名 # @param [in] startNumber 画像の連番の開始番号 def mp4out(source,outFileName,startNumber): # コマンド作成 command = f'ffmpeg -start_number {startNumber} -r 15 -i {source} -vcodec libx264 -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -framerate 60 {outFileName}' # コマンドの実行 subprocess.call(command) ############################################ ############################################ # 動画作成 ファイル名、出力ファイル名、連番の最初の番号 mp4out("appends/%04d.png","out.mp4",1)
C:\TEST\DATA │ compmv.py ... pythonスクリプト │ out.mp4 ... ffmpegで生成した動画ファイル。mp4outで生成される │ ├─appends │ 0000.png │ 0001.png │ 0002.png │ 0003.png │ 0004.png │ .... 結合済み画像 image_appendで出力される │ ├─glass │ 0001.png │ 0002.png │ 0003.png │ 0004.png │ .... 連番画像1 │ └─metalic 0001.png 0002.png 0003.png 0004.png .... 連番画像2
import subprocess # コマンドラインを実行する import os # パス文字列の操作など import glob # ファイル一覧取得など ############################################ ############################################
## # @brief 画像データを横に二つ並べる処理を全ての画像に対して行う # @param [in] dir_left 左側に配置する画像が存在するディレクトリ # @param [in] dir_right 右側に配置する画像が存在するディレクトリ # @param [in] dir_out 出力先のディレクトリ def image_append(dir_left , dir_right , dir_out): # 各ディレクトリの中のファイル一覧 L_images = glob.glob(dir_left + "/*.png", recursive=True) R_images = glob.glob(dir_right + "/*.png", recursive=True) # L_images,R_imagesのリストの要素をそれぞれiL,iRとして for(iL,iR) in zip(L_images,R_images): # 拡張子なしの left側のファイル名を取得 oname = os.path.splitext(os.path.basename(iL))[0] # 出力ファイル名作成 opathname = dir_out + "/" + oname + ".png" # コマンド作成 command = "magick convert +append " + iL + " " + iR + " " + opathname # 作成したコマンドの確認 print(command) # コマンドの実行 subprocess.call(command)
############################################ ############################################
## # @brief 連番画像から動画を作成 # @param [in] source 画像の場所とファイル名のパターン # @param [in] outFileName 出力ファイル名 # @param [in] startNumber 画像の連番の開始番号 def mp4out(source,outFileName,startNumber): # コマンド作成 command = f'ffmpeg -start_number {startNumber} -r 15 -i {source} -vcodec libx264 -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -framerate 60 {outFileName}' # コマンドの実行 subprocess.call(command)
############################################ ############################################ # 連番画像作成 image_append("glass" , "metalic" , "appends") # 動画作成 mp4out("appends/%04d.png","out.mp4",1)