def remove_metadata(LRC): lines = LRC.split("\n") sep = "\n" while lines and (not lines[0] or not lines[0][1].isdigit() or lines[0][0] != '['): del lines[0] return sep.join(lines) def safe_read(i, a): if i > len(a): return None else: return a[i] def get_line_info(linein): # Extract minutes and seconds, handle potential issues with slicing and conversion minutes = float(linein[1:3]) seconds = float(linein[4:9]) lt = minutes * 60 + seconds line = "" i = 10 j = 1 breaks = [] times = [] while i < len(linein): if safe_read(i+9,linein) == '>' and linein[i] == '<': tb = 0 breaks.append(j) tb += float(linein[i+1:i+3])*60 tb += float(linein[i+4:i+9]) times.append(tb) i += 10 else: line += linein[i] i += 1 j += 1 return {"time": lt, "line": line, "wordbreaks": breaks, "wordtimes": times} def convert_to_json(LRC: str): e = LRC.split("\n") a = [] for i in e: a.append(get_line_info(i)) return a if __name__ == "__main__": e = open(".lrc", encoding="UTF8") p = convert_to_json(e.read()) print(p)