Settings

1. The subtitle file

SubRip (.srt), WebVTT (.vtt), and the dialogue lines of SubStation Alpha (.ass, .ssa). The file is read in this tab and never sent anywhere.

Drop a subtitle file here, or open one Nothing leaves the machine. You can pull the network cable out first.

No file open yet.

2. The video or audio, if you have it

Timing is a thing you hear, not a thing you calculate. Open the media beside the subtitles and check the cues by eye and ear. The file is handed to the player as a local object URL; it is not read, copied or uploaded.

3. The cues

Nothing open.

Open a file and the cues appear here. Every field is editable where it sits.

4. Timing

Every one of these can be taken back with Undo.

A rate change is a multiplication, not a shift: the further into the file a cue is, the further it moves.

5. Find and replace

Plain text, not a regular expression.

6. What might be wrong

The counts are live. Go to walks through the cues one at a time and selects each one.

7. Save it

Files are written in this tab and handed to the browser's own download.

What this is, and what it is not

It gives the bytes back. Where you have not touched a cue, its number line, its timing line and its text are written out exactly as they were read, and the byte order mark, the line endings, the decimal marks and the blank lines between cues go back the way they came. Open a file and save it again without editing and you get the same bytes. That matters when you are fixing one cue in a delivery someone else will diff.

SubStation Alpha is read for its dialogue only. The [Events] Format line is parsed to find out which column is which, because files really do reorder them, and the dialogue lines are read through it. Styles, positions, fonts, karaoke timing and the override tags in braces are not modelled and are thrown away. That is why there is no .ass output: saving one back would silently destroy work. Convert to SubRip or WebVTT knowing what you are losing.

A rate change is a multiplication. Film shot at 23.976 and played at 25 does not drift by a constant; it drifts more the further into the reel you are. The preset fills in the exact ratio, 24000/1001 divided by 25, and shows what one hour becomes. A shift is the other tool, for when the whole file is simply late.

The readability limits are conventions, not law. Forty-two characters a line, two lines, seven seconds, twenty-one characters a second and a two-frame gap are the numbers most broadcast and streaming style guides land near. Yours may differ, so all six are fields you can change, and the counts follow. Nothing is enforced; the page only counts and points.

The media file is never read by this page. When you open a video or audio file it is handed to the browser's own player as an object URL. The script never touches its bytes, and nothing is uploaded. Chromium-based browsers will refuse to decode most H.264 and AAC, which is a licensing decision by the browser and not something a web page can work around; Firefox usually manages, and a WebM copy always will.

Encodings it cannot guess. UTF-8 is assumed, and UTF-8, UTF-16LE and UTF-16BE byte order marks are honoured. An old file saved in a Windows code page will come out with the accented characters wrong. Open it in a text editor, save it as UTF-8, and start again. A UTF-16 file is read but written back as UTF-8.

The work is kept on this device, not on a server. The open cue list is written into this browser's local storage so a reload does not lose it, and only if it fits. Start over clears it. There is no account and nothing to sync, because there is no server holding anything.

Questions people ask

Is the subtitle file uploaded?

No. It is read by this tab with the browser's file reader, parsed here, and written back here. The page works with the network off, which is the simplest way to check that claim.

My subtitles are exactly two seconds late. What do I do?

Put -2 in the shift box, leave the scope on all of them, and press Shift. If they are late from a certain point only, select the cue where the drift starts and change the scope to that cue and everything after it.

The subtitles drift further out as the film goes on.

That is a frame rate mismatch rather than an offset. Pick the pair in the frame rate change list, which fills in the exact ratio, and press Stretch or compress. 23.976 to 25 is the common one.

Can it open a .sub or .idx file?

No. Those are bitmap subtitles: pictures of text, with no text in them. Turning them back into text needs optical character recognition, which is a different job from this one and not one this page does.

Why can the video not play in Chrome?

Chromium-based browsers ship without the H.264 and AAC decoders in many builds, so an ordinary MP4 gives an error. The file is fine. Try Firefox, or make a WebM copy to check the timing against.

Does it keep my cue numbering?

Yes, as long as you have not inserted, split, merged or deleted a cue. After a structural change the numbering has to be rebuilt, so it is renumbered from one.

How far back does undo go?

Eighty steps. Typing inside one cue counts as one step, not one step per character, so eighty is a long way back.

Related tools