You have a video and a subtitle file, usually an .srt, and you want the words to stay on the picture: for Instagram or WhatsApp, which ignore subtitle tracks, for a screen at an event, or for someone who will never find the “CC” button. That is called burning in (or hard-coding) the subtitles. Each frame is redrawn with the text on it, so the subtitles show in every player and can no longer be switched off.
The short answer
- In the browser, no install: drop the video and the .srt on Add Subtitles to Video. Check the preview, pick a style, press Burn subtitles into video and download the MP4. Nothing is uploaded.
- HandBrake (Windows, Mac, Linux): open the video, go to the Subtitles tab, choose Import Subtitle and pick the .srt, tick Burn In for that track, then Start Encode.
- VLC: Media > Convert / Save, add the video, tick Use a subtitle file and choose the .srt, press Convert / Save. Click the spanner next to the profile, open the Subtitles tab and tick both Subtitles and Overlay subtitles on the video. Without that second tick the output has no text.
- FFmpeg: open the command prompt in the folder with both files and run
ffmpeg -i video.mp4 -vf subtitles=subs.srt -c:a copy out.mp4. Read the next section before giving it a full path.
What went wrong when we did it with FFmpeg on Windows
FFmpeg is what most answers online suggest, and its subtitles filter does a good job once it runs. We burned the same
three-line SRT into a 12-second 1080p clip with FFmpeg 7.1 on Windows 11 in eight different ways (23 October 2026). We then counted
the new white pixels in the bottom quarter of the frame at each subtitle’s time, so “it worked” means the text is
really in the picture:
| How the subtitle file was given | Result |
|---|---|
subtitles=C:\dev\videos\subs.srt | Stopped: “Unable to parse option value … as image size” |
subtitles=C:/dev/videos/subs.srt (forward slashes) | Stopped, same error |
subtitles='C:/dev/videos/subs.srt' (in quotes) | Stopped, same error |
subtitles='C\:/dev/videos/subs.srt' | Worked, all three lines |
subtitles=subs.srt, run from the same folder | Worked, all three lines |
| Same file saved in Windows-1252 (“ANSI”), first line “Café crème” | Finished with no error, but the first line was missing from the video |
ANSI file with subtitles=subs.srt:charenc=cp1252 | Worked, all three lines |
| SRT with no blank line between cues | Worked |
The first problem is the colon after the drive letter. Inside -vf, a colon separates one filter option from the next, so
FFmpeg reads C as the file name and the rest of the path as the next option (“original_size”), then gives up.
Quotes and forward slashes alone do not help. You either escape the colon as C\: or, easier, run the command from the
folder that holds the subtitle file and give just its name.
The second problem is worse because nothing looks wrong. An SRT saved by an old Windows program in ANSI encoding has accented
letters that are not valid UTF-8. FFmpeg printed “Invalid UTF-8 in decoded subtitles text; maybe missing -sub_charenc
option” in its scrolling log, skipped that subtitle, finished with exit code 0 and wrote the video without it. In a real
film that can be dozens of missing lines, only the ones that happen to contain é, ü or ç. Adding
:charenc=cp1252 fixes it, as does saving the file as UTF-8 first.
Check the subtitle file before you burn it
Burning is the slow step and you cannot undo it, so it pays to look at the file first. Open the .srt in Notepad and check:
- Encoding: if accented letters already look wrong in Notepad, or File > Save As shows ANSI, save it again as UTF-8. SRT to VTT detects Windows-1252 and UTF-16 and writes UTF-8 (convert SRT to SRT if you only want the fix).
- Timing: play the first spoken line. If every subtitle is early or late by the same amount, shift them all. Both of our
tools have a Shift timing box (for example
-1.5for one and a half seconds earlier). If the gap grows during the video, the file was made for a different version or frame rate, and shifting will not fix it. - The right file: a subtitle file for a 45-minute episode on a 30-second clip shows nothing. The browser tool warns when no line falls inside the video, or when some lines start after it ends.
- Tags: lines starting with
{\an8}are meant to sit at the top of the screen. FFmpeg, VLC and our browser tool honour it; some editors print it as text.
Burned in or a separate file?
Burn the subtitles in when the video is going to a social app, a presentation or a phone gallery. Keep them as a separate file when
viewers should be able to switch them off or pick a language. For YouTube, upload the .srt in YouTube Studio instead. For a video on
your own website, use a .vtt file in a <track> element. In our Chrome test, a VTT that still had SRT-style commas
loaded without an error and showed nothing, so convert it properly. For VLC, Plex or a TV, put the .srt next to the video with the
same file name.
Size, style and quality
Subtitles meant for phones need to be bigger than film subtitles: about 5–7% of the short side of the picture, with a dark outline or box so they stay readable over a bright sky. Keep lines under about 40 characters and leave each one on screen for two to six seconds. Burning in re-encodes the whole picture, which costs a little quality. Use a bitrate at least as high as the original’s; the browser tool adds 15% for the sharp edges of the letters. If the result is too big to send, burn first and then shrink it with Resize Video. Resizing first and burning after gives smaller, blurrier text.
On a phone
Neither iPhone nor Android can burn a subtitle file into a video with the built-in apps. Editing apps such as CapCut can add captions you type or generate there. The browser tool above needs a browser with WebCodecs, the built-in video encoder: Chrome on Android, or Safari on iOS 16.4 and later. Long 4K videos are slow on a phone, so for a feature-length film use HandBrake on a computer.