module Captive::Util

Constants

TIMECODE_REGEX

Public Instance Methods

hours_to_seconds(hours) click to toggle source
# File lib/captive/util.rb, line 34
def hours_to_seconds(hours)
  minutes_to_seconds(hours * 60)
end
milliseconds_to_timecode(milliseconds) click to toggle source

Converts milliseconds to timecode format and returns HH+:MM:SS.MSEC where hours are two or more characters.

# File lib/captive/util.rb, line 43
def milliseconds_to_timecode(milliseconds)
  ms_in_a_second = 1000
  ms_in_a_minute = ms_in_a_second * 60
  ms_in_an_hour = ms_in_a_minute * 60

  hours, remaider = milliseconds.divmod(ms_in_an_hour)
  minutes, remaider = remaider.divmod(ms_in_a_minute)
  seconds, milliseconds = remaider.divmod(ms_in_a_second)

  format('%<h>02d:%<m>02d:%<s>02d.%<ms>03d', { h: hours, m: minutes, s: seconds, ms: milliseconds })
end
minutes_to_seconds(minutes) click to toggle source
# File lib/captive/util.rb, line 30
def minutes_to_seconds(minutes)
  minutes * 60
end
seconds_to_milliseconds(seconds) click to toggle source
# File lib/captive/util.rb, line 38
def seconds_to_milliseconds(seconds)
  seconds * 1000
end
timecode_to_milliseconds(timecode) click to toggle source

Converts timecode in HH:MM:SS.MSEC (or) MM:SS.MSEC to milliseconds.

# File lib/captive/util.rb, line 8
def timecode_to_milliseconds(timecode)
  raise InvalidInput, 'Input should be a valid Timecode' unless TIMECODE_REGEX.match(timecode)

  timecode_split = timecode.split('.')
  time_split = timecode_split[0].split(':')

  # To handle MM:SS.MSEC format
  time_split.unshift('00') if time_split.length == 2

  # Get HH:MM:SS in seconds
  seconds = time_split[-1].to_i
  seconds += minutes_to_seconds(time_split[-2].to_i)
  seconds += hours_to_seconds(time_split[-3].to_i)

  milliseconds = seconds_to_milliseconds(seconds)

  # Millisecond component exists. Pad it to make sure its a full 3 digits
  milliseconds += timecode_split[1].ljust(3, '0').to_i if timecode_split[1]

  milliseconds
end