module FFMPEG class RecorderOptions def initialize(options) @options = verify_options options end def format @options[:format] end def framerate @options[:framerate] end def infile @options[:infile] end def output @options[:output] end def advanced @options[:advanced] end def log @options[:log] end def log_level @options[:log_level] end def all @options end def parsed vals = "-f #{@options[:format]} " vals << "-r #{@options[:framerate]} " vals << advanced_options if @options[:advanced] vals << "-i #{determine_infile @options[:infile]} " vals << @options[:output] vals << ffmpeg_log_to(@options[:log]) # If provided end private # # Verifies the required options are provided # def verify_options(options) missing_options = required_options.select { |req| options[req].nil? } err = "Required options are missing: #{missing_options}" raise(ArgumentError, err) unless missing_options.empty? options end # # Returns Array of require options a Symbols # def required_options # -f format # -r framerate # -i input # output %i[format framerate infile output] end # # Returns advanced options parsed and ready for ffmpeg to receive. # def advanced_options return nil unless @options[:advanced] raise(ArgumentError, ':advanced cannot be empty.') if options[:advanced].empty? arr = [] options[:advanced].each { |k, v| arr.push "-#{k} #{v}" } arr.join(' ') + ' ' end # # Determines if the ffmpeg output will be to a log # file based on given options. # def ffmpeg_log_to(file) return " 2> #{file}" if file ' > nul 2>&1' # No log file given end # # Returns final infile parameter. # Adds title= qualifier to infile parameter # unless the user is recording the desktop. # def determine_infile(opt) return opt if opt == 'desktop' %Q("title=#{opt}") end end end