lib/ffmpeg/transcoder.rb in streamio-ffmpeg-0.5.0 vs lib/ffmpeg/transcoder.rb in streamio-ffmpeg-0.6.0

- old
+ new

@@ -1,10 +1,10 @@ require 'open3' module FFMPEG class Transcoder - def initialize(movie, output_file, options = EncodingOptions.new) + def initialize(movie, output_file, options = EncodingOptions.new, transcoder_options = {}) @movie = movie @output_file = output_file if options.is_a?(String) || options.is_a?(EncodingOptions) @raw_options = options @@ -12,11 +12,14 @@ @raw_options = EncodingOptions.new(options) else raise ArgumentError, "Unknown options format '#{options.class}', should be either EncodingOptions, Hash or String." end + @transcoder_options = transcoder_options @errors = [] + + apply_transcoder_options end def run command = "ffmpeg -y -i '#{@movie.path}' #{@raw_options} '#{@output_file}'" FFMPEG.logger.info("Running transcoding...\n#{command}") @@ -70,8 +73,20 @@ true end def encoded @encoded ||= Movie.new(@output_file) + end + + private + def apply_transcoder_options + case @transcoder_options[:preserve_aspect_ratio].to_s + when "width" + new_height = (@raw_options.width / @movie.calculated_aspect_ratio).to_i + @raw_options[:resolution] = "#{@raw_options.width}x#{new_height}" + when "height" + new_width = (@raw_options.height * @movie.calculated_aspect_ratio).to_i + @raw_options[:resolution] = "#{new_width}x#{@raw_options.height}" + end end end end