fix(webvtt): don't shorten cues when splicing boundary duplicates

This commit is contained in:
imSp4rky
2026-07-16 23:22:14 -06:00
parent 09fe2e88b2
commit cd0b9e1709
2 changed files with 15 additions and 2 deletions
+11
View File
@@ -79,6 +79,17 @@ def test_merge_splices_triple_duplicate_into_one():
assert "00:00:01.000 --> 00:00:04.000" in out
def test_merge_duplicate_ending_earlier_keeps_later_end():
# A boundary duplicate that ends BEFORE the kept cue must not shorten it: the
# splice extends only. Here the kept cue runs to 00:00:05.000 and the duplicate
# is a brief 00:00:04.900 -> 00:00:04.950 re-emission of the same payload.
vtt = "WEBVTT\n\n00:00:01.000 --> 00:00:05.000\n[music]\n\nWEBVTT\n\n00:00:04.900 --> 00:00:04.950\n[music]\n"
out = merge_segmented_webvtt(vtt)
assert out.count("[music]") == 1
assert "00:00:01.000 --> 00:00:05.000" in out, f"kept cue was truncated:\n{out}"
assert "00:00:04.950" not in out
def test_merge_drops_cue_ids_and_notes_keeps_style():
vtt = (
"WEBVTT\n\n"
+4 -2
View File
@@ -62,8 +62,10 @@ def merge_segmented_webvtt(vtt_raw: str, segment_durations: Optional[list[int]]
normalized = "\n".join(line.strip() for line in payload)
if prev is not None and _timestamp_ms(start) - prev_end_ms <= 1 and normalized == prev[4]:
prev[1] = end # splice: extend the kept cue, drop the duplicate
prev_end_ms = _timestamp_ms(end)
end_ms = _timestamp_ms(end)
if end_ms > prev_end_ms: # splice: extend only, never shorten the kept cue
prev[1] = end
prev_end_ms = end_ms
continue
prev = [start, end, settings, "\n".join(payload), normalized]