Skip to content
uncompressed.io

Sidecar subtitle files

How to export an SRT file from a video.
Three routes, and the two rules that break hand-made files.

An SRT is not extracted from the picture; it is written alongside it, so the only way to export one is to have a caption track first and save it out as text. If the captions were built in your editor, export them from there; if they do not exist yet, transcribe the audio and correct the result, and only type one by hand for something short.

See the plans

Video hosting for filmmakers · 5 GB free · Paid plans from USD 9/month

Updated September 2026

What the file actually is

A text file
that happens to describe a video.

An SRT holds no video, no audio, no font, no color and no position on screen. It is a list of numbered cues, and each cue is a start time, an end time, and one or two lines of text. That is the whole format. Everything people expect it to carry, styling included, lives somewhere else.

The word for this is a sidecar: a separate file that travels next to the video instead of inside it. That separation is the point. The picture is never touched, so the same master can carry an English file, a French file and a corrected version of both without a single re-export. A player reads the file, matches the timecodes to its own clock, and draws the text on top.

It also explains the request you are probably answering. A broadcaster, a social team or a web developer asks for the SRT because they want to control what happens to the text: translate it, restyle it, index it, or turn it off. Hand them a video with the words burned into the frames and they can do none of that.

One consequence catches people out. Because the file is only text and timecodes, there is nothing to extract from a video that has no caption track. If the words were burned in at export they are pixels now, and the only honest route back to a file is to transcribe the audio again.

One cue, line by line

Four lines,
repeated until the film ends.

Open any SRT in a plain text editor and this is what you see, over and over. Knowing the four lines by sight is what lets you fix a broken file in thirty seconds instead of feeding it through a converter and hoping.

A single cue

12
00:00:04,120 --> 00:00:06,480
We shot the whole thing in one morning,
before the light came round the building.
(one blank line, then cue 13)
What it is
What goes wrong
Line 1the number
A counter. It starts at 1 andgoes up by one, in playback order
Duplicated or out of order aftersomeone deletes a cue by hand
Line 2the timecodes
Start and end, hours, minutes,seconds, then a comma and threedigits of milliseconds, with anarrow between them
A full stop instead of the comma.This is the single most commonfault in a hand-made file
Line 3and maybe 4the text
The words to show, as written.One line, or two when the sentenceneeds the room
A third and fourth line, whichcovers the picture and pushes thereading rate past what anyonecan follow
Line 5the blank line
An empty line, closing the cueand separating it from the next
Missing. Two cues then read asone block and the parser stops

The same shape repeats to the end of the file. There is no header, no footer and no declaration of language: an SRT does not say what language it is in, which is why the file name usually has to.

The two rules

The comma before the milliseconds,
and the blank line between cues.

Nearly every broken subtitle file fails on one of two things, and both are invisible until a player refuses the file with no explanation.

The first is the decimal separator. SRT writes a comma before the three digits of milliseconds. WebVTT, its web-native cousin, writes a full stop: the W3C specification is explicit that a cue timestamp takes a full stop character followed by three ASCII digits representing thousandths of a second. The two formats are close enough that people copy a timestamp from one into the other, and the file then looks correct to a human and wrong to a parser. If a file will not load, look at that character before you look at anything else.

The second is the blank line. Every cue ends with an empty line, and the parser uses it to know where one cue stops and the next begins. Delete a cue by selecting its text and the blank line usually goes with it, which welds two cues together into a block with two timecode lines. Some players skip the block, some skip the rest of the file. Neither tells you why.

A third habit is worth adopting even though nothing enforces it. Save as UTF-8, without a byte order mark, and keep the line endings consistent. Accented characters are where a file that works on your machine turns into question marks on somebody else’s.

Where the file comes from

Three routes,
ranked by how often they end well.

They are not equivalent, and the right one is decided by whether a caption track already exists and how long the piece is.

Use it when
What it costs
Where it fails
1. Export fromthe editor youcut in
The captions were built on thetimeline in Premiere Pro, Final CutPro or DaVinci Resolve
Almost nothing. The timing isalready locked to the pictureyou approved
Only when the captions were nevera caption track. A title layer withtext on it exports as picture,not as cues
2. Transcribe,then correct
No caption track exists and thefilm is longer than a couple ofminutes
Machine time, then the correctionpass, which is the part thatactually costs you
Proper nouns, figures andoverlapping speech. A trackshipped without being read is themost common way this routeembarrasses somebody
3. Type itby hand
A short piece, or one where everyline is scripted and alreadywritten down
Far more time than the runtime,because every cue needs a startand an end read off the timeline
The two rules above. Most brokenSRT files in the world weretyped by a person

