Skip to content
ToolShelf

Subtitle two-point resync

Give one early line and one late line the times they should be at, and the whole SRT or VTT file is corrected along a straight line. Frame rate presets too, and nothing is uploaded.

Your subtitle file

Your subtitle file stays in this tab. The work is done by JavaScript in your browser. None of it is uploaded, logged or saved, and the tool keeps working with the network off.

Corrected timing

—

Choose a subtitle file to start.

Two kinds of wrong, and only one of them is a shift

Subtitles go out of sync in two ways, and almost every tool only fixes the easy one.

The whole file is out by a fixed amount. Every line is three seconds late, from the first to the last. A shift fixes it, and that is what most subtitle tools offer.

The file drifts. The first line is half a second out, the last is forty seconds out, and everything in between is somewhere on the way. Here a shift is useless: correct the beginning and the end gets worse by the same amount you just moved it.

Drift almost always means frame rate. A film mastered at 23.976 frames a second and broadcast in Europe at 25 runs about 4% faster and finishes several minutes earlier. Subtitles made from one played against the other separate steadily, which is why the mismatch feels fine for the first ten minutes and unwatchable by the end.

Two points define the correction

Both problems are the same straight line with different numbers in it:

new time = scale × old time + shift

A pure shift is the case where the scale is 1. Drift is the case where it is not. Given where one early line should really be and where one late line should really be, there is exactly one line through both points, and that is the correction.

So there is no separate shift mode here and no need for one. Tell it two lines are each three seconds late and it produces a shift; tell it the first is one second late and the last is forty, and it produces the stretch that fixes the drift.

Pick your two points far apart

This is the one thing worth getting right, and it is easy to get wrong.

The scale comes from dividing the difference between your two corrections by the gap between them. Divide by a small gap and any error in your readings is magnified across the rest of the file.

Two points a minute apart turn a half-second misreading into an 0.8% error, which is about thirty seconds adrift by the end of a film. The same misreading over ninety minutes is 0.01%, which is under a second. So take the second reading from the last few minutes, not from the next scene. The tool says so when your two points are close.

The other half of that: you do not need to be precise. Pausing at roughly the right moment is fine, as long as the two points are far apart.

The frame rates are not the numbers on the label

If you know the two frame rates involved, that mode does the arithmetic exactly and you do not need to read anything off a player at all.

It uses 24000/1001 and 30000/1001 rather than 23.976 and 29.97, and that is not pedantry. Those rounded decimals are a legacy of fitting NTSC colour into an existing black-and-white signal, and using them instead of the fractions introduces a drift of about 1.8 seconds over two hours. That is enough to notice, and it is exactly the sort of error somebody arrives here to fix.

Only the times change

The text, the line breaks, and everything WebVTT carries alongside a cue (positioning, alignment, notes, styling blocks) are written back exactly as they arrived. A resync that quietly dropped the positioning on the one cue that needed it would be a worse outcome than the timing being out in the first place.

The two formats are the same idea written slightly differently: SRT puts a comma before the milliseconds and numbers its cues, WebVTT uses a full stop and adds a header. You can convert between them when you save. Getting that separator wrong is worth knowing about, because a player given a comma in a VTT file usually loads every cue at zero rather than refusing the file, which looks like a broken download rather than a broken timestamp.

Everything happens in this tab. There is no request in this page that could send your file anywhere, nothing is stored, and it works with the network off.

Questions

Why do my subtitles drift further out as the film goes on?
Because they were timed against a copy running at a different frame rate. The classic case is a film released at 23.976 frames a second and a European broadcast at 25: the PAL version runs about 4% faster and finishes several minutes sooner. Subtitles from one played against the other start close and grow steadily further apart. No amount of shifting fixes it, because the error grows with time rather than being the same throughout. That is what two-point correction is for.
What is the difference between a shift and a two-point resync?
A shift moves everything by the same amount, which fixes a file that starts in the wrong place and is otherwise right. A two-point resync stretches or compresses the timing as well, which fixes drift. This tool does both from the same two readings: set both points out by the same amount and you get a pure shift, set them out by different amounts and you get the stretch that corrects the drift.
Which two subtitles should I pick?
One near the very start and one near the very end. The drift is worked out by dividing the difference between your two corrections by the gap between them, so a small misreading over a short gap becomes a large error everywhere else. Points a minute apart turn a half-second misreading into about thirty seconds adrift by the end of a film; the same misreading across ninety minutes is under a second. The tool warns when your two readings are close together.
How do I find the time a subtitle should be at?
Play the video, pause at the moment the line is actually spoken, and read the player's timer. Most players show the position to the second, which is enough: a half-second error at each end is fine as long as the two points are far apart. VLC shows a more precise time in its playback statistics if you want it.
Why does it ask me to pick the subtitle instead of typing its current time?
Because typing a time you are reading off a screen is the error-prone half of the job and there is no need for it. The file already knows when each line currently appears, so the tool lists them and you pick the one you recognise. You only type the time it should be at, which is the part only you can know.
Are 23.976 and 29.97 really those numbers?
No, and it matters. They are 24000/1001 and 30000/1001, a legacy of how NTSC colour was fitted into an existing black-and-white signal. Using the rounded decimals instead introduces a drift of its own, about 1.8 seconds over two hours, which is enough to notice and is exactly the sort of error people come here to fix. This tool uses the exact fractions.
Will it change the text of my subtitles?
No. Only the times change. The text, the line breaks, and anything WebVTT carries alongside a cue, such as positioning and alignment settings, notes and styling blocks, are written back exactly as they arrived. The one deliberate change beyond timing is that SRT cue numbers are renumbered from one, because they are supposed to be consecutive.
Can it convert between SRT and VTT?
Yes, pick the format you want when you save. The two are the same idea written slightly differently: SRT uses a comma before the milliseconds and VTT uses a full stop, VTT has a header and allows cue settings, SRT numbers its cues. Getting the separator wrong is worth knowing about, because a player given a comma in a VTT file will often load every cue at zero rather than refusing the file.
Some subtitles ended up at the very beginning. What happened?
Your correction moved them to a negative time, which no subtitle format can express, so they were pinned to zero rather than dropped. They all appear at once at the start. It almost always means the shift is in the wrong direction: check whether your corrected times should be earlier or later than the current ones.
Is my file uploaded anywhere?
No. It is read by your browser and corrected in this tab. There is no request in this page that could send it anywhere, nothing is stored, and the page works with the network off. That matters more than it sounds for subtitles, which are often for material somebody would rather not announce they are watching.

More tools