import re class Subtitle(): def __init__(self,ext="srt"): sub_dict = { "srt":{ "coma": ",", "header": "", "format": lambda i,segment : f"{i + 1}\n{self.timeformat(segment['timestamp'][0])} --> {self.timeformat(segment['timestamp'][1] if segment['timestamp'][1] != None else segment['timestamp'][0])}\n{segment['text']}\n\n", }, "vtt":{ "coma": ".", "header": "WebVTT\n\n", "format": lambda i,segment : f"{self.timeformat(segment['timestamp'][0])} --> {self.timeformat(segment['timestamp'][1] if segment['timestamp'][1] != None else segment['timestamp'][0])}\n{segment['text']}\n\n", }, "txt":{ "coma": "", "header": "", "format": lambda i,segment : f"{segment['text']}\n", }, } self.ext = ext self.coma = sub_dict[ext]["coma"] self.header = sub_dict[ext]["header"] self.format = sub_dict[ext]["format"] def timeformat(self,time): hours = time // 3600 minutes = (time - hours * 3600) // 60 seconds = time - hours * 3600 - minutes * 60 milliseconds = (time - int(time)) * 1000 return f"{int(hours):02d}:{int(minutes):02d}:{int(seconds):02d}{self.coma}{int(milliseconds):03d}" def get_subtitle(self,segments): output = self.header for i, segment in enumerate(segments): if segment['text'].startswith(' '): segment['text'] = segment['text'][1:] try: output += self.format(i,segment) except Exception as e: print(e,segment) return output def write_subtitle(self, segments, output_file): output_file += "."+self.ext subtitle = self.get_subtitle(segments) with open(output_file, 'w', encoding='utf-8') as f: f.write(subtitle)