mirror of
				https://github.com/iv-org/invidious.git
				synced 2025-11-03 22:21:55 +00:00 
			
		
		
		
	Add method to convert transcripts response to vtt
This commit is contained in:
		@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user