def _srt_time(seconds: float) -> str: total = int(seconds) ms = int((seconds - total) * 1000) h, m, s = total // 3600, (total % 3600) // 60, total % 60 return f"{h:02}:{m:02}:{s:02},{ms:03d}" def _segment_fields(segment) -> tuple: if isinstance(segment, dict): return segment["start"], segment["end"], segment["text"], segment.get("speaker") return segment.start, segment.end, segment.text, None def to_srt(segments: list, with_speaker: bool = True) -> str: lines = [] for i, seg in enumerate(segments, start=1): start, end, text, speaker = _segment_fields(seg) lines.append(str(i)) lines.append(f"{_srt_time(start)} --> {_srt_time(end)}") if with_speaker and speaker: lines.append(f"({speaker}): {text.strip()}") else: lines.append(text.strip()) lines.append("") return "\n".join(lines) def to_txt(segments: list, with_speaker: bool = True) -> str: lines = [] for seg in segments: _, _, text, speaker = _segment_fields(seg) if with_speaker and speaker: lines.append(f"({speaker}): {text.strip()}") else: lines.append(text.strip()) return "\n".join(lines)