Adding Subtitles with SRT and VTT Files: Platform Guide
SRT and VTT are both subtitle file formats. Most people only need to know which one their target platform accepts, where to upload it, and what to do when upload is not an option.
Ghulam Mujtaba
Software Developer at Codingtron · Vehari, Pakistan
Builder of Facebook to Transcript. Writes about AI transcription, video accessibility, and practical workflows for content creators and researchers.
Adding Subtitles with SRT and VTT Files: Platform Guide
facebooktotranscript.com
Which platforms accept SRT and VTT for subtitle upload
Before uploading anything, check what the destination platform actually accepts. Most platforms specify a format in their help docs, and the formats are not interchangeable everywhere. The WebVTT specification covers the web standard format in detail if you need the technical reference.
| Platform | Accepts SRT? | Accepts VTT? | Notes |
|---|---|---|---|
| Yes | No | Filename must include language code: video.en_US.srt | |
| YouTube | Yes | Yes | Either format works; no language code required in filename |
| Yes | No | Upload during post creation, not after publishing | |
| Vimeo | Yes | Yes | Paid plans only; free Vimeo does not support caption upload |
| TikTok | No | No | Burn captions in before upload, or use in-app auto-captions |
| Twitter / X | No | No | Burned-in captions only |
| Web (HTML5 player) | No | Yes | Use the <track> element pointing to your VTT file |
Uploading an SRT file to Facebook: exact steps
- Generate or obtain the SRT file. Transcribe the video and download in SRT format. Confirm timestamps use commas, not periods (00:00:01,500 not 00:00:01.500).
- Rename with the language code. Facebook requires this pattern:
videoname.en_US.srtfor US English. Without the language code, Facebook rejects the file silently. - Open Creator Studio. Navigate to Content Library, select the video, and click Edit Video.
- Go to Captions. Select Add Captions and choose Upload SRT File. Select your renamed file and confirm the language assignment.
- Verify the preview. Facebook shows a caption preview after processing. Check three spots: the opening line, mid-video, and the closing. Sync errors show up immediately in the preview.
For format details and the full list of Facebook language codes, see the transcript format guide.
When file upload is not an option: burned-in captions
TikTok and Twitter/X do not accept caption file uploads at all. Instagram Stories and Reels have inconsistent support. For these platforms, the only reliable method is burning captions into the video before upload — embedding the text directly into the video pixels so it displays everywhere, regardless of viewer settings.
The workflow: generate the transcript, download SRT, import the SRT file into a video editor, style the captions, export the video with captions baked in. Free tools that handle this cleanly: CapCut (mobile and desktop), DaVinci Resolve (desktop), and Kdenlive (desktop). Each accepts SRT import and renders captions over the video.
The honest trade-off with burned-in captions: viewers cannot turn them off, and the file size is larger than a video with a separate caption file. For multi-platform publishing, burned-in is actually more efficient — one file works everywhere without maintaining separate caption files per platform.
Using VTT for web-embedded video
If you are embedding video on a website using an HTML5 player, VTT is the correct format. The browser reads the VTT file via the <track> element:
<video controls>
<source src="/videos/talk.mp4" type="video/mp4" />
<track
kind="subtitles"
src="/captions/talk.en.vtt"
srclang="en"
label="English"
default
/>
</video>The kind attribute distinguishes subtitles (translation) from captions (includes non-speech audio descriptions for accessibility). For WCAG 2.1 AA compliance, use kind="captions" and include non-speech descriptions in square brackets like [applause] or [music]. The accessibility caption guide covers the full requirements.
Subtitle styling and readability: what the format does not cover
SRT and VTT define timing and text but not visual presentation. How captions look on screen — font, size, position, background colour — is controlled by the video player, not the caption file. This means the same SRT file can look unreadable on one platform and clean on another depending on the default player styling.
VTT supports inline style hints using CSS-like syntax in the file, but most platforms ignore these in favour of their own styling rules. The practical approach: trust platform defaults for hosted video (YouTube, Vimeo, LinkedIn handle their own caption rendering), and apply custom styling only for web-embedded players and burned-in captions where you control the output directly.
For accessibility compliance, caption readability standards include: minimum 14pt font (22 pixels at 1080p), contrast ratio of at least 4.5:1 against the video background, and no more than two lines of caption text displayed simultaneously. A white text on semi-transparent black background is the most consistently readable combination across varied video backgrounds. Most platforms use this as their default.
Multi-language subtitle files
A video with a global audience can carry multiple caption tracks — one per language. On YouTube, upload a separate subtitle file for each language under the Subtitles section. Each file gets its own language tag. Viewers switch between available languages in the CC menu. On Vimeo Pro, the same principle applies: upload multiple SRT files with different language codes.
The naming convention for multi-language subtitle files follows the BCP-47 language code system that Facebook requires:video.en_US.srt for US English,video.es_ES.srt for Castilian Spanish, video.fr_FR.srt for French. On YouTube, the naming convention is less strict — you select the language during upload rather than encoding it in the filename.
The translation workflow for multi-language captions: produce a reviewed SRT in the source language first, then translate that SRT to each target language. Translating an SRT file preserves the timing metadata — a translator replaces only the text within each caption block, leaving timestamps unchanged. After translation, check whether the translated text significantly exceeds the character count of the original; longer translations may need caption block splits to stay readable.
Spanish text runs 20–30% longer than equivalent English on average, a well-documented property of the language that affects caption block sizing directly. Caption blocks that fit within the 42-character-per-line standard in English will regularly overflow in Spanish translation, requiring additional splits. The post-translation review step should check caption block lengths specifically, not only translation accuracy. The same length expansion applies to French (typically 15–20% longer) and German (often 20–35% longer depending on compound noun density), making this a standard checkpoint for any multi-language caption workflow. I run into this nearly every time I caption content for Spanish distribution — it's one of those problems that's obvious once you've been caught by it and invisible until then.
Converting VTT to SRT (and back)
VTT to SRT: open the file in a text editor, delete the WEBVTT header line and the blank line after it, then replace all period decimal separators in timestamps with commas (00:00:01.500 becomes 00:00:01,500). Save as .srt. SRT to VTT: addWEBVTT as the first line with a blank line after it, then change all comma separators to periods. Both conversions take under two minutes manually.
Frequently Asked Questions
What is the difference between SRT and VTT subtitle files?
SRT (SubRip Subtitle) and VTT (WebVTT) contain the same core information: sequential caption blocks with timestamps and text. The format differences are small but matter for compatibility. VTT starts with a WEBVTT header line, uses a period as the decimal separator in timestamps (00:00:01.500), and supports optional CSS styling metadata and region positioning. SRT has no header, uses a comma (00:00:01,500), and contains plain text only. Most video platforms accept SRT. VTT is the standard for HTML5 web video players using the track element, making it the preferred format for video embedded directly on web pages. When in doubt about which to use: SRT for platform uploads, VTT for web-embedded video.
Does YouTube accept VTT files?
Yes. YouTube Studio accepts both SRT and VTT under Subtitles in the video editor. Either format works for standard YouTube uploads. The filename language code is not required on YouTube as it is on Facebook.
Why does Facebook reject my SRT file?
Four causes cover most rejections: timestamps use periods instead of commas, the filename is missing the language code (must be video.en_US.srt not video.srt), blank lines between caption blocks are missing, or the file was saved with a UTF-8 BOM header. Fix these in any plain text editor. The error message Facebook returns is rarely specific about which problem caused the rejection.
Can I add subtitles to TikTok with an SRT file?
No. TikTok does not accept caption file uploads of any format. Options: burn captions into the video before uploading using CapCut or a similar editor, or use TikTok's built-in auto-caption feature after posting and edit it within the app.
What is burned-in captioning and when should I use it?
Burned-in (hardcoded or open) captions are baked directly into the video pixels, not stored as a separate file. They display on every platform, every device, and every player without any settings required. The trade-off: viewers cannot turn them off. Use burned-in captions when you need universal display across platforms that do not support caption file upload (TikTok, Instagram Stories, Twitter/X), or when re-posting the same video across multiple platforms to avoid uploading separate caption files everywhere.
What causes subtitle timing to go out of sync, and how do I fix it?
Timing drift occurs when the transcription was generated from a file with a different start point than the video being captioned — for example, running transcription on a trimmed clip then applying the SRT to the full unedited version. The result is a constant offset: captions appear consistently early or consistently late throughout. Fix: identify the offset amount by checking where the first caption appears versus when the speaker first speaks, then shift all timestamps by that value. Free tools like Subtitle Edit (Windows) and most browser-based SRT editors have a shift-all-timestamps function that applies the correction in two clicks. A variable offset — captions drifting gradually rather than jumping by a fixed amount — usually indicates a frame-rate mismatch and requires re-exporting the SRT at the correct frame rate.
Ready to Convert Your Facebook Videos to Text?
Use our free AI-powered tool to transcribe any Facebook video in seconds.
Try the Free Transcription Tool