Skip to content
DemoVexa

Guide · Production how-tos

How to add subtitles to a video: SRT, VTT and burned-in captions

There are two ways to put words on a video: a separate caption file the player shows, or text burned into the picture. Most product videos need both, for different places.

Short answer

To add subtitles to a video, write or generate a timed caption file (SRT or WebVTT), then either upload it alongside the video on platforms that accept caption files, such as YouTube or LinkedIn, or burn it into the picture with an editor or ffmpeg for feeds that don't. Keep lines under about 42 characters, two lines at most, and time each caption to the speech.

Knowing how to add subtitles to a video is mostly knowing where the video will play. YouTube takes a caption file and lets viewers switch it on and off. Some feeds won't take a file at all, so the words have to be part of the picture. Your own website can do either.

This guide covers the decision, the two file formats with short examples, upload steps for YouTube and LinkedIn, an ffmpeg command for burning captions in, and the style rules professional subtitlers follow. If your video is a product demo, captions aren't optional: plenty of people watch with the sound off, and the W3C's WCAG 2.2 makes captions for prerecorded video a Level A requirement.

Open vs closed captions, and captions vs subtitles

Closed captions live in a separate file or track. The viewer can turn them off, the player draws them, and search engines and platforms can read the text. Open captions (burned-in subtitles) are part of the video image. Everyone sees them, on every player, and nobody can turn them off or fix a typo without re-exporting.

Strictly, subtitles carry the dialogue, often translated, while captions also describe sounds that matter ("[notification chime]") for viewers who can't hear. In everyday use the words overlap, and for a narrated product demo the difference is small because there's rarely meaningful sound besides the voice.

SRT vs WebVTT vs burned-in subtitles

SRT (SubRip) is the plain, universal format. WebVTT is the web's native format: HTML video players read it directly, and it adds positioning and a little styling. Burned-in captions aren't a file format at all, but they're the third option you're really choosing between.

SRT, WebVTT and burned-in captions compared
What you care aboutSRT (.srt)WebVTT (.vtt)Burned-in (open captions)
Viewer can turn offYesYesNo
Timestamp format00:00:01,000 (comma)00:00:01.000 (period); hours optionalNot applicable
Styling and positionNone on YouTube (basic SRT only)Position, plus bold, italic and underline on YouTubeAnything your editor can draw
YouTubeAccepted; recommended for beginnersAcceptedWorks, but can't be switched off
LinkedInRequired format for caption uploads (desktop)Not accepted (SRT only)Works
Your own site (HTML video)Convert to VTT firstNative via the track elementWorks
Fixing a typo laterEdit text, re-uploadEdit text, re-uploadRe-export and re-upload the video

What an SRT file looks like

Save it as plain UTF-8 text. YouTube only supports basic SRT and ignores styling markup in it.

  • Line 1, a cue number: 1
  • Line 2, the timing: 00:00:01,000 --> 00:00:03,400
  • Line 3 (and optionally 4), the text: Invoices now send themselves.
  • A blank line, then the next cue: 2, 00:00:03,600 --> 00:00:06,200, and so on.

What a WebVTT file looks like

The `line:0` setting moves a cue to the top of the frame, which is handy when a caption would cover the button you're demonstrating. The format is defined in the W3C WebVTT specification.

  • Line 1: WEBVTT
  • A blank line.
  • The timing, with a period before the milliseconds and optional cue settings: 00:01.000 --> 00:03.400 line:0 position:50% align:center
  • The text on the next line, then a blank line before the next cue.

How to add subtitles to a video on YouTube and LinkedIn

YouTube

If you only have the script, YouTube's Auto-sync can line up a transcript with the audio. YouTube's help says it isn't recommended for videos over an hour or with poor audio, and the transcript must match the spoken language.

  1. Sign in to YouTube Studio and choose Subtitles in the left menu.
  2. Select the video.
  3. Click Add language and pick the language of your file.
  4. Under Subtitles, click Add, then Upload file.
  5. Choose With timing for an SRT or VTT file (or Without timing for a plain transcript), select Continue, pick the file and Save.

LinkedIn

