Convert and shift

This page converts subtitles between SubRip (.srt), WebVTT (.vtt) and YouTube’s SBV (.sbv), and can move every cue forward or back to fix subtitles that run early or late. It needs JavaScript, because the conversion happens in your browser rather than on a server: that is the whole reason your file never leaves the page.

Drop a subtitle file here, or choose one .srt, .vtt or .sbv. It is read in the page; nothing is sent anywhere.

No file to hand?

What this understands

Three formats, in every direction:

  • SubRip (.srt) — numbered cues, 00:00:01,000 --> 00:00:04,000, comma before the milliseconds. Cue numbers are always rewritten from 1, so a file with gaps or duplicates in its numbering comes out clean.
  • WebVTT (.vtt) — the browser format, with a WEBVTT header and a dot before the milliseconds. Hours may be omitted in the source. NOTE, STYLE and REGION blocks are recognised and skipped.
  • SBV (.sbv) — YouTube’s format: two timestamps separated by a comma, no cue numbers, no markup.

Byte-order marks, Windows line endings and a missing blank line at the end of the file are all handled without complaint, because real subtitle files have all three.

What gets lost, and when

Converting between formats is not always lossless, so anything dropped is reported above the result rather than left for you to notice later:

  • WebVTT positioning (align:start, position:10%) has no equivalent in SRT or SBV and is removed.
  • Markup such as <i> survives SRT and WebVTT but is stripped for SBV, which has no markup at all.
  • Cue names are a WebVTT feature and do not exist in the other two.

Shifting

A shift moves every cue by the same amount — the fix for subtitles that are uniformly early or late. It cannot fix drift, where the error grows through the film; that comes from a frame-rate mismatch and needs the timings rescaled, not offset. Nothing is allowed to move before 00:00:00: cues that would have are clamped, and the number clamped is reported.

Overlapping cues and cues that end before they start are pointed out but left exactly as they are. They are usually deliberate, and silently “fixing” someone’s timings is worse than mentioning them.

Privacy

There is no server side. The file you drop is read by the page itself. Once loaded, this page makes no network requests, sets no cookies, stores nothing, and carries no analytics, no tag manager and no webfont. You can confirm all of that by reading the source — it ships unbundled and unminified for exactly that reason.