| 123456789101112131415161718192021222324252627282930313233343536 |
- 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)
|