Spaces:
Runtime error
Runtime error
| """ | |
| Formatting utilities for timestamps and speaker segments. | |
| """ | |
| class TimeFormatter: | |
| def format_timestamp(seconds: float) -> str: | |
| """Format seconds into MM:SS.ss format. | |
| Args: | |
| seconds (float): Time in seconds | |
| Returns: | |
| str: Formatted time string | |
| """ | |
| minutes = int(seconds // 60) | |
| seconds = seconds % 60 | |
| return f"{minutes:02d}:{seconds:05.2f}" | |
| def format_speaker_segments(diarization_result, transcription): | |
| """Format speaker segments with transcribed text. | |
| Args: | |
| diarization_result: Diarization model output | |
| transcription: Whisper transcription output | |
| Returns: | |
| list: Formatted speaker segments | |
| """ | |
| if diarization_result is None: | |
| return [] | |
| formatted_segments = [] | |
| whisper_segments = transcription.get('segments', []) | |
| try: | |
| for turn, _, speaker in diarization_result.itertracks(yield_label=True): | |
| current_text = "" | |
| for w_segment in whisper_segments: | |
| w_start = float(w_segment['start']) | |
| w_end = float(w_segment['end']) | |
| if (w_start >= turn.start and w_start < turn.end) or \ | |
| (w_end > turn.start and w_end <= turn.end): | |
| current_text += w_segment['text'].strip() + " " | |
| formatted_segments.append({ | |
| 'speaker': str(speaker), | |
| 'start': float(turn.start), | |
| 'end': float(turn.end), | |
| 'text': current_text.strip() | |
| }) | |
| except Exception as e: | |
| print(f"Error formatting segments: {str(e)}") | |
| return [] | |
| return formatted_segments |