スポンサーリンク

ImageMagick + ffmpeg + Pythonでスライドショー的なmp4動画を作る

ImageMagickで画像サイズを変更、ffmpegで連番画像を動画に変換。

その一連の作業をPythonスクリプトで行う。

create_slideshow_movie.py

# 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')

こんなスクリプトを作って、以下のように実行する。

>python create_slideshow_movie.py src dst 0

実行結果:

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: