SubShiftly
00:00:04,120

Subtitles out of sync? Shift them back into place.

subshiftly.com

SubShiftly opens .srt, .vtt, .sbv and plain-text subtitles, fixes the timing — a flat offset, a two-anchor resync, or a frame-rate change — cleans up the lines and writes the file back. The subtitle file and the video you check it against both stay on your device.

00:00:00,000

Open a subtitle file

Drop an .srt, .vtt, .sbv or .txt file here, pick one from your disk, or paste the text. It is read inside this tab and never uploaded.

.srt .vtt .sbv .txt

Subtitles and video are read by this page with the browser's File API and stay in this tab. No upload, no account, no analytics — you can go offline and keep working.

Keyboard
Space
Play / pause the video
↑ / ↓
Select the previous / next cue
Ctrl/⌘ + Z
Undo
Ctrl/⌘ + Shift + Z
Redo
Ctrl/⌘ + V
Paste subtitles into the empty tool

What it does

00:00:00,000

Nothing is uploaded

The subtitle file is read by the page with the browser's File API, and the video you check it against plays from a local object URL. There is no server to send them to, no account, and no analytics script.

00:00:12,480

Three fixes for three faults

A flat offset for subtitles that start late, a two-anchor resync for files that drift apart over an hour, and frame-rate conversion for the 25 versus 23.976 fps trap. Between them they cover almost every out-of-sync file.

00:01:07,920

Reads the awkward files

Windows-1251 Cyrillic, a UTF-8 BOM, missing cue numbers, blocks glued together without blank lines, YouTube SBV, or a transcript with no timecodes at all — each one is parsed, and anything unusual is listed above the table.

00:02:44,160

Checked against the picture

Open your video file and the cues are drawn over it by this page rather than by the player, so an edit in the table shows up on the very next frame. The timeline highlights whichever cue is on screen.

About SubShiftly

A subtitle file is a list of cues: a number, a start and end time, and one or two lines of text. Nothing in it is tied to the video, which is why a file that was timed for one release lands two seconds late on another, or slowly walks away from the dialogue over ninety minutes. SubShiftly is a browser editor for exactly that list. It parses SubRip (.srt), WebVTT (.vtt), YouTube SBV and plain transcripts, keeps WebVTT cue settings and identifiers intact, and shows every cue on a zoomable timeline and in an editable table where you can type a new timecode or rewrite a line.

The operations are the ones subtitle work actually needs: shift everything (or only what comes after the playhead) by an offset, pin two cues to their true times and let the rest be recalculated, convert between 23.976, 24, 25 and 29.97 fps, merge a second file, search and replace with regular expressions, and clean up tags, hearing-impaired captions, overlaps and over-long lines against the 42-characters-per-line rule. Export writes SRT, WebVTT or a plain transcript with the line endings and the encoding you choose, including Windows-1251 for players that still expect it. All of it happens in this tab: your subtitles, and the video you check them against, never leave your device.

Guides

How subtitle formats, timing and readability actually work — written while building the editor.

Read more guides

Frequently asked questions

Is my subtitle file uploaded anywhere?+

No. The file is read inside your browser with the File API, edited in memory and written back with a download — there is no server to send it to. The video you open for checking is the same: it plays from a local object URL, is never read into anything but the player, and never leaves the machine. Once the tool has loaded you can disconnect from the network and keep working.

Which subtitle formats can it open and save?+

It opens SubRip (.srt), WebVTT (.vtt), YouTube SBV (.sbv) and plain text, detecting the format from the content rather than the extension — so a .txt that is really an SRT opens correctly. It saves SubRip, WebVTT, or a plain transcript with one cue per line. WebVTT cue settings such as line:90% align:center and named cue identifiers survive a round trip; ASS/SSA styling is not supported, and the cleanup step can strip the override tags it leaves behind.

My Russian subtitles show up as garbled characters. Can that be fixed?+

Usually, yes. Subtitle files carry no declaration of their encoding, so the tool tries strict UTF-8 first and falls back to Windows-1251 when that fails — which covers most Cyrillic files written by older software. If the damage was already baked into the file (someone saved text that had been read with the wrong code page), the tool detects the pattern and repairs it on load, and tells you it did. When you export, pick Windows-1251 if the file is going to a hardware player that expects it.

Which frame rates does the converter handle?+

23.976 (24000/1001), 24, 25, 29.97 (30000/1001), 30, 50, 59.94 and 60, in any combination. The maths is a simple ratio: converting from 25 to 23.976 stretches every timecode by 1.042708, which is why a file that matched a PAL transfer runs about two and a half minutes long by the end of a feature on the film-speed copy. The panel shows the exact factor and the drift it produces per hour before you apply it.

Which video files can I open in the preview?+

Whatever your browser can play: MP4 with H.264 and AAC works everywhere, WebM works in Chrome, Edge and Firefox, and Safari adds HEVC. MKV and AVI containers usually fail even when the video inside them would play, because browsers do not demux those formats — the preview will tell you if the file cannot be decoded. Remuxing an MKV to MP4 with a desktop tool is enough to make it work; the subtitles themselves are unaffected either way.

Can it burn the subtitles into the video?+

No, and it will not pretend to. Burning subtitles in means re-encoding every frame of the video, which needs a real encoder and a lot of CPU time — that is a job for ffmpeg or a desktop editor. SubShiftly produces a corrected subtitle file that any player can load alongside the video, which is what you want in almost every case anyway, since a separate file can still be edited, translated or turned off.

How big a file can it handle?+

Subtitle files are small — a feature film is typically 60–120 KB and 1,000–1,800 cues — and everything from parsing to export is instant at that size. The upload limit is 25 MB, which is far beyond any real subtitle file and mostly there to catch a video dropped by mistake. Parsing runs in chunks with a progress bar, so even a huge transcript never freezes the page, and the cue table is paginated so the browser is never asked to render thousands of rows at once.

Are there keyboard shortcuts?+

Space plays and pauses the video, the up and down arrows move the selection through the cues, Ctrl/Cmd + Z undoes and Ctrl/Cmd + Shift + Z redoes — the history keeps the last sixty operations. With nothing loaded you can paste a subtitle file straight into the page with Ctrl/Cmd + V. Inside a timecode field, Enter commits the value and Escape puts the old one back.

What are the numbers next to each cue in the table?+

Duration in seconds, reading speed in characters per second, and the number of lines with the length of the longest one. They turn red when a cue breaks a common broadcast rule: shorter than one second, longer than seven, faster than 20 characters per second, more than two lines, or a line over 42 characters. Filtering the table to "Issues" shows only those cues, and the cleanup panel can fix most of them in one pass.