How to Burn Subtitles Into a Video (Hardcode SRT, Free)

To burn subtitles into a video, re-encode it with a tool that draws your SRT file's text onto the picture. In FFmpeg, run ffmpeg -i input.mp4 -vf "subtitles=subs.srt" -c:a copy output.mp4. HandBrake and Kdenlive do the same from menus, and all three are free. Browser editors such as Kapwing and VEED also burn an uploaded SRT, but their free plans add a watermark. Burned-in subtitles cannot be turned off.
This guide assumes you already have a subtitle file and want the words fixed into the picture, for Reels, a client deliverable or a player with no caption button. Need the file first? See how to add subtitles to a video automatically.
Facts checked November 13, 2026 against FFmpeg, HandBrake, VLC, Kdenlive, Kapwing, VEED, W3C, BBC, Netflix, YouTube and Instagram pages. We ran the FFmpeg commands on generated clips with FFmpeg 9.0.1 and libass 0.17.4; the other tools' steps come from their documentation and were not run. Prices and menus change, so confirm them. Full disclosure: Loopdesk is our product; it burns in captions it generates but documents no SRT import, so it is described, not ranked.
What is the difference between burned-in and soft subtitles?
Burned-in subtitles (also called hardcoded subtitles or open captions) are drawn into the video frames, so nobody can switch them off. Soft subtitles, or closed captions, travel as a separate track or file that a player can show or hide. W3C's wording: open captions "are always displayed and cannot be turned off."
| Burned-in (open captions) | Soft (closed captions) | |
|---|---|---|
| Who can turn them off | Nobody | The viewer, in a player that supports them |
| Where you need them | Feeds and players with no caption control | Platforms that take a caption file, such as YouTube (.srt) |
| Editability | Fix the file, then burn and export again | Edit the text file; the video is untouched |
| Searchability | Pixels only: "images of text embedded in video" (WCAG) | Still text; some players build interactive transcripts from it (W3C) |
Both count toward accessibility: W3C lists open (G93) and closed (G87) captions as sufficient techniques for WCAG 1.2.2. See captions vs subtitles vs SDH and auto captions, ADA and WCAG. This is not legal advice.
What should you check in the SRT file before you burn it in?
Check timing, encoding and line length first, because a burned-in mistake can only be fixed by exporting again. Play the video against the file from start to finish, save it as UTF-8, and keep each cue to one or two short lines.
- Timing. If every cue is off by the same amount, shift the whole file: our free SRT converter shifts timing and converts SRT and VTT (it does not burn subtitles in).
- Encoding. In our run a Latin-1 file stopped FFmpeg with "Invalid UTF-8 in decoded subtitles text" until we used
subtitles=subs.srt:charenc=CP1252. HandBrake has a "Char Code" dropdown for the same job. - Line length. Netflix's English style guide sets 42 characters per line and two lines at most; the BBC equates 37 characters on 16:9 with about 25 on 9:16. More in SRT vs VTT.
How do I permanently add subtitles to a video?
To add subtitles to a video permanently, use a tool that renders the subtitle text into the frames and writes a new video file. FFmpeg does it with one command, HandBrake and Kdenlive from menus, and Kapwing or VEED in a browser. Every route re-encodes the picture because, as FFmpeg's manual says, "filters work on decoded frames."
The order below is an editorial judgment from each tool's documentation, not a lab comparison.
Method 1: Burn subtitles with FFmpeg
- Check your build. Run
ffmpeg -h filter=subtitles; the filter needs a build configured with--enable-libass. Homebrew's defaultffmpeg9.0.1 on our Mac lacked it, and the burn command stopped at "No option name near 'subs.srt'". Homebrew'sffmpeg-fullformula lists libass. - Burn with the default style. In the folder that holds both files, run:
ffmpeg -i input.mp4 -vf "subtitles=subs.srt" -c:a copy output.mp4
-c:a copy keeps the audio as it is. Our output had H.264 video, the original AAC audio and no subtitle stream: white Arial text outlined in black, bottom center. A VTT file worked the same way.
- Set the font, size and position with
force_style:
ffmpeg -i input.mp4 -vf "subtitles=subs.srt:force_style='Fontname=Arial,Fontsize=20,PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,Outline=2,MarginV=30'" -c:a copy output.mp4
The documentation says only that force_style takes "ASS style format KEY=VALUE couples." To list the keys, run ffmpeg -i subs.srt subs.ass and read its Format and Style lines: our defaults were Arial, size 16, on a 384 × 288 canvas. Sizes and margins are measured on that canvas, not in pixels: on a 1080 × 1920 clip, Fontsize=9 kept a 44-character line on one line and MarginV=100 lifted it 35% up the frame. Colors run alpha, blue, green, red.
- Rename awkward files. An apostrophe, comma or square bracket in the subtitle filename broke the command in our run (FFmpeg reads them as filter syntax); spaces were fine.
Method 2: Burn subtitles with HandBrake
HandBrake is free and open source. Its documentation calls this "Hard Burn": subtitles "written on top of the image permanently."
- Open your video as the source.
- On the "Subtitles" tab, press "Tracks" and add your SRT file (the documentation does not print the menu label).
- Set "Char Code" to the file's encoding, usually UTF-8; the wrong code "will result in your output file having no subtitle track."
- Turn on burn-in for the track (its label is not documented either); HandBrake "can burn in 1 subtitle track."
- Start the encode.
From the command line: HandBrakeCLI -i input.mp4 -o output.mp4 --srt-file subs.srt --srt-codeset UTF-8 --srt-burn (the reference assumes 'latin1' without the codeset; we did not run it). No font or size controls are documented for SRT.
Method 3: Burn in subtitles with Kdenlive
Kdenlive is a free, open-source editor.
- Put the video on the timeline.
- Choose Sequence > Subtitles > Import Subtitle File (SRT, ASS, VTT or SBV).
- Style the text under Sequence > Subtitles > Manage Subtitles > Styles.
- Open File > Render, and under More Options leave "Embed subtitles instead of burning them in" unticked. The manual does not state its default, so look. Click Render to File.
Method 4: Burn subtitles online with Kapwing or VEED
- Kapwing. Upload the video, open the "Subtitles" tab, select "Upload SRT/VTT", then click "Export Project". Free exports carry a watermark and are limited to 4 minutes and 720p; Pro, $16 a month on annual billing, removes it.
- VEED. Upload the video, click Subtitles, choose Upload Subtitles File, style the text, then click "Done". Its watermark "is shown in the corner of videos that are created on the free plan"; its editor page says plans start at $9 a month billed yearly, or $19 billed monthly.
Both accept SRT or VTT. Kapwing says "Use it on any device"; we did not test either tool on a phone.
Can you burn subtitles with VLC?
Not with steps we can vouch for. VLC's documentation lists "You may wish to burn the subtitles on the video" as a reason to transcode, and the VideoLAN wiki has a soverlay option that "allows rendering subtitles directly on the video, while transcoding it." Neither gives a full procedure for an external SRT file, so we print no forum recipe. Use HandBrake or FFmpeg.
Loopdesk: when you have no subtitle file yet
Full disclosure: Loopdesk is our product, and it cannot burn in a file you already have (it documents no SRT or VTT import). Instead Aura, its AI agent, generates auto captions in 108 languages for you to correct, style and export burned in.
Which way to hardcode subtitles should you use?
Use HandBrake for menus and the default look, FFmpeg for control over font, size and position, and Kdenlive if you are editing the video anyway. Choose a browser tool when you cannot install software and can accept a free-plan watermark.
| Method | Cost | Watermark | Styling control | Runs on | Re-encodes video? |
|---|---|---|---|---|---|
| FFmpeg | Free, open source | None in our run | force_style or an ASS file | Linux, macOS, Windows | Yes |
| HandBrake | Free, open source | None documented | None documented for SRT | Linux, Mac, Windows | Yes, always |
| Kdenlive | Free, open source | None documented | Subtitle Manager styles | Linux, Windows, macOS, BSD | Yes |
| Kapwing | Free plan; Pro $16/month billed annually | On Free exports | Restyle before export | Browser | Yes |
| VEED | Free plan; paid plans from $9/month billed yearly | On the free plan | Font, color, size, position | Browser | Yes |
| Loopdesk (our product) | $19/month, or $15/month billed annually; no free plan or trial | None | 51 fonts, styles by prompt | Browser | Yes; no SRT import |
How do I burn an SRT file into an MP4?
To burn an SRT file into an MP4, give both files to a burn-in tool and export MP4. ffmpeg -i input.mp4 -vf "subtitles=subs.srt" -c:a copy output.mp4 writes an MP4 whose picture carries the text and whose audio is untouched. HandBrake writes MP4, MKV or WebM, and Kapwing downloads an MP4.
The source can be MKV or MOV too; see MP4 vs MOV vs MKV vs WebM.
Can I burn subtitles for free without a watermark?
Yes. FFmpeg, HandBrake and Kdenlive are free, open-source programs, and none of their documentation mentions a watermark or an export limit; our FFmpeg output showed only the subtitle text over the picture. Browser tools differ: Kapwing watermarks every Free export and VEED watermarks videos made on its free plan.
For editors with clean free exports, see free AI video editors with no watermark.
Should captions on Reels and TikTok be burned in?
Usually yes, when you want every viewer to see the same styled text: burned-in captions need no caption setting and survive downloads and re-posts. The cost is that viewers cannot turn them off or resize them. Instagram can also add automatic closed captions to a reel.
Instagram's Help Center says it "uses speech recognition technology to automatically create closed captions," shown "as text at the bottom," so check how they sit with yours. TikTok's Help Center did not load from our location; its options are unconfirmed. YouTube Studio takes an .srt file through "Upload file," but "No style info (markup) is recognized." See our Reels pre-publish checklist.
How do you keep burned-in subtitles readable?
Use large, high-contrast text, short lines and a position clear of both the action and the app's buttons. Viewers cannot restyle burned-in text, so it has to work on the smallest screen. Check a frame from the brightest and the busiest shot before the full export.
- Size. Netflix sizes text by the "ability to fit 42 characters across screen"; go as large as your line length allows.
- Contrast. The BBC types most subtitles "in white text on a black background to ensure optimum legibility." WCAG's minimum for text and images of text is 4.5:1 (3:1 for large text).
- Position. On 9:16 video the BBC keeps subtitles within the central 75% of the height, placed "a little higher up." Apps cover more: our Reels checklist treats the top 14% and bottom 35% as approximate keep-out zones.
For styling on social video, see how to add auto captions to any video.
Where does Loopdesk fit?
Loopdesk (full disclosure: Loopdesk is our product) does not burn in a subtitle file you already have. It fits one step earlier: Aura transcribes a video in the browser, you review each line, and you export 1080p or 4K video with the captions burned in and no watermark, or SRT and VTT files instead.
It is paid and browser only: Creator Lite is $19 a month, or $15 a month billed annually, with no free plan or trial (pricing). If the SRT already exists, FFmpeg or HandBrake is the better choice: free, offline and made for this job. Related: the best auto caption generators and how to remove hardcoded subtitles.
Frequently Asked Questions
How do I permanently add subtitles to a video?
Burn them in: load the video and its SRT file into an encoder or editor and export a new file with the text drawn into the picture. FFmpeg, HandBrake and Kdenlive do this free; Kapwing and VEED watermark free-plan exports. Burned-in subtitles cannot be turned off.
How do I burn an SRT file into an MP4?
With FFmpeg, run: ffmpeg -i input.mp4 -vf "subtitles=subs.srt" -c:a copy output.mp4. The picture is re-encoded with the text in it and the audio is copied. The build must include libass. HandBrake does the same from its Subtitles tab.
Can I burn subtitles for free without a watermark?
Yes. FFmpeg, HandBrake and Kdenlive are free, open-source programs whose documentation mentions no watermark or export limit. Browser tools differ: Kapwing watermarks every Free export and VEED watermarks videos made on its free plan.
What is the difference between burned-in and soft subtitles?
Burned-in (hardcoded, open) subtitles are drawn into the video frames, so they are always displayed and cannot be turned off. Soft (closed) subtitles are a separate track or file, such as SRT, that a player can show or hide.
Should captions on Reels and TikTok be burned in?
Usually yes, when you want every viewer to see the same styled text: burned-in captions need no caption setting and survive downloads and re-posts. Viewers cannot turn them off or resize them. Instagram can also add automatic closed captions to reels.
No subtitle file yet? Try Loopdesk - generate captions in 108 languages in your browser, correct every line, then burn them in or export SRT and VTT.