From 60c65bcccae4c70c36698b0b9b3e67674088c9fc Mon Sep 17 00:00:00 2001 From: codingFeng101 <3524962421@qq.com> Date: Tue, 30 Jun 2026 22:47:40 +0800 Subject: [PATCH] Carry rounded transcript timestamps --- youtube_transcript_api/formatters.py | 9 ++++----- youtube_transcript_api/test/test_formatters.py | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/youtube_transcript_api/formatters.py b/youtube_transcript_api/formatters.py index 1b779aa2..2ac44b37 100644 --- a/youtube_transcript_api/formatters.py +++ b/youtube_transcript_api/formatters.py @@ -120,11 +120,10 @@ def _seconds_to_timestamp(self, time: float) -> str: >>> self._seconds_to_timestamp(6.93) '00:00:06.930' """ - time = float(time) - hours_float, remainder = divmod(time, 3600) - mins_float, secs_float = divmod(remainder, 60) - hours, mins, secs = int(hours_float), int(mins_float), int(secs_float) - ms = int(round((time - int(time)) * 1000, 2)) + milliseconds = round(float(time) * 1000) + total_secs, ms = divmod(milliseconds, 1000) + total_mins, secs = divmod(total_secs, 60) + hours, mins = divmod(total_mins, 60) return self._format_timestamp(hours, mins, secs, ms) def format_transcript(self, transcript: FetchedTranscript, **kwargs) -> str: diff --git a/youtube_transcript_api/test/test_formatters.py b/youtube_transcript_api/test/test_formatters.py index 28329184..5bb7274a 100644 --- a/youtube_transcript_api/test/test_formatters.py +++ b/youtube_transcript_api/test/test_formatters.py @@ -52,6 +52,24 @@ def test_srt_formatter_starting(self): self.assertEqual(lines[0], "1") self.assertEqual(lines[1], "00:00:00,000 --> 00:00:01,500") + def test_srt_formatter_carries_rounded_milliseconds(self): + transcript = FetchedTranscript( + snippets=[ + FetchedTranscriptSnippet( + text="Rounded boundary", start=1.9996, duration=1.0 + ), + ], + language="English", + language_code="en", + is_generated=True, + video_id="12345", + ) + + content = SRTFormatter().format_transcript(transcript) + lines = content.split("\n") + + self.assertEqual(lines[1], "00:00:02,000 --> 00:00:03,000") + def test_srt_formatter_middle(self): content = SRTFormatter().format_transcript(self.transcript) lines = content.split("\n")