---
title: "SRT vs VTT: Which Caption File to Use"
description: "SRT vs VTT compared: file structure, timestamps, styling, which platforms accept each (YouTube, Vimeo, Facebook, LinkedIn, X) and how to convert."
url: https://exemplary.ai/blog/srt-vs-vtt
published: 2025-11-11
updated: 2026-09-30
author: "Sarath Chandran"
publisher: "Exemplary AI (https://exemplary.ai)"
---

# SRT vs VTT: Which Caption File to Use

SRT and VTT are both plain-text caption files: numbered or named blocks of text, each with a start and end time. The difference is what they can carry and who accepts them. **SRT** (SubRip) is the simplest format and the one most social platforms ask for: Facebook, LinkedIn and X all describe caption uploads as .srt files. **VTT** (WebVTT) is the W3C web standard. It adds a header, comments, positioning and CSS styling, and it's the format web browsers use for the HTML `track` element and Apple requires for subtitles in HLS streams. YouTube and Vimeo take both. If you're uploading to a social platform, use SRT. If you're captioning a video on your own website or in a web player, use VTT.

## SRT vs VTT at a glance

| | SRT (SubRip) | VTT (WebVTT) |
|---|---|---|
| File starts with | The first cue number (`1`) | The word `WEBVTT` (required) |
| Timestamp format | `00:00:01,000` (comma before milliseconds, hours always written) | `00:00:01.000` or `00:01.000` (full stop, hours optional) |
| Cue numbers | Numbered in order, starting at 1 | Optional cue identifiers (any label) |
| Positioning | None in the format | Cue settings: `line`, `position`, `size`, `align`, `vertical`, `region` |
| Styling | No formal spec; simple italic tags work in some players, not others | CSS via `::cue` and `STYLE` blocks, plus bold, italic and underline tags |
| Comments | No | `NOTE` blocks |
| Specification | No formal standard | W3C specification |
| Best for | Uploading captions to social platforms and editors | Web players, HTML5 video and streaming |

