#! 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