ruby-opencvでキャプチャ動画を保存

引数指定したデバイスorファイルを動画保存する。

require 'opencv'
include OpenCV
captureDevice = 0
if ARGV.size > 0
  captureDevice = ARGV.shift
  captureDevice = captureDevice.to_i if /^\d$/ =~ captureDevice
end
win = GUI::Window.new("win")
cap = CvCapture.open(captureDevice)
begin
  fps = cap.fps
  if fps > 67 or fps < 5 # 変なfpsの時は10fps(100msec間隔)にする
    fps = 10
  end
rescue
  fps = 10
end
frame_msec = 1000/fps
out = CvVideoWriter.new("out.avi", 'XVID', fps, CvSize.new(cap.width, cap.height))
loop do
  img = cap.query
  break unless img
  win.show img
  out.write(img)
  c = GUI::wait_key(frame_msec)
  break if c == 27
end
out.close

指定されたファイルをオープン、
動画再生しつつ、"out.avi"として保存する。

C言語だと cvCreateVideoWriter() とか cvSize() とかをコールするんだが、
ruby-opencvだと CvXxx.new()である。

今手元にUSBカメラとかのキャプチャデバイスが無いので、上記でちゃんと動くかどうかは未確認。
(mp4を読み込んで、avi保存できることだけ確認した)