Bilingual merge by time overlap
Two subtitle files are matched greedily one-to-one by overlap duration divided by the shorter cue duration — never zipped by line number. With unequal counts or shifted timelines, unmatched primary/secondary cues are listed separately.
Inputs and parameters
input— Primary subtitle text (output timeline)inputFile— Or choose a primary filesecondary— Secondary subtitle textsecondaryFile— Or choose a secondary fileencoding— Source encoding (both files)source— Input formatminOverlap— Minimum overlap ratio (0..1, default 0.5)separator— Bilingual separatorformat— Output format
Real example
Primary:
1
00:00:01,000 --> 00:00:03,000
Hello, world
Secondary:
1
00:00:01,100 --> 00:00:03,100
Bonjour, le monde
(overlap ratio ~0.95, above the default 0.5)
→ 1
00:00:01,000 --> 00:00:03,000
Hello, world
Bonjour, le monde
Limits and failure handling
No line-number zip. Output timing comes from the primary cue; secondary timing is used only for matching. Unmatched cues are left for the user — the tool never guesses a translation. Preview is plain text with an unmatched report; malicious tags never execute. Defaults: 5 MiB / 5000 cues per file; VTT positioning/style may be lost and the original primary file stays downloadable.
FAQ
What if the two files have different cue counts?
Only matched pairs are emitted; surplus primary/secondary cues are listed separately with index, timestamps and plain-text preview instead of being force-zipped.
Can shifted timelines still match?
Slight shifts still match by overlap ratio; fully disjoint timelines (ratio 0) put every cue in the unmatched report. Use offset first, then merge.
What does the 0.5 threshold mean?
Overlap duration divided by the shorter cue duration must reach the threshold; candidates are paired greedily one-to-one, highest ratio first. 0 accepts any overlap, 1 requires near-total coincidence.