class Renchin::CLI

Public Instance Methods

cgraph() click to toggle source
# File lib/renchin/cli.rb, line 94
def cgraph
  gif_file = options[:input]
  result_file = options[:output]
  gif_configs = (`identify ~/Downloads/notch_belt.gif`).split("\n")
  pingpong = 0 # comment this if you dont want a pingpong loop
  frame_start = options[:frame_start]
  frame_stop = options[:frame_end]
  frame_bg = options[:frame_bg]
  overlay_x = options[:overlay_x]
  overlay_y = options[:overlay_y]
  overlay_w = options[:overlay_w]
  overlay_h = options[:overlay_h]
  viewport_x = options[:viewport_x]
  viewport_y = options[:viewport_y]
  viewport_w = options[:viewport_w] || gif_configs[0].split(" ")[2].split("x")[0]
  viewport_h = options[:viewport_h] || gif_configs[0].split(" ")[2].split("x")[1]
  speed_current = options[:duration]
  frames = ""
  offset = 0

  image_directory_path = image_directory(__method__)

  # movie_to_frame
  system("convert #{gif_file}[#{frame_bg}] #{image_directory_path}/bg.png")
  system("convert #{gif_file} -repage 0x0 -crop #{overlay_w}x#{overlay_h}+#{overlay_x}+#{overlay_y} +repage #{image_directory_path}/frame.png")

  # frames_to_gif && iterate_frames
  frame_stop = (`identify #{gif_file} | wc -l`).chomp.gsub(/\s/,'').to_i
  for i in frame_start...frame_stop do
    frames = "#{frames} -delay #{speed_current} #{image_directory_path}/frame-out-#{offset}.png"
    system("convert #{image_directory_path}/bg.png #{image_directory_path}/frame-#{i}.png -geometry +#{overlay_x}+#{overlay_y} -compose over -composite #{image_directory_path}/frame-out-#{offset}.png")
    offset += 1
  end
  system("convert #{frames} -loop 0 -crop #{viewport_w}x#{viewport_h}+#{viewport_x}+#{viewport_y} -layers Optimize #{result_file}")


  delete_directory(image_directory_path, "\.(jpg|png)")
  say("Renchin generated sprite file! ~> #{result_file}", :green)
end
reverse() click to toggle source
# File lib/renchin/cli.rb, line 66
def reverse
  movie_file = options[:input]
  result_file = options[:output]
  start_sec = options[:start]
  end_sec = options[:end]

  image_directory_path = image_directory(__method__)

  system("ffmpeg -i #{movie_file} -vf trim=#{start_sec}:#{end_sec},reverse,setpts=PTS-STARTPTS  -an #{result_file}")

  say("Renchin generated reverse movie! ~> #{result_file}", :green)
end
sprite() click to toggle source
# File lib/renchin/cli.rb, line 46
def sprite
  movie_file = options[:input]
  result_file = options[:output]
  captured_frame_per_sec = options[:cfps]

  image_directory_path = image_directory(__method__)

  system("ffmpeg -i #{movie_file} -r #{captured_frame_per_sec} -s qvga -f image2 #{image_directory_path}/renchin-original-%3d.png")
  system("convert #{image_directory_path}/renchin-original-*.png -quality 30 #{image_directory_path}/renchin-converted-%03d.jpg")
  system("convert #{image_directory_path}/renchin-converted-*.jpg -append #{result_file}")

  delete_directory(image_directory_path, "\.(jpg|png)")
  say("Renchin generated sprite file! ~> #{result_file}", :green)
end
tlapse() click to toggle source
# File lib/renchin/cli.rb, line 17
def tlapse
  movie_file = options[:input]
  result_file = options[:output]
  output_fps = options[:ofps] || frame_per_second(60)
  ext = options[:iex]
  debug = options[:debug].to_i
  overwrite = options[:overwrite].to_i == 1 ? '-y' : ''

  image_directory_path = image_directory(__method__)
  Dir.chdir("#{image_directory_path}")

  # Split a movie to png images.
  o1, e1, i1 = Open3.capture3("ffmpeg -i #{movie_file} -f image2 #{image_directory_path}/%7d.#{ext}")
  # Generate timelapse movie from frame images.
  o2, e2, i2 = Open3.capture3("ffmpeg #{overwrite} -f image2 -r #{output_fps} -i #{image_directory_path}/%7d.#{ext} -r #{output_fps} -an -vcodec libx264 -pix_fmt yuv420p #{result_file}")

  if debug == 1
    puts e1
    puts e2
  end

  delete_directory(image_directory_path, "\.#{ext}")
  say("Renchin generated timelapse! ~> #{result_file}", :green)
end

Private Instance Methods

frame_count(expr) click to toggle source
# File lib/renchin/cli.rb, line 135
def frame_count(expr)
  Dir.glob(expr).count
end
frame_per_second(ext) click to toggle source
# File lib/renchin/cli.rb, line 139
def frame_per_second(ext)
  frame_count("*\.#{ext}") > 10 ? frame_count("*\.#{ext}") / 10 : 1
end