Scattered across r/VideoEditing are variations of the same request — threads like 1b891um ("What's a good free app to add subtitles to footage?"), 1i86giq, and 131e4ij all contain people trying to get from "I have a video file" to "I have an SRT file" without paying a subscription for the privilege.
It's a five-minute task if you know the path and an hour of tab-hopping if you don't. This is the complete map.
What an SRT file actually is
A plain-text file with numbered subtitle blocks:
1
00:00:01,240 --> 00:00:03,890
So the first thing to check
is the relay panel.
2
00:00:03,950 --> 00:00:06,100
It's on the left side, behind the battery.
Sequence number, start and end timestamps (hours:minutes:seconds,milliseconds), text. That's the whole format. No metadata, no styling. Every player, editor, and platform from VLC to YouTube to Premiere reads it.
Its sibling is WebVTT (.vtt), which YouTube also accepts and which supports styling. If a tool offers both, take the SRT for compatibility; convert to VTT later if needed — the conversion is trivial.
Why "just use YouTube" isn't the full answer
The obvious free path: upload to YouTube (unlisted), let auto-captions generate, download the caption file as SRT from YouTube Studio, delete the video. It works, and it's free. Problems: the caption generation can take hours; accuracy on names and jargon is mediocre; and you're shipping your unreleased video through a third party before it's public. For sensitive client work, that last one is a dealbreaker.
The DIY route: local Whisper to SRT
The robust free path runs through Whisper-family models on your own machine.
Option A — faster-whisper (Python):
from faster_whisper import WhisperModel
model = WhisperModel("medium", device="cuda", compute_type="float16")
segments, info = model.transcribe("input.mp4", word_timestamps=True)
with open("output.srt", "w", encoding="utf-8") as f:
for i, seg in enumerate(segments, 1):
f.write(f"{i}\n{fmt(seg.start)} --> {fmt(seg.end)}\n{seg.text.strip()}\n\n")
A 20-minute video takes 2-5 minutes on a mid-range GPU, longer on CPU. The medium model is the accuracy/speed sweet spot for English; large-v3 if you have the VRAM.
Option B — Subtitle Edit (GUI): Open the video, use Audio-to-text (Whisper) from the menu, and it produces a subtitle track you can edit against the waveform, then save as SRT. Slower to learn, easier to fix timing visually.
Option C — ffmpeg for audio extraction first: If a tool chokes on your container, extract audio once: ffmpeg -i input.mov -vn -ac 1 -ar 16000 audio.wav. Mono 16kHz WAV is what the models want anyway.
The catch with all local routes: raw Whisper output has subtitle-hostile segmentation. Lines run long, break mid-clause, and exceed comfortable reading speed (aim: max ~42 characters per line, 2 lines, ~1.5-4 seconds per subtitle). Post-processing the segmentation is where the real time goes. There are GitHub scripts (whisper-srt segmentation helpers, whisper-standalone) that do the re-segmentation for you.
Where a converter service fits
The DIY route assumes you want a pipeline. Many people just have videos — a batch this week, another next month — and want the SRT without adopting a toolkit.
postwriter.cn covers video-to-SRT as part of its pipeline: upload the video, get back the SRT plus the transcript, chapter timestamps, description draft, and titles. Two things distinguish the SRT specifically.
First, the review page. Every word aligns to the audio — click a word, hear it, fix it. Names, product terms, places: fix once. Second, those fixes persist in a personal dictionary, so the next video's SRT comes out cleaner. SRT quality is mostly proper-noun quality, and proper-noun errors are the same 20-40 words every video for most creators. A dictionary that learns them is the difference between fixing every export and fixing almost none.
Batch mode handles playlists and back catalogs — one job instead of 40 uploads.
Free during beta. Founder pricing after: $39 for 3 years.
Common SRT problems and fixes
Timestamps drift late in the file. Usually a variable-frame-rate source. Re-encode to constant frame rate first: ffmpeg -i in.mp4 -r 30 -c:v libx264 crf_v.mp4.
YouTube rejects the file. Check the timestamp format — commas before milliseconds, not periods. Also check for a missing blank line between blocks or a BOM in the encoding. Save as UTF-8 without BOM.
Foreign language input. Whisper-family models handle 90+ languages with varying quality; specify the language flag rather than letting auto-detect guess on short files.
FAQ
SRT or VTT for YouTube?
Both accepted. SRT for universal compatibility, VTT if you want styled/positioned captions.
Can I burn the SRT into the video afterwards?
Yes: ffmpeg -i in.mp4 -vf subtitles=out.srt out_burned.mp4. Upload the SRT separately too, so mobile viewers can toggle captions off.
How accurate is automatic SRT generation?
92-97% on clean single-speaker audio; lower with music, crosstalk, or accents. The gap closes fastest when corrections persist — the dictionary approach — rather than re-fixing each export.
What's the file size limit on postwriter.cn during beta?
Check the upload page for current limits; long-form handling is supported and limits are being raised through beta.
Top comments (0)