Subtitle tools
Converting, retiming, joining, cutting and checking caption files — the work that comes up between finishing a translation and delivering it.
Nothing you open is uploaded
Subtitle Converter
SRT and VTT, both directions
open$termiva subs shift film.srt --by -2.5sSubtitle Timing Shifter
Move every cue, or fix the drift
open$termiva subs cps film.srt --limit 17Subtitle Reading Speed Checker
Find the cues nobody can read
open$termiva subs convert film.ass --to srtASS to SRT Converter
Aegisub out, SubRip in
open$termiva subs convert captions.sbv --to srtSBV to SRT Converter
The format YouTube hands back
open$termiva subs merge en.srt ar.srtMerge Subtitle Files
Two languages, or two halves
open$termiva subs split film.srt --at 01:02:30Split a Subtitle File
Cut at a time, rebase the rest
open$termiva subs strip film.srt --tags --sdhRemove Subtitle Formatting
Take the layers off the words
open$termiva subs tidy film.srt --gap 100msFix Overlapping Subtitles
Ends move, starts never do
open$termiva subs text film.srt --flowSubtitle to Text
The words, without the clock
open$termiva subs lines film.srt --max 42Subtitle Line Length Checker
Too wide, or one line too many
openWhy this section exists
A subtitle file is the complete script of a video. Usually one that has not gone out yet — an episode under embargo, a course being built, a client’s film before its festival date. It is a plain text file containing every word anyone says.
Every subtitle converter on the first page of results asks you to upload it. That is a stranger’s server holding your unreleased dialogue for as long as they keep it, in exchange for an operation that is a search and replace on a comma.
These read the file in your browser. You can check that the way you can check anything here: open the Network tab and use a tool, or go offline after the page loads and use it anyway.
Which tool do you need?
The player shows nothing at all
Almost always a format problem rather than a broken file. The converter handles the difference that causes it: SubRip separates seconds from milliseconds with a comma and WebVTT with a full stop, so a renamed file loads without complaint and displays nothing. It also strips the byte-order mark that quietly costs you the first cue, and drops the WebVTT cue settings that arrive on screen as dialogue if a converter keeps them.
If the file came from Aegisub or a fansub release, it is Advanced SubStation and the ASS converter is the one to use — its timestamps are in centiseconds, and a converter that reads them as milliseconds puts the whole track half a second early. If it came out of YouTube it is probably SBV, which has its own page for the same reason: the comma sits between the two timestamps rather than inside them.
The words arrive at the wrong moment
Check the sync at the start of the film and again at the end before you fix anything. Same error at both means a constant offset — a different cut, a longer title sequence — and the shifter moves every cue by the amount you give it.
A bigger error at the end means drift, which is a frame-rate mismatch and cannot be fixed by any single number. The same tool rescales for it: 25 fps material played at 23.976 needs every timestamp multiplied, not shifted.
Cues that collide with each other are a different fault again, and one the player makes visible by flickering between them. The overlap fixer separates them, holds the cues too brief to read, and cuts short the ones still on screen two scenes later — moving only the ends, never a start.
One file has to become two, or two have to become one
Splitting cuts a track at a point on the clock and retimes the second half to start from zero, which is what a part-two video does. Merging does the reverse, and also the other thing people mean by it: stacking two languages so both appear at once.
Before you deliver
The reading speed checker measures characters per second for every cue and lists the ones nobody can keep up with. It is the check that finds faults reading through does not, because the offending cue usually looks unremarkable — ordinary length, ordinary duration, impossible together.
The line length checker is the other half of that question, and it catches the case reading speed cannot: a cue with three short lines is fast enough to read and still wrong, because the third line climbs over the picture.
Removing the formatting is for a player that prints the tags instead of honouring them — and, with the accessibility switches on, for producing a plain script to translate from. Subtitle to text goes further and drops the timings entirely, joining the fragments back into paragraphs.
For work on the text itself rather than the timings, the text section has the counters, the case converters and the find-and-replace with regular expressions.