Edited at

ruby + cairo + ffmpeg で砂嵐動画を作成する

More than 1 year has passed since last update.

適当なダミー動画が欲しい時にこれでサクッと作成できます。


cairo のインストール

$ gem install cairo


Rubyコード


suna.rb

require "cairo"

format = Cairo::FORMAT_ARGB32
# キャンバスの大きさ
width = 400
height = 300

surface = Cairo::ImageSurface.new format, width, height
context = Cairo::Context.new surface

# 1ピクセルの大きさ
cell_height = 2
cell_width = 2

# 解像度
num_cols = width / cell_width
num_rows = height / cell_height

66.times do |n|
current_col = 0
current_row = 0

num_rows.times do |i|
num_cols.times do |j|
# ピクセルの座標
y = i * cell_height
x = j * cell_width
# ランダムな色
r = rand(100) / 100.0
g = rand(100) / 100.0
b = rand(100) / 100.0
context.set_source_rgb r, g, b
# ピクセルを描画
context.rectangle x, y, cell_width, cell_height
context.fill
end
end
# ファイルに書き込み
surface.write_to_png "out/suna#{format "%03d", n}.png"
end



連番画像を生成

$ ruby suna.rb


ffmpeg のインストール (Homebrew の場合)

$ brew install ffmpeg


ffmpeg で連番画像から動画を作成

$ ffmpeg -r 15 -i ./out/suna%03d.png -r 15 -an -vcodec libx264 -pix_fmt yuv420p out.mp4