複数の静止画像から動画像の生成(Ruby を使用)
#! ruby -Ks
# coding: windows-31j
# usage: ruby genavi.rb filelist.rb 1024x768 hoge.avi avi
# ruby genavi.rb [file name] [size] [file name] [sub directory name]
# This program
# generate AVI file
# generate image file list
# input : a YAML file that discribe pattern(s) of file names
# [example of "filelist.rb"]
# $a = <<-EOS
# - path: /home/www/teaimage/20100524syouhin
# pattern: *.JPG
# - path: /home/www/teaimage/20100524syouhin_data
# pattern: *.JPG
# EOS
# output : AVI file
require 'rubygems'
require 'progressbar'
require 'yaml'
require 'digest/sha2'
load ARGV[0]
avi_size = ARGV[1]
avi_file_name = ARGV[2]
avi_sub_dir = ARGV[3]
b = YAML.load( $a )
for i in b
# from a pattern to a file list
files = Dir.glob( i["path"] + "/" + i["pattern"] ).sort
progress_bar = ProgressBar.new( File.basename(i["path"]), files.length )
# create thumbnails directory
if i["path"][0] = "/" then
path = i["path"]
else
path = Dir.pwd + "/" + i["path"]
end
# generate a sequence of images whose file name starts from the "0001". and change the image size
# 0001 から開始する連番画像に変える. ついでにサイズを変える
system("rm -f /tmp/image*.png")
k=1
for j in files
name = sprintf( "/tmp/image%04d.png", k )
system( "convert " + j + " -resize " + avi_size + " " + name )
k = k + 1
progress_bar.inc
end
progress_bar.finish
# "-r 1" is frame rate
# -r 1 はフレームレート
avi_dir = path + "/" + avi_sub_dir
system("mkdir", avi_dir)
system( "rm -f " + avi_dir + "/" + avi_file_name )
system( "ffmpeg -r 2 -i /tmp/image%04d.png -vcodec mjpeg -sameq " + avi_dir + "/" + avi_file_name )
end
使用法の例
- まず、ファイルリストを記述したファイルを作る。
ファイル名は何でも良い
- ファイルリストを読み込ませる
作成される動画ファイルのサイズは 1024x768, ファイル名は hoge.avi, サブディレクトリは avi に設定している
- できた動画ファイルを確認する
mplayer hoge.avi