Module: Captive::Util

Included in:
Cue
Defined in:
lib/captive/util.rb

Constant Summary collapse

TIMECODE_REGEX =
/^(\d{2,}:)?[0-5]\d:[0-5]\d(\.\d{1,3})?$/.freeze

Instance Method Summary collapse

Instance Method Details

#hours_to_seconds(hours) ⇒ Object



34
35
36
# File 'lib/captive/util.rb', line 34

def hours_to_seconds(hours)
  minutes_to_seconds(hours * 60)
end

#milliseconds_to_timecode(milliseconds) ⇒ Object

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



43
44
45
46
47
48
49
50
51
52
53
# 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) ⇒ Object



30
31
32
# File 'lib/captive/util.rb', line 30

def minutes_to_seconds(minutes)
  minutes * 60
end

#seconds_to_milliseconds(seconds) ⇒ Object



38
39
40
# File 'lib/captive/util.rb', line 38

def seconds_to_milliseconds(seconds)
  seconds * 1000
end

#timecode_to_milliseconds(timecode) ⇒ Object

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

Raises:



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 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