Videos on social media are often played with the sound off, so a clip without subtitles tends to be scrolled past before it says anything. Writing those subtitles by hand is another matter entirely: you listen, you type, and then you line up the start and end of every caption to the second.
Adding subtitles to a video breaks into two jobs. First you turn the speech into text and produce a subtitle file, then you put that file onto the video itself. The first is transcription and the second is the actual subtitling.
Both jobs are usually assumed to require either installing an editor or uploading the video to a cloud service, and since I wanted to avoid both, I built tools that do the whole thing inside the browser.
This article walks through both of them, from transcription to burned-in subtitles, together with the processing times I measured myself.
What You'll Learn from This Article
- How to transcribe a video and export an SRT subtitle file
- How to put that SRT onto the video
- How long it takes to add subtitles
- What to do when something goes wrong
All you need is the video file and a browser with WebGPU support (the browser feature for using the GPU). There is nothing to install, no account to create, nothing to upload and nothing to pay.
The two jobs, and the tools for them
There are three common ways to get subtitles onto a video: a cloud transcription service paired with a video editor, a command-line tool such as ffmpeg, or something that runs entirely in the browser.
Cloud + editor | ffmpeg | In the browser (this article) | |
|---|---|---|---|
Install | Editor required | Required | None |
File upload | Sent to the cloud | Stays local | Stays local |
Cost | Depends on the plan (some have free plans) | Free | Free |
Time or count limits | Depends on the plan | None | None |
What you must learn | The editor | Commands and flags | Almost nothing |
I used to run the Whisper transcription model locally through Python, and the accuracy was never the problem. What wore me down was that every change of machine meant another round of GPU drivers and dependencies, so it was never something I could reach for on a whim. I looked at paid cloud services and the official OpenAI API too, but the per-use cost and the fact that the audio leaves my machine both stopped me. Wanting to avoid those two things is exactly why I still do this inside the browser.
The two tools below are both ones I build and run myself.
- Transcription: Transcriber (transcriber.tools.ryusei.io)
- Subtitling: "Burn subtitles into video" on Media Tools (media.tools.ryusei.io)
Everything happens inside the browser in both of them, so neither the video nor the audio is ever sent anywhere, including to my own server.
What you need
- The video file you want subtitles on (MP4, MOV, WebM, MKV and so on)
- A current version of Chrome or Edge
- 8 GB of memory or more is comfortable
Use a browser that supports WebGPU. As of September 2026, Chrome and Edge handle it without trouble, and the transcription tool also runs with WebGPU in Safari on a Mac.
Step 1: Transcribe the video and export an SRT

Transcribe audio and video files in your browser. No account, no upload, and your audio never leaves your device. Completely free with no time or usage limits.
First you turn the speech into text and get a subtitle file (SRT). There is no need to extract the audio beforehand; hand it the video file and only the audio track inside is used.
- Open Transcriber in your browser.
- Pick a "Model" (covered below).
- Set "Language" to the language spoken in the video. Auto-detection works, but naming it explicitly is more stable when you already know.
- Turn "Speaker diarization" off. Left on, every line of the exported SRT is prefixed with a speaker name such as "Speaker A: ", and that prefix gets burned into the video along with the rest.
- Drag and drop the video file. There is no start button: transcription begins the moment the file is loaded, so make your settings first. Only the first time you use a given model is there a download to wait through.
- Correct the result on screen (covered below).
- Export it as "SRT (subtitles)" from the export row.
Which model to pick
Whisper comes in several sizes and Transcriber offers six of them. The common assumption is that a bigger model buys accuracy at the cost of speed. When I measured them, the times did not follow model size.
Here are the numbers for a 4 minute 8 second, 51.9 MB video, transcribed in Chrome on a Windows machine with a GeForce RTX 2060 SUPER (8 GB). Every run used WebGPU.
Model | Size | Time | vs. real time |
|---|---|---|---|
Small | about 600 MB | 0m 35s | about 7.1x |
Medium | about 900 MB | 1m 22s | about 3.0x |
Large v3 Turbo | about 1.2 GB | 0m 37s | about 6.7x |
Large v3 | about 1.6 GB | 0m 52s | about 4.8x |
The slowest was not the largest model but the middle one. Large v3 Turbo came in more than twice as fast as Medium and nearly matched the smallest model, Small. That is because Large v3 Turbo keeps the same encoder as Large v3, the part that analyses the audio, and shrinks only the decoder that assembles the text.
At least across what I measured, there was no reason left to pick Medium. I use Large v3 Turbo, and Small is the practical choice on anything without WebGPU.
Names and other proper nouns still come out wrong even on Large v3, and changing models does not meaningfully help, so correcting the text yourself is faster than chasing accuracy.
Fixing misheard words and hallucinations
Two kinds of errors are worth going after. The first is the misheard proper noun, which you catch by reading. The second is hallucination: a sentence that was never spoken. In my own run, stretches with only music produced "Please subscribe to the channel." and "Thank you for watching." the same way no matter which model I used. This is likely because Whisper was trained on a great deal of video audio, and it shows up most in silence and music.
Both can be fixed on the result screen before you export anything. When the same word is wrong in several places, "Find & replace" is the quickest route: matches are highlighted, and you can work through them one at a time with "Replace this one" or clear them in a single pass with "Replace all".
To edit a single line, hover over it and use the pencil icon. You can rewrite the text in place, and you can also split a line that is too long for a subtitle in two. Deleting the text of a hallucinated line here removes it from the exported SRT as well, and "Undo edit" reverts your edits one at a time.
Step 2: Put the SRT onto the video

