mirror of
				https://github.com/iv-org/invidious.git
				synced 2025-11-04 14:41:59 +00:00 
			
		
		
		
	Add method to convert transcripts response to vtt
This commit is contained in:
		@@ -33,23 +33,52 @@ module Invidious::Videos
 | 
			
		||||
      return params
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def self.convert_transcripts_to_vtt(initial_data : JSON::Any, target_language : String) : String
 | 
			
		||||
      # Convert into TranscriptLine
 | 
			
		||||
    def self.convert_transcripts_to_vtt(initial_data : Hash(String, JSON::Any), target_language : String) : String
 | 
			
		||||
      # Convert into array of TranscriptLine
 | 
			
		||||
      lines = self.parse(initial_data)
 | 
			
		||||
 | 
			
		||||
      # Taken from Invidious::Videos::CaptionMetadata.timedtext_to_vtt()
 | 
			
		||||
      vtt = String.build do |vtt|
 | 
			
		||||
        result << <<-END_VTT
 | 
			
		||||
        vtt << <<-END_VTT
 | 
			
		||||
        WEBVTT
 | 
			
		||||
        Kind: captions
 | 
			
		||||
        Language: #{tlang}
 | 
			
		||||
        Language: #{target_language}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        END_VTT
 | 
			
		||||
 | 
			
		||||
        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
 | 
			
		||||
 | 
			
		||||
    def self.parse(initial_data : Hash(String, JSON::Any))
 | 
			
		||||
      return vtt
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    private def self.parse(initial_data : Hash(String, JSON::Any))
 | 
			
		||||
      body = initial_data.dig("actions", 0, "updateEngagementPanelAction", "content", "transcriptRenderer",
 | 
			
		||||
        "content", "transcriptSearchPanelRenderer", "body", "transcriptSegmentListRenderer",
 | 
			
		||||
        "initialSegments").as_a
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user