Class: RVideo::Tools::Ffmpeg2theora

Inherits:
Object
  • Object
show all
Includes:
AbstractTool::InstanceMethods
Defined in:
lib/rvideo/tools/ffmpeg2theora.rb

Instance Attribute Summary collapse

Attributes included from AbstractTool::InstanceMethods

#command, #options, #progress, #raw_result

Instance Method Summary collapse

Methods included from AbstractTool::InstanceMethods

abstract_attribute_formatter, #audio_bit_rate, #audio_channels, #audio_sample_rate, #calculate_height, #calculate_width, #deinterlace, #do_execute, #execute, #fps, #get_audio_bit_rate, #get_audio_channels, #get_audio_sample_rate, #get_constrain_resolution, #get_deinterlace, #get_fit_to_height_resolution, #get_fit_to_width_resolution, #get_fps, #get_letterbox_resolution, #get_mono_audio, #get_original_fps, #get_original_resolution, #get_padding_resolution, #get_resolution, #get_specific_audio_bit_rate, #get_specific_audio_sample_rate, #get_specific_fps, #get_specific_resolution, #get_stereo_audio, #get_valid_height, #get_valid_width, #get_video_bit_rate, #get_video_bit_rate_max, #get_video_bit_rate_min, #get_video_bit_rate_tolerance, #get_video_quality, #initialize, #original, #original=, #resolution, #resolution_and_padding, #resolution_keep_aspect_ratio, #temp_dir, #valid_dimension?, #video_bit_rate, #video_bit_rate_max, #video_bit_rate_min, #video_bit_rate_tolerance, #video_quality

Instance Attribute Details

#raw_metadataObject (readonly)

Returns the value of attribute raw_metadata.



6
7
8
# File 'lib/rvideo/tools/ffmpeg2theora.rb', line 6

def 
  @raw_metadata
end

Instance Method Details

#do_execute_with_progress(command, &block) ⇒ Object



12
13
14
15
16
17
18
19
20
# File 'lib/rvideo/tools/ffmpeg2theora.rb', line 12

def do_execute_with_progress(command, &block)
  @raw_result = ''
  duration = 0
  CommandExecutor::execute_with_block(command, "\r") do |line|
    progress, duration = parse_progress(line, duration)
    block.call(progress) if block && progress
    @raw_result += line.to_s + "\r"
  end
end

#execute_with_progress(&block) ⇒ Object



22
23
24
25
26
27
# File 'lib/rvideo/tools/ffmpeg2theora.rb', line 22

def execute_with_progress(&block)
  RVideo.logger.info("\nExecuting Command: #{@command}\n")
  do_execute_with_progress(@command, &block)
rescue RVideo::CommandExecutor::ProcessHungError
  raise TranscoderError, "Transcoder hung."
end

#format_video_quality(params = {}) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/rvideo/tools/ffmpeg2theora.rb', line 42

def format_video_quality(params={})
  bitrate = params[:video_bit_rate].blank? ? nil : params[:video_bit_rate]
  factor = (params[:scale][:width].to_f * params[:scale][:height].to_f * params[:fps].to_f)
  case params[:video_quality]
  when 'low'
    " -v 1 "
  when 'medium'
    "-v 5 "
  when 'high'
    "-v 10 "
  else
    ""
  end
end

#parse_progress(line, duration) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/rvideo/tools/ffmpeg2theora.rb', line 29

def parse_progress(line, duration)
  if line =~ /Duration: (\d{2}):(\d{2}):(\d{2}).(\d{1})/
    duration = (($1.to_i * 60 + $2.to_i) * 60 + $3.to_i) * 10 + $4.to_i
  end

  if line =~ /(\d{1,2}):(\d{2}):(\d{2})\.(\d)\d audio: \d+kbps video: \d+kbps/
    current_time = (($1.to_i * 60 + $2.to_i) * 60 + $3.to_i) * 10 + $4.to_i
  end
  
  progress = (current_time*100/duration) rescue nil
  return [progress, duration]
end

#parse_result(result) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/rvideo/tools/ffmpeg2theora.rb', line 57

def parse_result(result)
  if m = /does not exist or has an unknown data format/.match(result)
    raise TranscoderError::InvalidFile, "I/O error"
  end
  
  if m = /General output options/.match(result)
    raise TranscoderError::InvalidCommand, "no command passed to ffmpeg2theora, or no output file specified"
  end
  
  @raw_metadata = result.empty? ? "No Results" : result
  return true
end

#tool_commandObject



8
9
10
# File 'lib/rvideo/tools/ffmpeg2theora.rb', line 8

def tool_command
  'ffmpeg2theora'
end