How to add subtitles to a video
Choose what your audience needs first: captions they can switch off, or captions that are always visible.
Free toolSubtitle EditorEdit SRT and VTT timings, preview styled captions and burn them into a short video. Your files stay in your browser.Open the caption studioChoose a subtitle file or permanent captions
Use a separate subtitle file when your player or publishing platform accepts caption tracks. Burn captions into the picture when the destination will not keep that track.
| Method | What travels with the video | Tradeoff |
|---|---|---|
| Separate SRT or VTT | Text and timings, supplied alongside the video | Can be corrected and switched off. The destination controls appearance and must accept the file. |
| Embedded subtitle track | Captions inside the video container | Player support depends on container and subtitle codec. Embedding does not make captions permanent. |
| Burned-in captions | Words drawn directly into video frames | Appearance stays visible. Re-encoding changes the video, and you cannot switch captions off. |
Start with a timed caption file
A transcript needs timestamps before it becomes subtitles. Each cue needs a start, an end and the words shown during that interval.
This SRT example shows a caption from 2.5 to 4 seconds. The timing line uses a comma before milliseconds.
1
00:00:02,500 --> 00:00:04,000
A second caption.WebVTT begins with WEBVTT and uses a full stop before milliseconds. You can convert a plain-text caption track between these formats without changing its timings.
WEBVTT
00:00:02.500 --> 00:00:04.000
A second caption.Fix early, late or drifting subtitles
This worked example was checked on 30 September 2026. We pasted two synthetic SRT cues, shifted them by 0.5 seconds, then copied WebVTT to verify the output.
A constant offset needs a time shift. Progressive drift needs different timings across the document.
A worked half-second correction
If speech starts at 3.000 seconds but the caption appears at 2.500, delay the caption by 0.500 seconds. Add the same amount to its end time so its duration stays unchanged.
| Value | Before | After +0.500 seconds |
|---|---|---|
| Start | 00:00:02.500 | 00:00:03.000 |
| End | 00:00:04.000 | 00:00:04.500 |
| Duration | 1.500 seconds | 1.500 seconds |
In floi, use Fix subtitle sync, enter 0.5, then choose Shift all. Check a cue near the start and another near the end before exporting.
When a global shift is the wrong repair
If the first caption matches but later captions become increasingly late, a fixed shift cannot fix both points. Check whether your video was trimmed, sped up or exported at a different duration.
Match subtitles to the final video. For a long document with drift, use a desktop subtitle editor with retiming controls.
Check readability before styling
Give people enough time to read each caption. Shorter wording or a longer cue can help more than a larger font.
- Check captions against speech, including the first and final words.
- Use deliberate line breaks instead of one long line.
- Review overlaps. Two cues shown together may cover too much of the picture.
- Check a bright frame and a dark frame for contrast.
- Keep text away from important faces and platform interface overlays.
The floi warnings use 20 non-space characters per second and 42 characters per line as review thresholds. They are editor heuristics, not a guarantee that every audience can read the result.
Choose a browser or desktop export method
Use the browser studio for short clips when you want local editing and a visible preview. Use a desktop encoder for long videos or formats your browser cannot handle.
| Method | Useful for | Limits to check |
|---|---|---|
| floi subtitle editor | SRT/VTT edits, styled preview, short captioned MP4 or WebM exports | Five-minute burn limit; 500 MB input; HDR refused; browser codecs vary. |
| OpenSubs | Broader local caption workflow, including word effects and transcription | Its processing engine and speech models add downloads. Test your input codec. |
| Subtitle Editor | Detailed cue timing, multiple tracks and waveform editing | Its observed Save menu exports subtitle documents, rather than a captioned video. |
| HandBrake | Longer video encoding with subtitle burn-in | Install the desktop application and check source/output settings. |
| FFmpeg | Repeatable command-line burn-in and batch workflows | The subtitles filter needs a build with libass. Encoder settings and fonts require attention. |
Burn an SRT into an MP4 with FFmpeg
The subtitles filter draws captions into frames. This example encodes H.264 video and copies compatible audio.
ffmpeg -i input.mp4 -vf "subtitles=captions.srt" -c:v libx264 -crf 18 -c:a copy captioned.mp4This is a command for your computer, not something the browser tool runs. If the source audio cannot be copied into MP4, choose a compatible audio encoder instead.
Keep the editable captions
Download SRT or VTT as well as the burned video. A future wording correction is easier with the caption document than with pixels already encoded into a movie.
Keep the source video too. Burning captions creates a new file and should never be your only copy of the original.