Add method to convert transcripts response to vtt
This commit is contained in:
parent
4b3ac1a757
commit
caac7e2166
|
@ -33,23 +33,52 @@ module Invidious::Videos
|
||||||
return params
|
return params
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.convert_transcripts_to_vtt(initial_data : JSON::Any, target_language : String) : String
|
def self.convert_transcripts_to_vtt(initial_data : Hash(String, JSON::Any), target_language : String) : String
|
||||||
# Convert into TranscriptLine
|
# Convert into array of TranscriptLine
|
||||||
|
lines = self.parse(initial_data)
|
||||||
|
|
||||||
|
# Taken from Invidious::Videos::CaptionMetadata.timedtext_to_vtt()
|
||||||
vtt = String.build do |vtt|
|
vtt = String.build do |vtt|
|
||||||
result << <<-END_VTT
|
vtt << <<-END_VTT
|
||||||
WEBVTT
|
WEBVTT
|
||||||
Kind: captions
|
Kind: captions
|
||||||
Language: #{tlang}
|
Language: #{target_language}
|
||||||
|
|
||||||
|
|
||||||
END_VTT
|
END_VTT
|
||||||
|
|
||||||
vtt << "\n\n"
|
vtt << "\n\n"
|
||||||
|
|
||||||
|
lines.each do |line|
|
||||||
|
start_time = line.start_ms
|
||||||
|
end_time = line.end_ms
|
||||||
|
|
||||||
|
# start_time
|
||||||
|
vtt << start_time.hours.to_s.rjust(2, '0')
|
||||||
|
vtt << ':' << start_time.minutes.to_s.rjust(2, '0')
|
||||||
|
vtt << ':' << start_time.seconds.to_s.rjust(2, '0')
|
||||||
|
vtt << '.' << start_time.milliseconds.to_s.rjust(3, '0')
|
||||||
|
|
||||||
|
vtt << " --> "
|
||||||
|
|
||||||
|
# end_time
|
||||||
|
vtt << end_time.hours.to_s.rjust(2, '0')
|
||||||
|
vtt << ':' << end_time.minutes.to_s.rjust(2, '0')
|
||||||
|
vtt << ':' << end_time.seconds.to_s.rjust(2, '0')
|
||||||
|
vtt << '.' << end_time.milliseconds.to_s.rjust(3, '0')
|
||||||
|
|
||||||
|
vtt << "\n"
|
||||||
|
vtt << line.line
|
||||||
|
|
||||||
|
vtt << "\n"
|
||||||
|
vtt << "\n"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return vtt
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.parse(initial_data : Hash(String, JSON::Any))
|
private def self.parse(initial_data : Hash(String, JSON::Any))
|
||||||
body = initial_data.dig("actions", 0, "updateEngagementPanelAction", "content", "transcriptRenderer",
|
body = initial_data.dig("actions", 0, "updateEngagementPanelAction", "content", "transcriptRenderer",
|
||||||
"content", "transcriptSearchPanelRenderer", "body", "transcriptSegmentListRenderer",
|
"content", "transcriptSearchPanelRenderer", "body", "transcriptSegmentListRenderer",
|
||||||
"initialSegments").as_a
|
"initialSegments").as_a
|
||||||
|
|
Loading…
Reference in a new issue