Enable timestamps for transcripted text

Add `--enable-timestamps` option to `run_client.py`
script to print out transcripted text with timestamps.

Sample output with translation enabled:
```
[0.000 -> 7.440]  And so, my fellow Americans, ask not what your country can do for you.
[7.440 -> 10.300]  Ask what you can do for your country.

TRANSLATION to fr:
[0.000 -> 7.440] Et donc, mes camarades américains, ne demandez pas ce que votre pays peut faire pour vous.
[7.440 -> 10.300] Demandez ce que vous pouvez faire pour votre pays.
```

Signed-off-by: Jeny Sadadia <jeny.sadadia@collabora.com>
This commit is contained in:
Jeny Sadadia
2026-02-10 15:16:43 +05:30
parent 6c8142a9d2
commit 5e33aa2a7e
3 changed files with 51 additions and 15 deletions
+38 -10
View File
@@ -41,6 +41,7 @@ class Client:
target_language="fr",
translation_callback=None,
translation_srt_file_path="output_translated.srt",
enable_timestamps=False,
):
"""
Initializes a Client instance for audio recording and streaming to a server.
@@ -97,6 +98,7 @@ class Client:
self.last_translated_segment = None
if translate:
self.task = "translate"
self.enable_timestamps = enable_timestamps
self.audio_bytes = None
@@ -175,17 +177,41 @@ class Client:
except Exception as e:
print(f"[WARN] transcription_callback raised: {e}")
return
if self.log_transcription:
original_text = [seg["text"] for seg in self.transcript[-4:]]
if self.last_segment is not None and self.last_segment["text"] not in original_text:
original_text.append(self.last_segment["text"])
utils.clear_screen()
utils.print_transcript(original_text)
if self.enable_translation:
print(f"\n\nTRANSLATION to {self.target_language}:")
utils.print_transcript([seg["text"] for seg in self.translated_transcript[-4:]], translated=True)
if self.enable_timestamps:
original_text_with_timestamps = [
{"start": seg["start"], "end": seg["end"], "text": seg["text"]}
for seg in self.transcript[-4:]]
if self.last_segment is not None and not any(
data.get("text") == self.last_segment["text"]
for data in original_text_with_timestamps):
original_text_with_timestamps.append({
"start": self.last_segment["start"],
"end": self.last_segment["end"],
"text": self.last_segment["text"]
})
utils.clear_screen()
utils.print_transcript(original_text_with_timestamps, timestamps=True)
if self.enable_translation:
print(f"\n\nTRANSLATION to {self.target_language}:")
utils.print_transcript([
{"start": seg["start"], "end": seg["end"], "text": seg["text"]}
for seg in self.translated_transcript[-4:]
], timestamps=True)
else:
original_text = [seg["text"] for seg in self.transcript[-4:]]
if self.last_segment is not None and self.last_segment["text"] not in original_text:
original_text.append(self.last_segment["text"])
utils.clear_screen()
utils.print_transcript(original_text)
if self.enable_translation:
print(f"\n\nTRANSLATION to {self.target_language}:")
utils.print_transcript([seg["text"] for seg in self.translated_transcript[-4:]], translated=True)
def on_message(self, ws, message):
"""
@@ -790,6 +816,7 @@ class TranscriptionClient(TranscriptionTeeClient):
target_language="fr",
translation_callback=None,
translation_srt_file_path="./output_translated.srt",
enable_timestamps=False,
):
self.client = Client(
host,
@@ -810,6 +837,7 @@ class TranscriptionClient(TranscriptionTeeClient):
target_language=target_language,
translation_callback=translation_callback,
translation_srt_file_path=translation_srt_file_path,
enable_timestamps=enable_timestamps,
)
if save_output_recording and not output_recording_filename.endswith(".wav"):