SUBTITLES · HOW-TO · 2026
How to create an SRT file — three routes that actually work
An SRT file is plain text with four moving parts: a sequence number, a timecode range, the caption text, and a blank line. That simplicity is why it became the universal subtitle format — and why it is easy to create almost right. This page covers all three creation routes (by hand, timed on a waveform, generated from the audio), the platform limits that decide how you format it, and the handful of traps that make a correct-looking file fail silently.
The format in one block
SRT (SubRip) dates to the early-2000s Windows program of the same name, which ripped subtitles from DVDs with OCR. The format it wrote was so simple it escaped the program: no formal standards body, no binary container — just numbered blocks of plain text. It is now the most widely distributed subtitle format on the internet, and every editor, player, and upload form reads it.
1 00:00:01,000 --> 00:00:04,500 Welcome to the demo. 2 00:00:05,200 --> 00:00:09,800 Each block is: a sequence number, a timecode line, then the text.
The rules hiding inside that block: timestamps are HH:MM:SS,mmm with
a comma before the milliseconds (a period makes it a VTT-style time that strict SRT
parsers choke on); the arrow is exactly --> with a space on each
side; blocks separate with one blank line; and numbering runs sequentially from 1. Text sits on one
or two lines — two lines, ~42 characters each, is the readability standard. There is no header
line (that is VTT) and no metadata of any kind.
Method 1: write it by hand (few cues, or learning the format)
For a handful of cues, a text editor is the whole toolchain. The steps are identical on every OS; only the save dialog differs:
- Open a plain-text editor. Notepad (Windows), TextEdit in plain-text mode (Mac), or VS Code everywhere. Word processors are disqualified — Word and Google Docs inject formatting and smart quotes that break parsers.
- Type the first block.
1, Enter,00:00:01,000 --> 00:00:04,500, Enter, the caption text, then Enter twice — the blank line is the block separator, not decoration. - Repeat with incrementing numbers. Cue 2, cue 3, and so on; the number is part of the format, not a bullet you can skip.
- Save with the right name and encoding. Extension
.srt, encoding UTF-8 (without BOM). This is where both platforms bite — see below. - Test before shipping. Drag the file onto a playing video in VLC (Subtitle > Add Subtitle File), spot-check the opening minute, a middle cue, and the final cue.
Windows: the .txt ambush
Notepad’s Save As defaults to “Text Documents (*.txt)” and silently appends
.txt behind your typed name — producing captions.srt.txt, which
every import form rejects. Change Save as type to All Files, type the
full name.srt yourself, and set Encoding to UTF-8. (Older Notepad defaults to
ANSI/Windows-1252: accented characters come back as mojibake.)
Mac: the .rtf ambush
TextEdit saves rich text by default — an .rtf with styling markup no parser
accepts. First run Format > Make Plain Text (⌘Shift+T), then save with the
extension typed explicitly and “hide extension” unchecked, or you get
captions.srt.rtf. VS Code sidesteps both traps on both platforms.
The honest cost: hand-writing a 60-minute video takes 2–4 hours — you are listening, timestamping, and typing in one pass. Past five minutes of video, the next two methods are dramatically faster.
Method 2: time it on a waveform (the craft route)
Subtitle Edit (Windows, open source) and Aegisub (cross-platform) import the video, show its audio waveform, and let you set cue boundaries visually or by keyboard: start a cue where the line begins, end it at the pause, type the text, move on. Both write UTF-8 SubRip by default and display a live reading-speed check per cue. For a 60-minute video, expect 30–60 minutes of work — the accuracy of human timing at a fraction of the manual cost, and still the route of choice for translation and short-form work.
Whichever tool times the cues, the readability specs are the same: keep captions on screen 1–6 seconds, hold reading speed around 15–20 characters per second, break lines at natural clause boundaries, and never split a name or key phrase across cues. Conversational footage with cross-talk is where timing quality actually shows — tighten cue breaks around interruptions and late entrances, because viewers use captions to track who said what.
Method 3: generate the SRT from the audio (the default route)
For anything longer than a minute, generating the first draft from the audio is the practical move: a speech engine transcribes and timestamps in the same pass, you correct words and timing in an editor, then export SRT. Free web generators differ wildly in what “free” covers — the 2026 free subtitle generator comparison ranks every free tier by its fine print. Check it before uploading client footage:
| Tool | Free reality | Notes |
|---|---|---|
| FreeSubtitles | Fully free, browser-only | Web Speech API runs in-browser — files never upload; 15 languages; SRT/VTT/TXT export |
| CaptionX | Free, no account | 25 MB file cap; SRT downloads automatically; 100+ languages |
| Kapwing | 10 minutes of subtitles | Then Pro for unlimited + no watermark; SRT/VTT/TXT export; full editor |
| VEED | Free to try, download gated | Subtitle-file downloads need a paid plan (~$20/mo Creator); burning in is free |
| Maestra | Limited portion free | 125+ languages; full-length exports on paid plans |
| Subanana | 15-minute preview, 3 files/mo | Whisper-based, speaker labels, 95+ language translation, up to 8h/30GB files |
Two things worth doing before and after generation: preload your custom vocabulary (product names, guest names, acronyms — tools like Transcrever accept a term list that guides recognition, and AI otherwise mishears exactly the words that matter most), and edit before export, because fixing a wrong name in the transcript is one edit while catching it after the file reaches an editor or upload form is a re-export.
The privacy-first variant runs the same pipeline locally: a Whisper-class engine on your own machine transcribes the file and exports SRT with nothing leaving the disk — the local video transcription guide covers the toolchain, and video-to-text converter pricing shows what the cloud equivalents meter.
When your SRT file is not working: the seven-trap checklist
An SRT that looks fine in a text editor can still fail in a player. Work down this list — the first three account for most broken files:
- Periods instead of commas.
00:00:01.000 -->is VTT syntax. Strict SRT parsers hit the timestamp, fail to read it, and skip cues — or the whole file — with no error. One character, invisible until you look for it. - The .txt or .rtf double extension.
captions.srt.txtfrom Notepad’s save dialog,captions.srt.rtffrom TextEdit’s rich-text default. Check the real extension in Explorer/Finder (show extensions) before blaming the import form. - Encoding problems. ANSI-saved files turn accented characters into mojibake; UTF-8 with BOM makes some players drop cue 1 (the invisible byte-order mark parses as text). Re-save UTF-8 without BOM — VS Code and Notepad++ both expose the toggle.
- Sequence numbers broken. Numbers out of order, duplicated, or skipped make strict parsers bail mid-file. They must run 1, 2, 3… in order.
- Missing blank lines. The blank line between blocks is the only delimiter SRT has; two blocks butted together parse as one garbled cue.
- Overlapping cues. Cue 2 starting before cue 1 ends is technically legal and still glitches or drops in some players. Re-time so each cue starts where the previous ends (Subtitle Edit does this in one pass).
- Styling markup. Font tags, ASS/SSA color codes, positioning braces — YouTube’s caption importer accepts only basic versions and ignores everything else; some players reject the file outright. SRT carries text and timing, nothing more.
If timing is off by a constant amount everywhere, the file is valid — the export carried a global offset. Shift the whole file once (Subtitle Edit’s synchronization tool) instead of re-timing cues; drift that grows over the video means the file came from a different edit of the footage and needs a re-export from the final cut. For the format-level comparison behind these traps — and the one-line ffmpeg conversions — see SRT vs VTT.
Platform limits that shape the file you make
| Platform | Formats | Hard limits | Line rules |
|---|---|---|---|
| YouTube | SRT, VTT, SBV, TTML | 10 MB file, 10,000 cues | No enforced line limit; ~42 chars/line renders cleanly on mobile; plain UTF-8, markup ignored |
| Netflix (delivery spec) | TTML/DFXP, SCC | Per-title specs | 42 characters per line, 2 lines — the strictest standard in the field |
| Vimeo | SRT, VTT, DFXP, SCC | None documented | 2 lines max; standard readability specs apply |
| Course platforms | SRT (Teachable, Kajabi, Thinkific + VTT) | ~50 MB | 10,000-cue caps common; never reached in practice |
Practical read: format every file to the ~42-character, two-line, 1–6-second spec and it passes everywhere. YouTube is the destination with the most fine print worth knowing — its timestamp and chapter rules and the three ways to get a transcript from a YouTube video are covered separately.
Can I turn a plain-text transcript into an SRT?
Not by renaming, not by reformatting — a .txt changed to .srt is
rejected by every player, because SRT requires timing data plain text does not contain. Your options
depend on what you still have:
Have the audio? Re-transcribe with a tool that keeps timestamps and export SRT directly — the transcript itself gives the engine a vocabulary head start, so accuracy improves on the second pass.
Only the text? Force-align it: WhisperX or aeneas (both free, command-line) compute timestamps for an existing transcript against the source audio and emit a timed file. If the text carries per-line timestamps in a parseable format, Subtitle Edit can import and rebuild valid SRT structure. What no tool can do is recover timing that was never captured from nothing.
One pass, every format, nothing uploaded
VocalFuse runs a Whisper-class speech engine locally on your Windows machine: drop in any audio or video file and get a timestamped, punctuated transcript with speaker labels — then export SRT, VTT, or TXT from the same pass, so format choice becomes a download-menu decision. Nothing uploads: the engine runs on your PC, which is also why there is no per-minute meter (free tier, Basic $5/mo dictation, Pro $10/mo adds AI notes and summaries).
Because timing comes from the audio itself, the exported SRT arrives with subtitle-grade cue timing and real punctuation — the two things auto-captions most often get wrong — with the vocabulary already right on names the cloud engines mishear.
Related reading
SRT vs VTT
Which format each destination requires, the comma-vs-period trap, and one-line ffmpeg conversions.
Subtitle format decision guideTranscribe video files locally
The local Whisper pipeline vs cloud converters: cost per hour, formats, and privacy.
Video transcription guideYouTube transcripts & timestamps
Keep or strip timestamps, chapter rules, and re-uploading SRT to Studio.
Timestamps guidePodcast chapters from transcripts
Turn a timestamped transcript into navigation players can use.
Podcast chapters guideExplore related AI note taking guides
How to create an SRT file — FAQ
How do I create an SRT file?
Three routes. Hand-write it in a plain-text editor for a few cues: per block, a sequence number, a 00:00:01,000 --> 00:00:04,500 timecode line (comma before the milliseconds), one or two caption lines, and a blank line — saved as UTF-8 with the .srt extension. Time cues on a waveform in Subtitle Edit or Aegisub for short clips and translation work. Or generate the timestamps automatically: a speech engine transcribes and timestamps the audio in one pass, you correct the draft, and export SRT — the practical route for anything longer than a minute.
How do I save a Notepad file as SRT?
In the Save As dialog, change "Save as type" from "Text Documents (*.txt)" to All Files, type the full filename with the .srt extension yourself, and set Encoding to UTF-8. Notepad otherwise appends .txt behind your back (captions.srt.txt), which every import form rejects. Older Notepad versions default to ANSI encoding, which turns accented characters into mojibake — UTF-8 without BOM is the safe target.
How do I save a TextEdit file as SRT on Mac?
TextEdit saves rich text (.rtf) by default, which no subtitle parser accepts. Convert the document first with Format > Make Plain Text (Shift-Command-T), then save with the .srt extension typed explicitly and "hide extension" unchecked — otherwise you get captions.srt.rtf. VS Code avoids both traps on Mac and Windows alike.
Why is my SRT file not working?
Work the seven-trap checklist in order: periods instead of commas in the timestamps (VTT syntax — strict SRT parsers silently skip the cues); a hidden .txt or .rtf double extension; encoding (ANSI mojibake, or UTF-8 with BOM dropping cue 1); sequence numbers out of order or skipped; missing blank lines between blocks; overlapping cues (legal but glitch-prone — re-time so each cue starts where the previous ends); and styling markup (font tags, ASS codes) that importers ignore or reject. If timing is off by a constant everywhere, the file is valid — shift the whole file once rather than re-timing cues.
Can I convert a plain-text transcript to SRT?
Not by renaming or reformatting — SRT requires timing data plain text does not have, and a .txt renamed to .srt is rejected by every player. If you still have the audio, re-transcribe with a tool that outputs timed formats (accuracy improves, since the engine gets a vocabulary head start). If you only have text, force-align it to the audio with WhisperX or aeneas (both free, command-line) to compute timestamps. Per-line timestamped text can also be imported and rebuilt into valid SRT by Subtitle Edit.
What are the rules for SRT files on YouTube?
YouTube accepts SRT, VTT, SBV, and TTML caption files up to 10 MB and 10,000 cues per file, in plain UTF-8 — style markup is ignored. There is no enforced per-line character limit, but ~42 characters per line and two lines maximum render cleanly on mobile. Upload path: YouTube Studio > Content > your video > Subtitles > Upload file > With timing, pick the language, publish, then spot-check playback. Netflix-style 42-character limits are delivery-spec rules, not YouTube rules.
What is the best free subtitle generator?
Depends on what free has to cover. FreeSubtitles is fully free and browser-only (Web Speech API, files never upload, 15 languages, SRT/VTT/TXT export). CaptionX needs no account and downloads SRT automatically up to 25 MB. Kapwing includes 10 minutes of subtitles free, VEED lets you generate free but gates file downloads behind a paid plan, Maestra processes a limited portion free, and Subanana previews the first 15 minutes of 3 files a month. For privacy or volume, a local Whisper-class engine produces SRT with nothing uploaded and no meter.
Is VocalFuse good for creating SRT files?
Yes — VocalFuse transcribes audio and video locally on Windows with a Whisper-class engine and exports TXT, SRT, and VTT from the same transcript, so creating an SRT is a download-menu choice. Nothing uploads: the engine runs on your PC, which is why there is no per-minute meter. The free tier covers transcription; Basic ($5/mo) adds dictation and Pro ($10/mo) adds AI notes and summaries. Timing comes from the audio itself, so the SRT carries subtitle-grade cues with real punctuation.