mirror of
https://github.com/unshackle-dl/unshackle.git
synced 2026-11-12 20:15:10 +00:00
fix(webvtt): don't shorten cues when splicing boundary duplicates
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user