Route two is the default for anything of real length, and the correction pass is not optional on paid work. Route three is defensible under about two minutes and stops being defensible above it.

Route one is first for a reason that has nothing to do with tooling: the timings came from the same timeline as the cut, so they cannot drift. Route two produces timings from the audio, which is usually close and occasionally a beat late. Route three produces whatever you were paying attention to at the time.

Whichever route you take, generate or export after picture lock. A two-second trim in the middle of the film moves every cue after it, and there is no repair for that which is faster than starting the track again.

The pass everyone skips

A file can be correct
and still be unreadable.

A valid SRT and a good SRT are different achievements. The first is a formatting question and a parser answers it. The second is about whether a person can read the line in the time it is on screen, and nothing checks it for you.

The working limit
Where the number comes from
Reading rate
Up to 20 characters per secondfor adult programs, 17 forchildren's programs
Netflix English Timed TextStyle Guide
Line length
Around 42 characters per line,lower in some languages
Netflix timed text requirements
Cue duration
A full 42-character line at 20characters a second needs a littleover two seconds on screen
Arithmetic from the two rowsabove

Netflix figures are quoted because they are published and specific, not because your client is Netflix. Treat them as the outer edge of comfortable rather than a target to hit.

Line length and reading rate are the same problem seen from two angles. A cue that runs to a third line is almost always a cue that should have been two cues, and splitting it fixes the length and the reading rate together. Break at a natural phrase boundary, not at the point where the box happened to fill.

Speaker changes are the other thing an SRT can express and most machine output does not. When two people speak inside one cue, the convention is a hyphen at the start of each line so the reader can see the exchange. It matters most in the places automatic transcription is weakest: interviews, overlapping dialogue, a question and its answer landing inside two seconds of each other. If the file is going to a broadcaster, this is a compliance item, not a preference.

Then there is timing feel. A cue that arrives slightly early is invisible; a cue that arrives slightly late makes the viewer feel they are being told what they just heard. When a cue sits off, pull it earlier rather than pushing it later. And end a cue on a hard cut rather than letting it run into the next scene, where the eye attaches the words to the wrong image.

SRT or VTT

Two formats do almost everything,
and which one the platform is asking for.

The practical split is simple. SRT is what editors, agencies and broadcast workflows take as an input. WebVTT is what a web player expects next to a video on a page. YouTube publishes its own list, which is the clearest picture of how a large platform actually sorts these files.

Extension
What YouTube says about it
SubRip
.srt
Listed as a basic format:only basic versions of thesefiles are supported
WebVTT
.vtt
Listed as an advanced format:positioning is supported,but styling is limited
TTML
.ttml
Listed as an advanced format:styling and positioningare supported
ScenaristClosed Caption
.scc
Listed among the broadcastformats for TV and film,and named as preferred

From YouTube's supported subtitle and caption files page, fetched 9 September 2026. The pattern generalises: the simplest format is accepted everywhere and carries no styling, and the richer formats buy positioning and style at the cost of tools that will open them.

That is also the reason to keep SRT as your default deliverable. It expresses less than the alternatives, and expressing less is what makes it portable: there is nothing in the file for a receiving system to misinterpret. When someone asks for a format you do not produce, sending the SRT and saying plainly that it is the file to convert from is a complete answer, because almost every subtitle tool takes SRT as an input.

The exception is the web page. If the film is going into an embed on a site, whoever builds the page wants the VTT, and sending it unasked saves a round trip.

On uncompressed.io

Generate, correct,
then the two files.

Captions here are generated by a speech-to-text model and you edit them yourself, which is route two above. Once the corrected track is saved, the caption panel offers the file in both formats.

Two buttons, two formats

The caption editor carries a .srt and a .vtt download beside the save button. The stored track is WebVTT; the .srt is converted on the way out, cue by cue, with the numbering restarted at 1 and the timecodes rewritten with the comma the format wants.

Saved captions only

The download serves what is stored, so it refuses until the track is finished and saved. That is deliberate: it means the file a client receives is the corrected one they were watching, not the raw first pass.

Who can take it

You always can, from your own films. Anyone else only from a video that is public or unlisted, meaning one they could already play. A vaulted master refuses the caption download outright, because a subtitle file is the complete dialogue.

