mirror of
https://github.com/ggerganov/whisper.cpp.git
synced 2025-06-12 20:18:08 +00:00
* Fix a typo * Don't allocate output string unless needed * Add methods to output SRT and WebVTT * Add tests for output methods * Make constants for output private * Add signatures for output methods * Add document on output methods * Fix method name: Segment#speaker_next_turn? -> #speacker_turn_next? * Add Whisper::Segment#descotruct_keys * Add test for Whisper::Context#descotruct_keys * Add signature of Whisper::Segment#deconstruct_keys * Use parentheses to suppress warning * Update date
59 lines
1.1 KiB
Ruby
59 lines
1.1 KiB
Ruby
module Whisper
|
|
class Segment
|
|
SRT_ESCAPES = {
|
|
"&" => "&",
|
|
"<" => "<",
|
|
">" => ">",
|
|
}
|
|
SRT_ESCAPES_RE = Regexp.union(SRT_ESCAPES.keys)
|
|
private_constant :SRT_ESCAPES, :SRT_ESCAPES_RE
|
|
|
|
def to_srt_cue
|
|
"#{srt_start_time} --> #{srt_end_time}\n#{srt_text}\n"
|
|
end
|
|
|
|
def to_webvtt_cue
|
|
"#{webvtt_start_time} --> #{webvtt_end_time}\n#{webvtt_text}\n"
|
|
end
|
|
|
|
private
|
|
|
|
def time_to_a(time)
|
|
sec, decimal_part = time.divmod(1000)
|
|
min, sec = sec.divmod(60)
|
|
hour, min = min.divmod(60)
|
|
[hour, min, sec, decimal_part]
|
|
end
|
|
|
|
def srt_time(time)
|
|
"%02d:%02d:%02d,%03d" % time_to_a(time)
|
|
end
|
|
|
|
def srt_start_time
|
|
srt_time(start_time)
|
|
end
|
|
|
|
def srt_end_time
|
|
srt_time(end_time)
|
|
end
|
|
|
|
def srt_text
|
|
text.gsub(SRT_ESCAPES_RE, SRT_ESCAPES)
|
|
end
|
|
|
|
def webvtt_time(time)
|
|
"%02d:%02d:%02d.%03d" % time_to_a(time)
|
|
end
|
|
|
|
def webvtt_start_time
|
|
webvtt_time(start_time)
|
|
end
|
|
|
|
def webvtt_end_time
|
|
webvtt_time(end_time)
|
|
end
|
|
|
|
alias webvtt_text srt_text
|
|
end
|
|
end
|