Module: RVideo::Tools::AbstractTool::InstanceMethods
- Included in:
- Ffmpeg, Ffmpeg2theora, Flvtool2, HandBrakeCli, Lame, Mencoder, Mp4box, Mp4creator, Mplayer, QtFaststart, Segmenter, Yamdi
- Defined in:
- lib/rvideo/tools/abstract_tool.rb
Instance Attribute Summary collapse
-
#command ⇒ Object
readonly
Returns the value of attribute command.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#progress ⇒ Object
readonly
Returns the value of attribute progress.
-
#raw_result ⇒ Object
readonly
Returns the value of attribute raw_result.
Class Method Summary collapse
-
.abstract_attribute_formatter(*names) ⇒ Object
Defines abstract methods in the convention of “format_#attribute” which are meant to be redefined by classes including this behavior.
Instance Method Summary collapse
-
#audio_bit_rate ⇒ Object
Audio bit rate.
-
#audio_channels ⇒ Object
Audio channels.
-
#audio_sample_rate ⇒ Object
Audio sample rate.
- #calculate_height(ow, oh, w) ⇒ Object
- #calculate_width(ow, oh, h) ⇒ Object
-
#deinterlace ⇒ Object
Resolution.
- #do_execute(command) ⇒ Object
- #execute ⇒ Object
-
#fps ⇒ Object
FPS aka framerate.
- #get_audio_bit_rate ⇒ Object
- #get_audio_channels ⇒ Object
- #get_audio_sample_rate ⇒ Object
- #get_constrain_resolution ⇒ Object
- #get_deinterlace ⇒ Object
- #get_fit_to_height_resolution ⇒ Object
- #get_fit_to_width_resolution ⇒ Object
- #get_fps ⇒ Object
- #get_letterbox_resolution ⇒ Object
- #get_mono_audio ⇒ Object
- #get_original_fps ⇒ Object
- #get_original_resolution ⇒ Object
- #get_padding_resolution ⇒ Object
- #get_resolution ⇒ Object
- #get_specific_audio_bit_rate ⇒ Object
- #get_specific_audio_sample_rate ⇒ Object
- #get_specific_fps ⇒ Object
- #get_specific_resolution ⇒ Object
- #get_stereo_audio ⇒ Object
- #get_valid_height ⇒ Object
- #get_valid_width ⇒ Object
- #get_video_bit_rate ⇒ Object
- #get_video_bit_rate_max ⇒ Object
- #get_video_bit_rate_min ⇒ Object
- #get_video_bit_rate_tolerance ⇒ Object
- #get_video_quality ⇒ Object
- #initialize(raw_command, options = {}) ⇒ Object
- #original ⇒ Object
- #original=(value) ⇒ Object
- #resolution ⇒ Object
- #resolution_and_padding ⇒ Object
- #resolution_keep_aspect_ratio ⇒ Object
-
#temp_dir ⇒ Object
Magic parameters.
- #valid_dimension?(dim) ⇒ Boolean
- #video_bit_rate ⇒ Object
- #video_bit_rate_max ⇒ Object
- #video_bit_rate_min ⇒ Object
- #video_bit_rate_tolerance ⇒ Object
-
#video_quality ⇒ Object
Video quality.
Instance Attribute Details
#command ⇒ Object (readonly)
Returns the value of attribute command.
45 46 47 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 45 def command @command end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
45 46 47 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 45 def @options end |
#progress ⇒ Object (readonly)
Returns the value of attribute progress.
45 46 47 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 45 def progress @progress end |
#raw_result ⇒ Object (readonly)
Returns the value of attribute raw_result.
45 46 47 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 45 def raw_result @raw_result end |
Class Method Details
.abstract_attribute_formatter(*names) ⇒ Object
Defines abstract methods in the convention of “format_#attribute” which are meant to be redefined by classes including this behavior.
27 28 29 30 31 32 33 34 35 36 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 27 def self.abstract_attribute_formatter(*names) names.map { |n| "format_#{n}" }.each do |name| class_eval %{ def #{name}(params = {}) raise ParameterError, "The #{self.class} tool has not implemented the :#{name} method." end }, __FILE__, __LINE__ end end |
Instance Method Details
#audio_bit_rate ⇒ Object
Audio bit rate
323 324 325 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 323 def audio_bit_rate format_audio_bit_rate(get_audio_bit_rate) end |
#audio_channels ⇒ Object
Audio channels
288 289 290 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 288 def audio_channels format_audio_channels(get_audio_channels) end |
#audio_sample_rate ⇒ Object
Audio sample rate
340 341 342 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 340 def audio_sample_rate format_audio_sample_rate(get_audio_sample_rate) end |
#calculate_height(ow, oh, w) ⇒ Object
266 267 268 269 270 271 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 266 def calculate_height(ow, oh, w) h = (w.to_f / (ow.to_f / oh.to_f)).to_f rescue get_valid_height h = get_valid_height if h.nan? h = h.ceil (h - h % 2) end |
#calculate_width(ow, oh, h) ⇒ Object
259 260 261 262 263 264 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 259 def calculate_width(ow, oh, h) w = ((ow.to_f / oh.to_f) * h.to_f).to_f rescue get_valid_width w = get_valid_width if w.nan? w = w.ceil (w - w % 2) end |
#deinterlace ⇒ Object
Resolution
119 120 121 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 119 def deinterlace format_deinterlace(get_deinterlace) end |
#do_execute(command) ⇒ Object
75 76 77 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 75 def do_execute(command) CommandExecutor::execute_tailing_stderr(command, 500) end |
#execute ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 54 def execute @output_params = {} if block_given? and self.respond_to?(:execute_with_progress) execute_with_progress do |progress| yield progress if progress != @progress @progress = progress end if @progress != 100 @progress = 100 yield @progress end else RVideo.logger.info("\nExecuting Command: #{@command}\n") @raw_result = do_execute(@command) end RVideo.logger.info("Result: \n#{@raw_result}") parse_result(@raw_result) end |
#fps ⇒ Object
FPS aka framerate
93 94 95 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 93 def fps format_fps(get_fps) end |
#get_audio_bit_rate ⇒ Object
327 328 329 330 331 332 333 334 335 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 327 def get_audio_bit_rate bit_rate = @options['audio_bit_rate'] || "" case bit_rate when "" {} else get_specific_audio_bit_rate end end |
#get_audio_channels ⇒ Object
292 293 294 295 296 297 298 299 300 301 302 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 292 def get_audio_channels channels = @options['audio_channels'] || "" case channels when "stereo" get_stereo_audio when "mono" get_mono_audio else {} end end |
#get_audio_sample_rate ⇒ Object
344 345 346 347 348 349 350 351 352 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 344 def get_audio_sample_rate sample_rate = @options['audio_sample_rate'] || "" case sample_rate when "" {} else get_specific_audio_sample_rate end end |
#get_constrain_resolution ⇒ Object
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 180 def get_constrain_resolution lw = get_valid_width lh = get_valid_height raise TranscoderError::ParameterError, "invalid width of '#{lw}' for letterbox" unless valid_dimension?(lw) raise TranscoderError::ParameterError, "invalid height of '#{lh}' for letterbox" unless valid_dimension?(lh) w = lw h = calculate_height(original.width, original.height, w) if h > lh h = lh w = calculate_width(original.width, original.height, h) end { :scale => { :width => w, :height => h } } end |
#get_deinterlace ⇒ Object
123 124 125 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 123 def get_deinterlace { :deinterlace => @options['deinterlace'] ? true : false } end |
#get_fit_to_height_resolution ⇒ Object
211 212 213 214 215 216 217 218 219 220 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 211 def get_fit_to_height_resolution h = get_valid_height raise TranscoderError::ParameterError, "invalid height of '#{h}' for fit to height" unless valid_dimension?(h) w = calculate_width(original.width, original.height, h) { :scale => { :width => w, :height => h } } end |
#get_fit_to_width_resolution ⇒ Object
200 201 202 203 204 205 206 207 208 209 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 200 def get_fit_to_width_resolution w = get_valid_width raise TranscoderError::ParameterError, "invalid width of '#{w}' for fit to width" unless valid_dimension?(w) h = calculate_height(original.width, original.height, w) { :scale => { :width => w, :height => h } } end |
#get_fps ⇒ Object
97 98 99 100 101 102 103 104 105 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 97 def get_fps fps = @options['fps'] || "" case fps when "copy" get_original_fps else get_specific_fps end end |
#get_letterbox_resolution ⇒ Object
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 222 def get_letterbox_resolution lw = get_valid_width lh = get_valid_height raise TranscoderError::ParameterError, "invalid width of '#{lw}' for letterbox" unless valid_dimension?(lw) raise TranscoderError::ParameterError, "invalid height of '#{lh}' for letterbox" unless valid_dimension?(lh) w = lw h = calculate_height(original.width, original.height, w) if h > lh h = lh w = calculate_width(original.width, original.height, h) end { :scale => { :width => w, :height => h }, :letterbox => { :width => lw, :height => lh } } end |
#get_mono_audio ⇒ Object
308 309 310 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 308 def get_mono_audio { :channels => "1" } end |
#get_original_fps ⇒ Object
107 108 109 110 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 107 def get_original_fps return {} if original.fps.nil? { :fps => original.fps } end |
#get_original_resolution ⇒ Object
243 244 245 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 243 def get_original_resolution { :scale => { :width => original.width, :height => original.height } } end |
#get_padding_resolution ⇒ Object
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 159 def get_padding_resolution lw = get_valid_width lh = get_valid_height raise TranscoderError::ParameterError, "invalid width of '#{lw}' for letterbox" unless valid_dimension?(lw) raise TranscoderError::ParameterError, "invalid height of '#{lh}' for letterbox" unless valid_dimension?(lh) w = lw h = calculate_height(original.width, original.height, w) if h > lh h = lh w = calculate_width(original.width, original.height, h) end { :scale => { :width => w, :height => h }, :letterbox => { :width => w, :height => lh } } end |
#get_resolution ⇒ Object
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 139 def get_resolution case @options['resolution'] when "copy" then get_original_resolution when "width" then get_fit_to_width_resolution when "height" then get_fit_to_height_resolution when "letterbox" then get_letterbox_resolution else if @options["width"] and not @options["height"] get_fit_to_width_resolution elsif @options["height"] and not @options["width"] get_fit_to_height_resolution elsif @options["width"] and @options["height"] get_specific_resolution else get_original_resolution end end end |
#get_specific_audio_bit_rate ⇒ Object
312 313 314 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 312 def get_specific_audio_bit_rate { :bit_rate => @options['audio_bit_rate'] } end |
#get_specific_audio_sample_rate ⇒ Object
316 317 318 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 316 def get_specific_audio_sample_rate { :sample_rate => @options['audio_sample_rate'] } end |
#get_specific_fps ⇒ Object
112 113 114 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 112 def get_specific_fps { :fps => @options['fps'] } end |
#get_specific_resolution ⇒ Object
247 248 249 250 251 252 253 254 255 256 257 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 247 def get_specific_resolution w = get_valid_width h = get_valid_height raise TranscoderError::ParameterError, "invalid width of '#{w}' for specific resolution" unless valid_dimension?(w) raise TranscoderError::ParameterError, "invalid height of '#{h}' for specific resolution" unless valid_dimension?(h) { :scale => { :width => w, :height => h } } end |
#get_stereo_audio ⇒ Object
304 305 306 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 304 def get_stereo_audio { :channels => "2" } end |
#get_valid_height ⇒ Object
281 282 283 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 281 def get_valid_height @options[:height].to_i - (@options[:height].to_i % 2) end |
#get_valid_width ⇒ Object
277 278 279 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 277 def get_valid_width @options[:width].to_i - (@options[:width].to_i % 2) end |
#get_video_bit_rate ⇒ Object
374 375 376 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 374 def get_video_bit_rate { :video_bit_rate => @options["video_bit_rate"] } end |
#get_video_bit_rate_max ⇒ Object
398 399 400 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 398 def get_video_bit_rate_max { :video_bit_rate_max => @options["video_bit_rate_max"] } end |
#get_video_bit_rate_min ⇒ Object
390 391 392 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 390 def get_video_bit_rate_min { :video_bit_rate_min => @options["video_bit_rate_min"] } end |
#get_video_bit_rate_tolerance ⇒ Object
382 383 384 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 382 def get_video_bit_rate_tolerance { :video_bit_rate_tolerance => @options["video_bit_rate_tolerance"] } end |
#get_video_quality ⇒ Object
361 362 363 364 365 366 367 368 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 361 def get_video_quality quality = @options['video_quality'] || 'medium' { :video_quality => quality }. merge!(get_fps). merge!(get_resolution). merge!(get_video_bit_rate) end |
#initialize(raw_command, options = {}) ⇒ Object
47 48 49 50 51 52 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 47 def initialize(raw_command, = {}) @raw_command = raw_command @options = HashWithIndifferentAccess.new() @command = interpolate_variables(raw_command) @raw_result = "" end |
#original ⇒ Object
402 403 404 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 402 def original @original || inspect_original end |
#original=(value) ⇒ Object
406 407 408 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 406 def original=(value) @original = value end |
#resolution ⇒ Object
127 128 129 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 127 def resolution format_resolution(get_resolution) end |
#resolution_and_padding ⇒ Object
131 132 133 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 131 def resolution_and_padding format_resolution(get_padding_resolution) end |
#resolution_keep_aspect_ratio ⇒ Object
135 136 137 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 135 def resolution_keep_aspect_ratio format_resolution(get_constrain_resolution) end |
#temp_dir ⇒ Object
Magic parameters
82 83 84 85 86 87 88 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 82 def temp_dir if @options['output_file'] "#{File.dirname(@options['output_file'])}/" else "" end end |
#valid_dimension?(dim) ⇒ Boolean
273 274 275 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 273 def valid_dimension?(dim) dim.to_i > 0 end |
#video_bit_rate ⇒ Object
370 371 372 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 370 def video_bit_rate format_video_bit_rate(get_video_bit_rate) end |
#video_bit_rate_max ⇒ Object
394 395 396 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 394 def video_bit_rate_max format_video_bit_rate_max(get_video_bit_rate_max) end |
#video_bit_rate_min ⇒ Object
386 387 388 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 386 def video_bit_rate_min format_video_bit_rate_min(get_video_bit_rate_min) end |
#video_bit_rate_tolerance ⇒ Object
378 379 380 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 378 def video_bit_rate_tolerance format_video_bit_rate_tolerance(get_video_bit_rate_tolerance) end |
#video_quality ⇒ Object
Video quality
357 358 359 |
# File 'lib/rvideo/tools/abstract_tool.rb', line 357 def video_quality format_video_quality(get_video_quality) end |