class Videoinfo::Video

Attributes

file[RW]
name[RW]
result[RW]
screenshots[RW]

Public Class Methods

new(name, file, screenshots = 0) click to toggle source
# File lib/videoinfo/video.rb, line 6
def initialize(name, file, screenshots = 0)
  self.name        = name
  self.file        = file
  self.screenshots = screenshots
end

Public Instance Methods

capture_screenshots() click to toggle source
# File lib/videoinfo/video.rb, line 36
def capture_screenshots
  return [] unless screenshots > 0
  raise Error, "#{file}: file not found" unless File.file?(file)

  duration = %x(#{Videoinfo.mediainfo_binary} --Inform="General;%Duration%" #{file.shellescape}).strip.to_f / 1000
  raise Error, 'unable to determine video duration' unless $?.success? && duration > 0

  images   = []
  stepsize = screenshots == 1 ? 100 : 25 / (screenshots - 1)
  (5..30).step(stepsize) do |percent|
    image = Tempfile.new(["ss_#{percent}.", '.png'])
    %x(#{Videoinfo.ffmpeg_binary} -y -ss #{duration * percent / 100} -i #{file.shellescape} -vframes 1 -f image2 #{image.path} -v quiet)
    if $?.success?
      images << image
    else
      raise Error, "ERROR: unable to capture screenshot at #{percent}% into the video"
    end
  end

  images
end
file=(f) click to toggle source
# File lib/videoinfo/video.rb, line 12
def file=(f)
  @file = File.expand_path(f)
end
populate_result!() click to toggle source
# File lib/videoinfo/video.rb, line 20
def populate_result!
  result.mediainfo       = read_mediainfo
  result.screenshot_urls = capture_screenshots.map { |ss| Videoinfo.upload_screenshot(ss) }

  result
end
read_mediainfo() click to toggle source
# File lib/videoinfo/video.rb, line 27
def read_mediainfo
  raise Error, "#{file}: file not found" unless File.file?(file)

  info = Dir.chdir(File.dirname(file)) { %x(#{Videoinfo.mediainfo_binary} #{File.basename(file).shellescape}) }
  raise Error, 'unable to read mediainfo' unless $?.success?

  info
end