SRT ⇔ VTT Subtitle Converter and Timing Shifter
Load or paste a subtitle file (.srt or .vtt) and convert it between SRT and WebVTT. You can also shift every timestamp earlier or later by a number of seconds, or fix drift caused by a different frame rate, such as 23.976 fps versus 25 fps. Shift_JIS files are detected automatically and saved back as UTF-8. Everything runs in your browser, so your subtitles are never uploaded. To convert the video itself, use the Video & Audio Converter.
🔒 Runs in your browser · Your data is never sent to a server
Pick an SRT or VTT file, or drag and drop it here. You can also paste text into the box below.
A positive value delays the subtitles, a negative value moves them earlier (for example 1.5 or -0.8). Blank means 0.
Pick both the fps the subtitles were made for and the fps of your video, and every timestamp is scaled to match.
How to use
- Load an SRT or VTT file with "Choose a subtitle file" (drag and drop or pasting also works).
- If the text looks garbled, change "Character encoding".
- Pick an "Output format" and, if needed, set "Shift timing (seconds)" or the frame rates.
- Check the "Result", then save it with "Copy" or "Download".
Notes
- Auto-detection checks for a BOM and whether the bytes are valid UTF-8; otherwise the file is read as Shift_JIS. If the text looks garbled, switch "Character encoding" manually.
- The output is always UTF-8 without a BOM. Saving as Shift_JIS is not supported.
- SRT to VTT changes the millisecond separator from a comma to a period and adds the WEBVTT header. VTT to SRT drops positioning settings (line, align and so on) and NOTE, STYLE and REGION blocks, and renumbers the cues.
- If shifting pushes a cue before 0:00, it is removed when its end is also at or before 0:00; a cue that straddles 0:00 has its start clamped to 0:00.
- Inline tags (<i>, <b>, <v> and so on) and the text itself are kept as they are. Other formats such as ASS and SSA are not supported.
- All processing happens in your browser; your subtitles are never sent to a server.
Glossary
SRT
A simple subtitle format made of a number, a time range and the text. Milliseconds are separated by a comma.
WebVTT (VTT)
The subtitle format for web video (the HTML video element). The file starts with WEBVTT and milliseconds are separated by a period.
Frame rate adjustment
When a video runs at a different speed, such as 23.976 fps versus 25 fps, subtitles slowly drift out of sync. Multiplying every timestamp by a ratio brings them back in line.
BOM
A marker at the start of a file that identifies its text encoding. UTF-8 and UTF-16 files sometimes have one.
FAQ
What is the difference between SRT and VTT, and what changes?
SRT separates milliseconds with a comma and VTT with a period, and VTT needs a WEBVTT line at the top. SRT to VTT swaps those. VTT to SRT drops information SRT cannot hold, such as positioning and NOTE blocks, and renumbers the cues.
My subtitles are a few seconds off. What should I do?
Enter a positive value in "Shift timing (seconds)" to delay the subtitles or a negative value to show them earlier. Decimals such as 0.5 work too. This fixes a constant offset across the whole file.
The subtitles start in sync but drift further apart over time. Why?
That usually means the frame rates differ, for example 23.976 fps versus 25 fps. Choose the fps the subtitles were made for under "Original frame rate" and your video’s fps under "Target frame rate", and all timestamps are scaled proportionally.
A Shift_JIS subtitle file shows garbled text.
Auto-detection decides by whether the bytes are valid UTF-8, so it can occasionally guess wrong. Switch "Character encoding" to Shift_JIS or UTF-8 by hand. The output is saved as UTF-8, which most players read correctly.
Can it convert ASS or SSA subtitles?
No, only SRT and WebVTT are supported. ASS and SSA carry styles and effects that this tool cannot represent.
Share this page
