rmm5t/mkv2m4v

View on GitHub
lib/mkv2m4v/track.rb

Summary

Maintainability
A
55 mins
Test Coverage
require "forwardable"

module Mkv2m4v
  class Track
    extend Forwardable

    attr_reader :info
    def_delegator :info, :stream_id, :id
    def_delegators :info, :format

    def initialize(track_info)
      @info = track_info
    end

    def language
      Iso639[info["language"]]
    end

    def title
      info["title"]
    end

    def format_description
      "#{format} (#{info.format_info}, #{info.codec_id})"
    end
  end

  class VideoTrack < Track
    def_delegators :info, :frame_size, :interlaced?, :fps, :width, :height

    def resolution
      "#{frame_size}#{interlaced? ? "i" : "p"}"
    end

    def print(color = nil)
      puts "Video Track ##{id}:".colorize(color)
      puts "  Format:     #{format_description}"
      puts "  Resolution: #{resolution}"
      puts "  FPS:        #{fps}"
      puts "  Language:   #{language}"
      puts "  Title:      #{title}"
    end
  end

  class AudioTrack < Track
    def_delegators :info, :bit_rate

    def channel_count
      info.channels.to_s.chars.first.to_i
    end

    def bit_rate_kbps
      info.bit_rate.gsub(/\D/, "").to_i if info.bit_rate
    end

    def channel_description
      "#{channel_count} (#{info.channel_positions})"
    end

    def bit_rate_description
      "#{bit_rate_kbps}k (#{info.bit_rate_mode})"
    end

    def print(color = nil)
      puts "Audio Track ##{id}:".colorize(color)
      puts "  Format:     #{format_description}"
      puts "  Channels:   #{channel_description}"
      puts "  Bit rate:   #{bit_rate_description}"
      puts "  Language:   #{language}"
      puts "  Title:      #{title}"
    end
  end

  class TextTrack < Track
    def format_description
      "#{format} (#{info.codec_id})"
    end

    def print(color = nil)
      puts "Text Track ##{id}:".colorize(color)
      puts "  Format:     #{format_description}"
      puts "  Language:   #{language}"
      puts "  Title:      #{title}"
    end
  end
end