Skip to content

Commit c86de3e

Browse files
committed
fix: accept alternate timecode formats
1 parent cd7e9d9 commit c86de3e

File tree

2 files changed

+27
-5
lines changed

2 files changed

+27
-5
lines changed

tests/test_timecode_parsing.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,15 @@ def test_parse_timecode_accepts_dot_milliseconds() -> None:
1313
result = parse_timecode_to_timedelta("1:00:16.600")
1414

1515
assert result == timedelta(hours=1, minutes=0, seconds=16, milliseconds=600)
16+
17+
18+
def test_parse_timecode_accepts_large_minutes() -> None:
19+
result = parse_timecode_to_timedelta("116:00")
20+
21+
assert result == timedelta(minutes=116)
22+
23+
24+
def test_parse_timecode_accepts_three_part_milliseconds() -> None:
25+
result = parse_timecode_to_timedelta("0:1:700")
26+
27+
assert result == timedelta(seconds=1, milliseconds=700)

transcribe.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -338,24 +338,34 @@ def parse_timecode_to_timedelta(value: str) -> timedelta:
338338
elif len(parts) == 3:
339339
hours, mins, secs = parts
340340
millis = "0"
341+
if float(secs) >= 60 and float(secs) < 1000:
342+
hours = "0"
343+
mins, secs, millis = parts
341344
elif len(parts) == 2:
342345
hours = "0"
343346
mins, secs = parts
344347
millis = "0"
345348
else:
346349
raise ValueError(f"Unexpected timecode format: {value}")
347350

348-
if float(mins) >= 60 or float(secs) >= 60:
351+
mins_value = float(mins)
352+
secs_value = float(secs)
353+
millis_value = float(millis)
354+
355+
if secs_value >= 60:
356+
raise ValueError(f"Invalid timecode values: {value}")
357+
358+
if len(parts) >= 3 and mins_value >= 60:
349359
raise ValueError(f"Invalid timecode values: {value}")
350360

351-
if float(millis) >= 1000:
361+
if millis_value >= 1000:
352362
raise ValueError(f"Invalid millisecond value: {value}")
353363

354364
return timedelta(
355365
hours=float(hours),
356-
minutes=float(mins),
357-
seconds=float(secs),
358-
milliseconds=float(millis),
366+
minutes=mins_value,
367+
seconds=secs_value,
368+
milliseconds=millis_value,
359369
)
360370

361371

0 commit comments

Comments
 (0)