Subtitle sync: shift and fix SRT / VTT timing
Subtitles too early, too late, or drifting further off as the film goes on? Open the .srt or .vtt file, shift it by a few seconds or retime it from two known points, preview the result and download the fixed file.
UTF-8, UTF-16 and older encodings (Windows-1252, Shift_JIS, EUC-KR, GBK, Big5) are read.
Pick one line near the start and one near the end. Play the video, note when each line is actually spoken, and enter those times. All cues are stretched and shifted linearly between them.
Preview (first 20 cues)
Which fix do I need?
- Same delay all the way through — use Shift by seconds. If subtitles appear 2.5 s before the speech, enter
2.5; if they appear late, enter a negative number. - In sync after a certain point only (an extra scene, an ad break, a different intro) — shift starting at the first cue that is off.
- Gets worse over time — the subtitle was made for another framerate or edit. Try the framerate conversion first (23.976 ↔ 25 fps is the classic PAL speed-up); if you don't know the framerates, use two-point resync.
SRT and VTT conversion
SRT to VTT adds the WEBVTT header, switches the millisecond comma to a dot, keeps <i>, <b> and <u>, and removes <font> tags and {\an8} codes that browsers don't understand. Use VTT for the HTML5 <track> element and most web players.
VTT to SRT numbers the cues from 1 and drops what SRT can't hold: cue settings (position, alignment), NOTE comments, STYLE blocks, classes and ruby readings. Speaker tags like <v Roger> become Roger:.
Output is always UTF-8. Cues pushed entirely before 0:00 are removed, and cues that would start before 0:00 start at 0:00 instead — the status line tells you how many.
Questions
The text is garbled (é, ��, or random symbols).
The file was saved in an older encoding. Pick the right one in Text encoding — Windows-1252 for Western European languages, Shift_JIS for Japanese, EUC-KR for Korean, GBK or Big5 for Chinese. The saved file is converted to UTF-8.
How do I find the right times for two-point resync?
In your player, pause when the first line is spoken and read the time (VLC shows it in the bottom left). Do the same for a line near the end. Enter those times next to the cue numbers; the preview shows the new times immediately.
Does VLC or mpv need a special file name?
The download is named after your file plus .synced. Players load subtitles automatically when the name starts with the video's name, so Movie.synced.srt next to Movie.mkv is usually picked up; otherwise load it from the subtitle menu.