Subtitle Editor (Create & Edit SRT/VTT Against Video)

Build or fix subtitles against real video playback. A cue table with tap-to-set timings, SRT and VTT import and export, all inside your browser.

🌐 Español

Cues can be created, imported and exported without a video — upload one only if you want to tap-to-set in/out times against real playback.

#StartEndTextActions

🔒 Private by design: everything runs locally in your browser and never uploaded to any server.

Subtitling needs the video, and that is the whole problem

You can write subtitle text in any editor. What you cannot do in a text editor is decide when a line should appear, because that judgement only exists in relation to the picture and the sound. Every timestamp is an answer to a question you can only ask while watching.

Which is why subtitle work usually means either desktop software with a learning curve, or a web service that wants your footage uploaded first. This page takes a third route: the video plays locally in the page next to a cue table, using a reference to the file on your own disk, and the timings come from wherever you paused it. No installation and no upload.

Building a subtitle file

  1. Choose a video file. It loads into the player immediately and never leaves your device.
  2. Optionally import an existing .srt or .vtt to start from, or begin with an empty table.
  3. Press + Add cue. Each new cue starts where the latest existing one ended and runs for two seconds.
  4. Scrub the video to where the line should begin and use the set button on that row’s start field, then do the same for the end.
  5. Type the line into the cue’s text box. A newline in the box becomes a real line break in the subtitle.
  6. Set a File name, choose SRT or VTT, and export.

Why new cues appear where they do

A freshly added cue does not start at zero and it does not start at the end of the last row in the table. It starts at the latest end time of any cue in the list, and runs for two seconds.

That distinction matters once you have edited for a while. Table order and chronological order drift apart the moment you insert a line you forgot, and anchoring to the latest end time means a new cue lands after everything that already exists rather than colliding with it. Two seconds is a working default rather than a rule, since it is close to a comfortable reading duration for a short line and you are going to adjust the end anyway.

Overlaps are flagged and permitted

The table marks any cue whose time range intersects another. It does not prevent you from exporting one.

This is a deliberate split, because overlapping cues are both a common mistake and a legitimate technique. Two speakers talking over each other, or a translated sign held on screen while dialogue continues, are properly expressed as simultaneous cues and both subtitle formats support them. Blocking them would make the editor unable to produce correct files for those cases.

What the badge protects against is the far more common version, where an end time was set a few seconds too late and the next line now starts before the previous one has cleared. Touching boundaries, where one cue ends at exactly the moment the next begins, are not flagged, because that is the normal shape of consecutive dialogue.

What is refused, and why those two things

An export is stopped only for problems that would produce a file that is broken rather than merely imperfect.

An empty list has nothing to write. A cue whose end is at or before its start is worse than useless: it occupies a slot in the file and never appears on screen, so the failure shows up as a missing line during review rather than as an error at the point of creation. Both refusals name the problem on screen, and the second one counts the affected cues.

Everything else is left to your judgement. Very short cues, very long ones, empty text, and unusual reading speeds are all allowed, because the right answer to any of them depends on the material.

Where this sits among the other subtitle tools

If all you need is a format change with no editing, SRT to VTT does the conversion directly, and this editor reuses the same parsing and writing code rather than a second implementation, so both produce identical output for identical cues. If the timings are right but uniformly early or late, Shift Subtitles offsets the whole file in one step, which is far quicker than touching every cue here.

To recover a subtitle track already embedded in a video, Extract Subtitles pulls it out to a file you can then import here. To burn a finished file into the picture, Add Subtitles to Video is the last step. The rest are on the video hub.

See it in action

Screenshot of the Subtitle Editor (Create & Edit SRT/VTT Against Video) tool with two optional pickers - a video to play back against and an existing .srt or .vtt to import - above an empty cue list
Subtitle Editor (Create & Edit SRT/VTT Against Video) mid-process: two optional pickers - a video to play back against and an existing .srt or .vtt to import - above an empty cue list.
Screenshot of the Subtitle Editor (Create & Edit SRT/VTT Against Video) result screen showing the imported subtitles opened as an editable cue list, each line with its own start time, end time and text
The finished result: the imported subtitles opened as an editable cue list, each line with its own start time, end time and text. The download link is a local blob URL — the file never leaves your device.

Frequently asked questions

Does my video get uploaded to edit subtitles against it?

No. The video is handed to the page's own player as a local object reference, which is a pointer into the file already sitting on your disk, not a copy sent anywhere. The player reads from that. Nothing about the video, and nothing about the subtitle text you type, is transmitted, and closing the tab releases the reference. That is worth knowing because a video you are subtitling is often unreleased footage.

What does tap-to-set actually do?

It takes the player's current position and writes it into the start or end field of that row. Working that way is much faster than typing timestamps, because you scrub to the moment a line begins, tap set on the start, let it play to the end of the line and tap set on the end. The value it writes comes from the player itself, so it is exactly as precise as where you paused.

Can I type timestamps by hand instead?

Yes, and the field is parsed when you leave it rather than as you type, so a half typed value is never treated as a mistake. If what you typed cannot be read as a timestamp the field is marked and the cue keeps its previous time rather than jumping to zero. Times are shown with a dot before the milliseconds, which is the web convention, and both a dot and a comma are accepted when you type one in.

What happens to cues I dragged into a different order in the table?

The export ignores the table order and always writes cues sorted by start time. Moving rows up and down is an editing convenience so you can group related lines while you work, but real players and other subtitle tools assume ascending order, so the file that comes out is always in that order regardless of how the table looked.

The tool marked two of my cues as overlapping. Is that an error?

No, and it will not stop you exporting. Overlapping cues are legal in both formats and are genuinely used, for two people talking at once or for a sign translated on screen while dialogue continues underneath. The badge exists because an overlap is much more often a mistake than a choice, so it is worth seeing. It is a flag, not a block.

What will stop an export?

Two things, and both say so on screen. An empty cue list, which is refused with a message asking you to add at least one cue. And any cue whose end time is at or before its start, which is refused with a count of how many cues are affected so you can find them. A cue that never lasts any time is invisible in a player, so writing one into a file would be a silent failure rather than a helpful one.

Can I import an existing file and edit it?

Yes, both SRT and VTT. The format is worked out from the content of the file rather than from its extension, so a valid file that was renamed or saved with the wrong suffix still imports. The export format selector is then set to match the extension you imported, though you can change it, which is how you convert between the two while also fixing the timings.

Related tools