Burn SRT or WebVTT subtitles into your video so they show even where subtitle files are not supported. Position, size, color and outline are configurable. Processed in the browser; your video is never sent anywhere.
With the subtitle file in hand, the next job is putting it onto the video, and for that I use "Burn subtitles into video" on Media Tools.
- Open the tool page.
- Load the video file.
- Choose the SRT you saved in step 1 under "Subtitle file (SRT / WebVTT)".
- Pick "Burn into the picture" or "Add as a subtitle track" under "How to embed" (covered below).
- Adjust "Position", "Text size", "Text color" and "Legibility" as needed.
- Run it, and the subtitled video is written out.
WebVTT is accepted alongside SRT, and the character encoding is detected automatically, covering UTF-8 as well as Shift_JIS, which is still common in Japanese subtitle files.
Burned in, or a subtitle track?
There are two ways to attach the subtitles: drawing the text into the picture itself, known as burning in or a hardsub, or shipping the subtitles alongside the video as a separate track, known as a softsub.
Burned in | Subtitle track | |
|---|---|---|
Can be toggled off | No | Yes |
On social media | Shows | Does not show |
iPhone default player | Shows | Does not show |
Output format | Same as the input | MKV only |
Re-encoding | Required | Not needed |
Here is what the same 4 minute 8 second, 51.9 MB video produced with each of them.
Method | Time | Output size |
|---|---|---|
Burned in | 125.4 s | 115.2 MB |
Subtitle track | 0.35 s | 51.9 MB |
The subtitle track copies the video and audio through untouched and simply packs the subtitles alongside them, which is why it finishes in 0.35 seconds. It can only be written as MKV, though, and the subtitles appear neither when posted to social media nor when played on an iPhone.
For anything going onto social media, burning in is the only real option. A subtitle track suits video you watch on your own PC or in a player like VLC, where being able to switch the subtitles off has value.
Position, size, color and legibility
The defaults read well on most footage, but here is what to change when they do not.
Setting | Default | When to change it |
|---|---|---|
Position | Bottom | Move it to "Top" when the footage already has text along the bottom |
Text size | 4.5% of video height | Raise it to 5-6% when the video will be watched on a phone |
Text color | White (#ffffff) | Yellow reads better over consistently bright footage |
Legibility | Black outline | Use "Translucent bar" when the background swings between light and dark |
I leave "Black outline" as it is, because an outline around the glyphs keeps them readable whether the background behind them is bright or dark.
When something goes wrong
Four things trip people up along the way. I know about them either first-hand or from the errors that show up in my processing statistics.
The text is garbled
UTF-8 and Shift_JIS are detected automatically, but nothing else is, so a file in an encoding such as EUC-JP has to be re-saved as UTF-8 in a text editor before it will load correctly.
The subtitles are out of sync
The tool uses the timestamps in the SRT exactly as written, so trimming the head off the video after transcribing makes every caption appear late by that amount. Trim before you add subtitles, or rewrite the timestamps in the SRT.
The file gets bigger
Burning in draws the text into the picture and then re-encodes, so the result can be larger than the original; in my measurement a 51.9 MB video came out at 115.2 MB. The output bitrate is derived from the "Quality" setting rather than from the source video, which is why a well-compressed original shows the biggest jump. Drop "Quality" one step, or run the result through a video compression tool afterwards.
Processing stalls
Large videos can run the browser out of memory, so close the other tabs and try again, or split the video before processing it.
Frequently asked questions
Is all of this really free?
It is. Neither tool has a usage cap, a time limit, or a paid tier.
Do I need an account?
No account is needed. Both tools work by opening the page and loading a file, so you never even enter an email address.
Is my video or audio uploaded anywhere?
It is not. All processing happens inside the browser, so neither the video nor the audio leaves your device. Apart from the one-time download of the AI model used for transcription, both tools send processing statistics (such as device specs and file formats) to the site's server, but these do not include the video or audio, the transcript, the subtitle text, file names or IP addresses. You can turn this off with the switch in the "Help us improve the service" section at the bottom of each page.
Is there a limit on video length?
Nothing in the design imposes one. Longer videos take more time and memory, though, so the practical limit comes down to your PC.
Can I do this on a phone?
Transcription runs on a phone with one of the smaller models, but burning in subtitles is heavy enough that a PC is the better choice.
Can I use this on commercial video?
You can. I place no restrictions on what you do with the files you export.
Summary
Adding subtitles to a video splits into transcription and subtitling, and both can be done entirely inside the browser, which means no install, no upload and no payment.
- Load the video into Transcriber and transcribe it with Large v3 Turbo
- Fix the misheard words and hallucinations on the result screen before exporting the SRT
- Load the SRT into Media Tools and burn the subtitles into the video
- Burn in for social media, or use a subtitle track when you want them to be switchable
Related articles and tools
How to turn a recorded X (formerly Twitter) Space into text for free. From downloading the recording to separating speakers and exporting subtitle files, everything runs in the browser with no account and no install.
I did not use ffmpeg.wasm for a browser-based video converter. Here is the licensing reason behind that, the WebCodecs and mediabunny implementation that replaced it, and the numbers I measured.


