class DuoSplitter::Encoders::BaseEncoder

Attributes

commands[R]

Public Class Methods

known_encoders() click to toggle source
# File lib/duo_splitter/encoders/base_encoder.rb, line 7
def known_encoders
  @known_encoders ||= {}
end
new(context:) click to toggle source
# File lib/duo_splitter/encoders/base_encoder.rb, line 18
def initialize(context:)
  @context = context
  @commands = build_commands
end
register_encoder(encoder_name, encoder_class) click to toggle source
# File lib/duo_splitter/encoders/base_encoder.rb, line 11
def register_encoder(encoder_name, encoder_class)
  known_encoders[encoder_name.to_sym] = encoder_class
end

Public Instance Methods

run() click to toggle source
# File lib/duo_splitter/encoders/base_encoder.rb, line 23
def run
  return if @commands.empty?

  @context.output_dir.mkpath

  BatchProcessor.new(message: 'encoding...', show_progress: @context.show_progress).run(@commands)
end

Private Instance Methods

build_commands() click to toggle source
# File lib/duo_splitter/encoders/base_encoder.rb, line 33
def build_commands
  sentences = @context.album.sentences(intro: @context.output_intro).select(&:source_audio_path)

  sentences.map do |sentence|
    output_basename = sentence.output_basename(prefix_section_number: @context.prefix_section_number, ext: ext)

    command = [@context.ffmpeg_path, '-y']
    command += ['-i', sentence.source_audio_path.to_s]
    command += encoding_options
    command += [@context.output_dir.join(output_basename).to_s]

    command
  end
end
encoding_options() click to toggle source
# File lib/duo_splitter/encoders/base_encoder.rb, line 48
def encoding_options
  raise Error, '#encoding_options must be defined in sub classes'
end
ext() click to toggle source
# File lib/duo_splitter/encoders/base_encoder.rb, line 52
def ext
  raise Error, '#ext must be defined in sub classes'
end