Two details worth knowing before you send the file on. WebVTT can carry inline tags that SRT has no equivalent for, so they are stripped during the conversion rather than passed through as visible junk in the text. And the file arrives named after the film, so a delivery folder does not fill up with four files called captions.srt.

Generation is charged against a monthly minute allowance that grows with the plan, so the thing to check before starting a long film is the runtime against the allowance. Adding subtitles to a client video walks the whole loop in order, and captions for client work covers what to hand over at the end of a job.

Burned in, or a sidecar

Burning the words into the picture is a decision you cannot take back: it is a re-export, it fixes the styling forever, it cannot be turned off, translated or indexed, and it costs you a generation of encoding on a file you had already finished. A sidecar costs nothing and stays editable. Burn in only when the destination gives you no choice, which in practice means social feeds that play silently and ignore caption files. Everything else takes the SRT, and nothing is ever written into the picture on our side, because the player streams the exact bytes you uploaded with no re-encode at either end. Style and burn in your editor on export, then upload that export as its own film or as a new version of the existing one.

Questions

Frequently asked

Can I extract an SRT from a video that has no captions?

Not in the sense of pulling something out. If the words are burned into the picture, there is no text to recover: they are pixels, and the only route is to transcribe the audio again. If the words are a real caption track inside the container, a tool can demux it. Everything else is a fresh transcription.

What is the difference between an SRT and a VTT file?

Almost nothing, and then two things that matter. SRT numbers each cue and separates the seconds from the milliseconds with a comma. WebVTT starts the file with the word WEBVTT, makes the number optional, and the W3C spec requires a full stop before the three digits of thousandths. Send SRT to editors and broadcasters, and VTT to whoever is putting the video on a web page.

Why does my hand-made SRT file not load?

Two faults cause most of them. A timecode written with a full stop instead of a comma before the milliseconds, which is the WebVTT convention pasted into an SRT. And a missing blank line between cues, which makes a parser read two cues as one block and give up. Check those before anything else.

Does an SRT file carry fonts, colors or position?

No. It is plain text: a number, a start and end time, and the lines to show. Styling and on-screen position live in the player or in a richer format. If someone asks for exact placement, they are asking for something an SRT cannot express.

Which format should I send if the client did not say?

Send the SRT. It is what nearly every editor, agency and platform accepts as an input, and it is the file a converter starts from when someone needs a format you do not produce. Add the VTT when you know the video is going on a web page.

How long should a single cue stay on screen?

Long enough that the reading rate stays sane. Netflix caps subtitle lines at 42 characters and reading speed at 20 characters a second for adult programs, so a full line needs a bit over two seconds before it disappears. A cue that is right in every other way still fails if it flashes past.

Can I download the caption file from any video on uncompressed.io?

From your own, once the track is saved. A vaulted master refuses the caption download, because a subtitle file is a complete transcript of the dialogue and it is covered by the same protection as the frames. Someone who is not the owner can only download captions from a video that is public or unlisted, meaning one they could already watch.

Generate a track, correct it, download the file

Captions are generated by a speech-to-text model and you edit them yourself. When the track is saved, the same panel hands you the .srt and the .vtt. Generation is charged against a monthly minute allowance that grows with the plan.

Sources

  1. 1.YouTube Help: Supported subtitle and closed caption files (fetched 9 September 2026; SubRip .srt, WebVTT .vtt, TTML and the broadcast list)
  2. 2.YouTube Help: Add subtitles and captions (fetched 9 September 2026; upload a file, auto-sync, type manually, automatic captions)
  3. 3.W3C: WebVTT, The Web Video Text Tracks Format, Candidate Recommendation Draft, 20 May 2026 (fetched 9 September 2026; the WEBVTT file magic, the full stop before the thousandths, cue blocks separated by line terminators)
  4. 4.Netflix Partner Help Center: English Timed Text Style Guide (fetched 9 September 2026; 20 characters per second for adult programs, 17 for children's, 42 characters per line)
  5. 5.Netflix Partner Help Center: maximum characters per line in timed text assets (fetched 9 September 2026; around 42 characters per line, with lower limits for some languages)
  6. 6.uncompressed.io caption behaviour, verified in the application source on 9 September 2026 (app/api/captions/[videoId]/download/route.ts, app/dashboard/v/[id]/CaptionSection.tsx, lib/captions.ts)