LinkedIn's help page says caption files are added from the desktop experience and must be SRT. If you post from your phone, burn the captions in before uploading.

  1. On desktop, start a video post from the share box and select your video file.
  2. In the preview, click Edit in the top-right corner.
  3. Click Select Caption, attach the SRT file and confirm.
  4. Add your post text and publish. Captions appear once the video finishes processing.

Burn subtitles into a video with ffmpeg

For feeds that don't take a caption file, burn the text in. Any editor can do it, but ffmpeg does it in one line and gives the same result every time. It needs a build that includes libass; run `ffmpeg -filters` and look for `subtitles` in the list. If it's missing, install a build that includes libass.

With the video and SRT in the same folder, run: `ffmpeg -i demo.mp4 -vf "subtitles=demo.srt:force_style='FontName=Arial,FontSize=18,Outline=2,MarginV=24'" -c:v libx264 -crf 18 -c:a copy demo-captioned.mp4`

  • `subtitles=demo.srt` draws the file onto every frame. The video has to be re-encoded, which is why `-c:v libx264 -crf 18` is there; `-c:a copy` leaves the audio untouched.
  • `force_style` overrides the caption style with ASS style fields: font, size, outline thickness and bottom margin.
  • Sizes and margins are measured on ffmpeg's default 384×288 caption canvas, then scaled to your video, so FontSize 18 is about 67 pixels tall on a 1080p frame. Vertical video is taller, so the same number looks larger; drop the size for 9:16.
  • Run from the folder that holds the files. On Windows, a full path like C:\videos\demo.srt needs extra escaping inside the filter because of the colon.
  • Test on five seconds first by adding `-t 5` before the output name.

Caption style rules that keep subtitles readable

Broadcast subtitlers work to strict limits, and they're a good default for product videos too. Netflix's English timed text style guide allows 42 characters per line, two lines at most, and a reading speed of up to 20 characters per second for adult programs (17 for children's). Its general requirements set each caption's duration between 5/6 of a second and 7 seconds.

  • Keep a caption on one line when it fits. Break two-line captions after punctuation or before a conjunction or preposition, and keep a name or an article and its noun together.
  • Don't cover on-screen text. In a UI demo that means moving the caption off the field or menu being clicked, which is what WebVTT's line setting or a top position is for.
  • Match the voice word for word in tutorials. Paraphrasing is fine in a social cut, but viewers following steps compare what they hear with what they read.
  • Write product names exactly as they appear in the UI, even if the voice script respells them for pronunciation.
  • Use enough contrast: white text with a dark outline or a semi-transparent box survives a white app background.

Making subtitles from the script instead of from scratch

If you wrote a script, you already have the words. The work is timing, and that comes from the audio. Speech-to-text tools and YouTube's Auto-sync can align a script to a recording, and many editors can export the result as SRT or VTT. Check every product name, number and keyboard shortcut by hand; those are where automatic captions go wrong.

If your video is generated rather than recorded, the timing can come straight from the voiceover. DemoVexa, for example, exports SRT and WebVTT subtitles timed to the voiceover word by word, in each language you make the video in. For a single talking-head clip, an editor's auto-captions are usually quicker. More on captions and search in SRT and VTT subtitles for YouTube SEO, and on accessibility in accessible product demo videos.

Questions

Can I add subtitles to a video for free?

Yes. SRT and VTT files are plain text you can write in any text editor, YouTube and LinkedIn accept them at no cost, and ffmpeg can burn them into the picture for free. Paid tools mostly save time on transcription and timing.

How do I convert an SRT file to WebVTT?

Add a first line that says WEBVTT followed by a blank line, then change the comma before the milliseconds in every timestamp to a period (00:00:01,000 becomes 00:00:01.000). Cue numbers can stay; WebVTT treats them as cue identifiers.

Why are my subtitles out of sync?

If every caption is early or late by the same amount, the video was trimmed after the captions were made; shift all the timings by that offset. If the drift grows over time, the caption file was timed to a different frame rate or edit, so re-time it against the final export.

Make product videos from your code

DemoVexa reads your app's code, writes the script, adds a voiceover and animates your real screens in 16:9, 9:16 and 1:1. Try it on your own product: 14 days free, no card.

Sources

DemoVexa publishes this guide and makes a product video app, so we have a stake in the topic. Facts about other products and platforms come from the sources listed, on the dates shown, and can change. Corrections are welcome through our contact page.