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