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