A transcript is just text. Subtitles are text plus timing, in a format the player understands. The gap between the two is smaller than it looks, but there are three places people lose an afternoon.
Step 1: Get a transcript with timestamps
This is the part that has to be right from the start. A plain-text transcript cannot be turned into subtitles without redoing the timing by hand, which is slower than transcribing again.
Any tool offering SRT or VTT download is producing timestamps. If it only offers TXT, it either did not keep them or never had them.
Our audio to text page exports TXT, SRT and VTT from the same run — the difference between SRT and VTT is small and mostly about which player you are targeting.
Step 2: Pick the format the destination wants
| Destination | Wants | Notes |
|---|---|---|
| YouTube | SRT or VTT | Both work; SRT is the safer default |
| Vimeo | SRT or VTT | — |
| Instagram / TikTok | Neither | These burn captions in; no sidecar upload |
| Premiere / Final Cut / Resolve | SRT | Imports as a caption track you can restyle |
HTML5 <video> | VTT only | <track src="captions.vtt"> — SRT is not supported in browsers |
| SRT | — |
The one that catches people out is the browser: HTML5 video does not accept SRT. If your captions are not appearing on your own site, this is almost always why.
Step 3: Fix drift before you upload
Automatic timestamps are usually close and occasionally wrong in one specific way: they drift when the audio has long gaps, and they run long on segments where the model kept listening past the end of a sentence.
What to look for:
- A subtitle that stays on screen for 8 seconds. Almost always a segment that swallowed a pause. Split it.
- Text appearing before the speech. Usually harmless — a few hundred milliseconds early reads as natural.
- Everything after a certain point being late. That is real drift, and it usually means the source audio was trimmed after transcription. Retranscribe rather than nudge every line.
Both SRT and VTT are plain text with the timings visible, so a text editor is a perfectly good repair tool:
2
00:00:04,120 --> 00:00:12,500
this one line has been on screen for eight seconds
Split it at a natural pause, halve the range, done.
Line length is the part people skip
Automatic subtitles are often technically correct and unreadable, because a whole sentence goes on one line.
The conventions that make captions comfortable:
- Under about 42 characters per line, two lines maximum.
- At least one second on screen, and no more than about six.
- Break at grammatical boundaries — after a clause, not between an adjective and its noun.
Most transcription tools do not do this for you, because it requires judgement about where meaning breaks. It is the main manual pass between a raw export and something that feels professional.
Burned-in vs sidecar
Sidecar is a separate file (SRT/VTT) that the player renders. Burned-in means the text is drawn into the video pixels.
| Sidecar | Burned-in | |
|---|---|---|
| Viewer can turn it off | Yes | No |
| Searchable by the platform | Yes | No |
| Translatable later | Yes | No — requires re-render |
| Shows in feeds with autoplay muted | Only if the platform renders it | Always |
For social feeds, burned-in wins on reach and that is why every short-form platform does it. For anything you might want to translate, caption in another language, or have indexed, burn-in is a one-way door — keep the SRT even if you also burn in.
Common questions
Can I edit the transcript before generating subtitles? Yes, and you should — fix names and terms first. Editing the text after timing means keeping timestamps aligned by hand.
Why are my captions off by exactly two seconds? Something was trimmed from the front of the audio after transcription. Every timestamp needs the same offset — most subtitle editors have a global shift.
Do subtitles help video SEO? Uploaded sidecar files are readable by the platform, so yes on YouTube. Burned-in captions are invisible to it.
What about auto-translating them? Translate the SRT text while keeping the timings. The result needs a native check — timing survives translation, but line lengths do not, and languages that expand will overflow.