Sources: [W3C WebVTT specification](https://www.w3.org/TR/webvtt1/), [MDN: WebVTT format](https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API/Web_Video_Text_Tracks_Format), [The National Archives (PRONOM): SubRip](https://www.nationalarchives.gov.uk/PRONOM/fmt/1218).

## What an SRT file looks like

An SRT file is a list of blocks. Each block has four parts: a sequence number, the start and end time, one or more lines of text, and a blank line that ends the block ([Matroska](https://www.matroska.org/technical/subtitles.html)).

```
1
00:00:01,000 --> 00:00:04,000
Welcome back to the show.

2
00:00:04,500 --> 00:00:07,250
Today: SRT vs VTT.
```

The rules are strict in a few places:

- **Numbers start at 1** and go up in order.
- **Timestamps use a comma** before the milliseconds, in the form `hours:minutes:seconds,milliseconds`, with two digits for each unit and three for the fraction, for example `00:00:00,000` ([PRONOM](https://www.nationalarchives.gov.uk/PRONOM/fmt/1218)).
- **A blank line** separates one caption from the next.

That's the whole format. SubRip has no formal specification from a standards body, which is both its strength (almost nothing can go wrong) and its limit (there's no agreed way to position or style text). YouTube, for example, says it supports only basic SRT files and that "no style info (markup) is recognized" ([YouTube Help](https://support.google.com/youtube/answer/2734698?hl=en)).

## What a VTT file looks like

A WebVTT file must begin with the string `WEBVTT` and must be encoded as UTF-8 ([W3C](https://www.w3.org/TR/webvtt1/)). The same captions as above:

```
WEBVTT

NOTE Episode 12, English captions

1
00:00:01.000 --> 00:00:04.000
Welcome back to the show.

intro-2
00:00:04.500 --> 00:00:07.250 line:0 align:start
Today: SRT vs VTT.
```

What's different:

- **The `WEBVTT` header** on the first line. Without it, the file isn't valid WebVTT.
- **A full stop** before the milliseconds, and hours are optional, so `00:04.500` is valid ([MDN](https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API/Web_Video_Text_Tracks_Format)).
- **Cue identifiers are optional** and can be any label (`1`, `intro-2`), not just a number.
- **`NOTE` blocks** hold comments that viewers never see.
- **Cue settings** after the timestamp control placement. The W3C spec defines six: `vertical`, `line`, `position`, `size`, `align` and `region` ([W3C](https://www.w3.org/TR/webvtt1/)). In the example, `line:0 align:start` moves the caption to the top left, which is useful when a caption would cover on-screen text.
- **Styling** through CSS: a page can target cues with the `::cue` pseudo-element, and a file can carry its own `STYLE` block.

Not every player honours all of this. YouTube accepts WebVTT and supports its positioning, but limits styling to bold, italic and underline tags ([YouTube Help](https://support.google.com/youtube/answer/2734698?hl=en)).

## Which platforms accept which format

Checked against each platform's own help pages:

| Platform or tool | SRT | VTT | Notes |
|---|---|---|---|
| YouTube | Yes | Yes | Suggests basic formats such as SRT if you're new to caption files ([YouTube Help](https://support.google.com/youtube/answer/2734698?hl=en)) |
| Vimeo | Yes | Yes | "We recommend using WebVTT." Files must be UTF-8 ([Vimeo Help](https://help.vimeo.com/hc/en-us/articles/21956884955537-How-to-add-captions-or-subtitles-to-your-video)) |
| Facebook | Yes | Not listed | Caption uploads use the SubRip (.srt) format ([Facebook Help](https://www.facebook.com/help/261764017354370)) |
| LinkedIn | Yes | Not listed | An SRT file attached when you post, on desktop only ([LinkedIn Help](https://www.linkedin.com/help/linkedin/answer/93997)) |
| X | Yes | Not listed | "Upload caption file (.srt)" below the video ([X Help](https://help.x.com/en/using-x/upload-caption-srt-file)) |
| HTML5 `track` element (your own website) | No | Yes | Tracks are WebVTT (.vtt) files ([MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/track)) |
| HLS streaming on Apple devices | No | Yes | "Subtitles MUST be WebVTT" or IMSC1 in fMP4 ([Apple](https://developer.apple.com/documentation/http-live-streaming/hls-authoring-specification-for-apple-devices)) |
| Final Cut Pro | Yes | Not listed | Apple describes SRT as "a subtitle format supported by Facebook, YouTube, and Vimeo" ([Apple Support](https://support.apple.com/guide/final-cut-pro/aside/ver5fb39ec7b/12.3/mac/15.6)) |
| DaVinci Resolve | Yes | Not listed | Imports TTML, SRT, XML and embedded MXF/IMF subtitles ([Blackmagic Design](https://www.blackmagicdesign.com/products/davinciresolve/edit)) |

"Not listed" means the help page names only SRT. It doesn't always mean a VTT upload will fail, but SRT is the safe choice there.

## Which one should you use?

- **Uploading to Facebook, LinkedIn or X:** SRT. It's the only format their help pages mention.
- **Uploading to YouTube:** either. SRT is the simplest. Use VTT if you want a caption moved away from on-screen text, since YouTube supports VTT positioning.
- **Uploading to Vimeo:** VTT, which Vimeo recommends.
- **A video on your own site** (an HTML5 `video` element, most web players, an LMS that plays video in the browser): VTT, because the `track` element expects it.
- **Streaming with HLS to Apple devices:** VTT (or IMSC1).
- **Handing captions to a video editor:** SRT, unless they ask for something else. Final Cut Pro and DaVinci Resolve both import it.
- **TikTok, Reels and Shorts clips:** if the app doesn't take a caption file, burn the captions into the video instead. See [how to burn subtitles into a video](https://exemplary.ai/blog/burn-subtitles-into-video) and [open vs closed captions](https://exemplary.ai/blog/open-vs-closed-captions) for when to do which.

If you're not sure, keep both. They hold the same text and timings, so producing both costs nothing.

## How to convert SRT to VTT (and back)

### By hand, in a text editor

SRT to VTT:

1. Add `WEBVTT` as the first line, followed by a blank line.
2. Change the comma in every timestamp to a full stop (`00:00:01,000` becomes `00:00:01.000`). Change only the timestamp lines, not commas in the caption text.
3. Leave the numbers. In WebVTT they're read as cue identifiers, which are allowed.
4. Save as UTF-8 with the `.vtt` extension.

VTT to SRT is the same in reverse, with extra clean-up: delete the `WEBVTT` header and any `NOTE` or `STYLE` blocks, remove cue settings after the timestamps, add hours to any `mm:ss.ttt` timestamp, and make sure every block starts with a sequence number. Positioning and styling are lost, because SRT has nowhere to put them.

### With FFmpeg

The free command-line tool [FFmpeg](https://ffmpeg.org/) converts in one line:

```
ffmpeg -i captions.srt captions.vtt
ffmpeg -i captions.vtt captions.srt
```

We ran both on a sample file. FFmpeg writes a valid `WEBVTT` header, switches commas to full stops and back, and renumbers the SRT on the way out. Two things to know: it drops the SRT sequence numbers from the VTT (they're optional there), and it shortens timestamps under an hour to `mm:ss.ttt`, which is valid WebVTT.

### Export both from your subtitle tool

If your caption tool exports both formats, skip the conversion and download the one you need. In [Exemplary AI](https://exemplary.ai/subtitle) (our product), you generate subtitles from a video or audio file and download them as SRT, VTT or TXT. Transcription covers 99 languages, and you can [translate the subtitles](https://exemplary.ai/subtitle-translator) into 117 before downloading.

## Common problems and how to fix them

- **Captions don't load at all (VTT).** Check the first line says `WEBVTT` and nothing comes before it except an optional byte order mark.
- **Captions don't load at all (SRT).** Look for a missing blank line between blocks, or timestamps with a full stop instead of a comma.
- **Accents or non-Latin text show as garbage.** Re-save the file as UTF-8. WebVTT requires it, and Vimeo requires it for both formats.
- **Italics or colours disappear.** The platform ignores the markup. YouTube recognizes no style markup in SRT, and only bold, italic and underline tags in VTT.
- **Captions are out of sync by a fixed amount.** A common cause is trimming the video after the captions were made. Re-export captions from the final cut, or shift every timestamp by the same offset in your subtitle editor.
- **Two captions show at once.** An end time runs past the next start time, so the cues overlap. Fix the timing in a [subtitle editor](https://exemplary.ai/subtitle-editor).

If you're starting from nothing rather than converting, our guide to [how to make an SRT file](https://exemplary.ai/blog/how-to-make-srt-file) covers writing one by hand and generating one automatically. For YouTube-specific steps, see our [YouTube subtitles guide](https://exemplary.ai/blog/guide-to-generate-subtitle).

## FAQ

### Is VTT better than SRT?

It does more, not better. VTT supports positioning, styling and comments, and it's the web standard, so it's the right choice for your own site. SRT is simpler and accepted more widely by social platforms. Pick the one the destination asks for.

### Can YouTube use VTT files?

Yes. YouTube lists WebVTT among its supported formats. It supports VTT positioning, but styling is limited to bold, italic and underline ([YouTube Help](https://support.google.com/youtube/answer/2734698?hl=en)).

### Can I just rename .srt to .vtt?

No. A VTT file needs the `WEBVTT` header, and its timestamps use a full stop instead of a comma. Renaming alone gives you an invalid file. The fix takes a minute by hand or one FFmpeg command.

### Does SRT support colours or bold text?

There's no standard for it. Some players read simple HTML-style tags in SRT files, but support varies, and YouTube ignores style markup in SRT completely. If styling matters, use VTT, or burn the styled captions into the video.

### What does VTT stand for?

Web Video Text Tracks. It's the format HTML video uses for text tracks, which can be subtitles, captions, descriptions, chapters or metadata ([MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/track)).

### Which format do I need for Facebook or LinkedIn?

SRT. Both help centres describe caption uploads with SubRip (.srt) files. LinkedIn only lets you attach one on desktop ([LinkedIn Help](https://www.linkedin.com/help/linkedin/answer/93997)).

> Exemplary AI is a browser-based AI tool that turns long videos and recordings into short captioned clips, transcripts in 99 languages, subtitles, translations into 116 languages, and written posts such as summaries, blog posts and YouTube chapters. It is built for YouTubers, podcasters and marketing teams; the Free plan includes 500 one-time credits with watermarked video exports. Pricing: https://exemplary.ai/pricing
