To add subtitles to an MP4 permanently, burn (hardcode) them into the video: load the MP4 and an SRT file into a tool that draws the text onto every frame, such as the free HandBrake on Windows or Mac, FFmpeg from the command line, or an online captions tool, then export a new MP4. The subtitles then show in every player and on every platform, and can’t be turned off.
If you only want subtitles that viewers can switch on, you can add a soft subtitle track to the MP4 instead. This guide covers both, step by step, for Windows, Mac and the browser.
The short answer
To add subtitles to an MP4 permanently, get an SRT file that matches the video, then burn it in: in HandBrake, open the MP4, go to the Subtitles tab, add the SRT from Tracks, set it to burn in, and start the encode. In FFmpeg, use the subtitles filter. Online caption tools can transcribe, style and burn in one step.
Key takeaways
- Permanent = burned in. The text becomes part of the picture in a new MP4.
- You need a subtitle file first, usually SRT; make or check it before you burn.
- HandBrake is free on Windows, Mac and Linux. FFmpeg is free and scriptable.
- An MP4 can hold switchable (soft) subtitle tracks too, but not every player shows them.
- Keep the original video. Burned subtitles can’t be edited, so a typo means a re-export.
Disclosure: we make QuickVeed and show how to do this in it, along with other ways. Details about other products come from their public pages, checked in October 2026 and linked at the end.
Permanent (burned-in) vs soft subtitles in an MP4
| Burned in (permanent) | Soft track inside the MP4 | |
|---|---|---|
| Shows in every player | Yes | Only players that support it |
| Shows on social platforms | Yes | No, platforms ignore embedded tracks |
| Viewer can turn it off | No | Yes |
| Several languages | One per video file | Several tracks in one file |
| Re-encodes the video | Yes, takes time | No, if you only add a track |
If the MP4 is going to Instagram, TikTok, LinkedIn, WhatsApp or a presentation, burn the subtitles in. For a file someone will watch in VLC or another full player, a soft track is fine. For YouTube, upload the SRT separately; see how to add subtitles to a YouTube video.
Step 1: Get a subtitle file that matches the video
Every method needs a subtitle file, normally SRT, timed to this exact cut of the video.
- No subtitles yet: transcribe the video with an automatic tool and download an SRT. See how to transcribe a video to text.
- You have a script but no timing: our free text to SRT converter turns plain text into timed cues you can then adjust.
- You have an SRT: play it with the video in VLC and check that it matches. If all lines are early or late, fix it with the subtitle time shifter; for word fixes, see how to edit an SRT file.
Name the SRT exactly like the video (demo.mp4 and demo.srt) and keep them in the same folder. Many players then load it automatically, which makes checking quicker.
How to add subtitles to an MP4 permanently on Windows or Mac (HandBrake)
HandBrake is a free, open-source video converter for Windows, macOS and Linux. Its documentation calls burning in a hard burn: the subtitles are written onto the picture permanently.
- Open HandBrake and open your MP4 as the source.
- Pick a preset (for example Fast 1080p30) and check the Dimensions tab keeps your video’s size.
- Go to the Subtitles tab, click Tracks and choose the option to add an external subtitle file, then select your SRT.
- Check the character encoding setting (Char Code) matches your file; UTF-8 for most files. A wrong value can drop the subtitles.
- Tick Burn In on that track.
- Choose where to save the new file and click Start Encode.
HandBrake notes that an MP4 can carry only one burned-in subtitle track. Encoding takes a while because every frame is re-drawn; a 10-minute 1080p video typically takes a few minutes on a modern laptop. HandBrake uses a plain default style; if you want a particular font, colour or animated words, use a captions tool instead.
Burn subtitles into an MP4 with FFmpeg or online
FFmpeg (Windows, Mac, Linux)
FFmpeg is free and good for batches. Its subtitles filter draws an SRT onto the video using the libass library:
ffmpeg -i demo.mp4 -vf subtitles=demo.srt -c:a copy demo-subtitled.mp4
You can change the look with the filter’s force_style option, for example a larger font, and set the character encoding with charenc if the file isn’t UTF-8. FFmpeg’s documentation says complex scripts such as Arabic, Hebrew and Devanagari need libass built with HarfBuzz to render correctly.
Add a soft subtitle track with FFmpeg (not permanent)
ffmpeg -i demo.mp4 -i demo.srt -c copy -c:s mov_text demo-soft.mp4
This copies the video without re-encoding and adds a switchable subtitle track. Players such as VLC show it; social platforms don’t.
To burn in Arabic, Hebrew or Hindi with FFmpeg, add the shaping option and point it at a font folder that has a suitable font, and check your build includes HarfBuzz. A quick test on a ten-second clip saves re-encoding a long video.
Online, in QuickVeed
An online captions tool skips the SRT step and lets you pick a style. In QuickVeed’s Captions & subtitles:
- Open Captions & subtitles and upload the video (up to 3 hours), or pick one from your library. The upload keeps going if you switch to another page.
- Pick a caption style (11 to choose from, such as Bold yellow, Karaoke fill or Classic subtitles) and a position: bottom, middle or top. Leave “Make the captioned video when it’s ready” ticked if you want the burned-in copy made automatically.
- Press Transcribe. The app estimates about a minute of processing per 10 minutes of video.
- On the Edit tab, correct any line, click a time to jump to it in the player, and press Save changes.
- On the Translate tab, tick up to 5 of 32 languages at a time. Each line keeps its timing.
- On the Download tab, get an SRT, VTT or TXT file for each language. On the Burn in tab, make a captioned copy per language; it is saved to your library.
| Video length | Transcript | One burned-in copy | Total, one language |
|---|---|---|---|
| 1 minute | 2 credits | 3 credits (minimum) | 5 credits |
| 3 minutes | 5 credits | 3 credits | 8 credits |
| 10 minutes | 15 credits | 10 credits | 25 credits |
| 30 minutes | 45 credits | 30 credits | 75 credits |
| 60 minutes | 90 credits | Not available (burn-in is up to 30 minutes) | 90 credits (files only) |
The transcript costs 1.5 credits a minute, rounded up. Each burned-in copy is 1 credit a minute (3 minimum, videos up to 30 minutes), and translation is billed by AI use, usually a credit or two per language. New accounts get a 14-day trial with 75 credits, no card needed. The captioned MP4 is saved to your library to download. QuickVeed transcribes the video itself; it doesn’t import an existing SRT, so use HandBrake or FFmpeg if your subtitle file is already final.
Style, placement and troubleshooting
Burned-in subtitles can’t be adjusted later, so get the look right before the final export.
- Size: text should be readable on a phone. On a 1080p video, that is noticeably larger than most default subtitle styles.
- Contrast: white text with a dark outline or a semi-transparent box reads over any footage.
- Position: bottom centre for landscape videos; middle for vertical social videos, where the app’s buttons cover the bottom.
- Line length: two lines at most, about 42 characters each, so the text doesn’t cover faces.
| Problem | Likely cause | Fix |
|---|---|---|
| New MP4 has no subtitles | Burn In not ticked, or wrong character encoding | Tick Burn In on the track; set the encoding to UTF-8 |
| Accents or non-Latin letters show as symbols | File isn’t UTF-8 | Re-save the SRT as UTF-8, or set the encoding in the tool |
| Arabic or Hindi letters break apart | No complex-script shaping in the renderer | Use a tool with shaping support and a suitable font; see Arabic subtitles |
| Subtitles early or late throughout | SRT made for a different cut | Shift it with the time shifter, then burn again |
| Text too small | Default style made for TV | Increase font size (FFmpeg force_style, or a captions tool’s style) |
| Output much larger or blurrier than the source | Preset bitrate or resolution differs | Match the source resolution and pick a bitrate with the bitrate calculator |
A worked example
A 6-minute 1080p training video with an existing English SRT. In HandBrake: open the MP4, add the SRT on the Subtitles tab, tick Burn In, keep the Fast 1080p30 preset, encode. Total: about ten minutes including the encode, and free. Without an SRT, in QuickVeed: 9 credits to transcribe and 6 to burn in, with a few minutes of proofreading in between.
Which method should you use?
| You want | Use |
|---|---|
| Free, one video, already have an SRT | HandBrake |
| Many videos, or a repeatable script | FFmpeg |
| No subtitle file yet, styled captions, or several languages | An online captions tool |
| Switchable subtitles in a file for a media player | A soft track (FFmpeg or an MKV container) |
| Subtitles on YouTube | Upload the SRT in YouTube Studio, don’t burn in |
Before burning in, check the subtitles one last time: names, numbers, line length and timing. Fixing a typo afterwards means exporting the whole video again. Our general guide to burning subtitles into a video covers styling and placement.
Frequently asked questions
How do I permanently add subtitles to an MP4?
Burn them in: open the MP4 in HandBrake, add the SRT on the Subtitles tab, tick Burn In and encode. Or use FFmpeg’s subtitles filter, or an online captions tool that exports a captioned MP4.
How do I merge an SRT file with an MP4?
To make the subtitles permanent, burn the SRT in with HandBrake or FFmpeg. To keep them switchable, add the SRT as a soft track (FFmpeg with -c:s mov_text) without re-encoding.
Why don’t my embedded subtitles show on Instagram or WhatsApp?
Social apps and messengers ignore soft subtitle tracks inside an MP4. Burn the subtitles into the picture instead.
Can I add subtitles to an MP4 on a Mac for free?
Yes. HandBrake and FFmpeg both run on macOS and are free.
Does burning in subtitles reduce video quality?
The video is re-encoded, which can lose a little quality. Use a good-quality preset or a similar bitrate to the original; our video bitrate calculator helps you pick one.
Try it with your own video
Transcribe, style and burn subtitles into an MP4 without making an SRT first. Upload an MP4, pick a caption style, and judge the captioned video for yourself. QuickVeed plans start at $18/month, and new accounts get a 14-day trial with 75 credits, no card needed. Sign up or see pricing.
Sources
Competitor details in this post were checked against these public pages in October 2026. Products and prices change, so confirm with each vendor before you decide.


