Skip to content
All guides

How to Burn Subtitles Into a Video: Hardsubs vs Softsubs

The difference between hardcoded (burned-in) and soft subtitles, when to use each, and step-by-step ways to burn SRT or ASS captions into a video with FFmpeg, HandBrake or your video editor.

  • burn-in
  • hardsub
  • ffmpeg

“Burning in” subtitles means drawing them permanently into the video picture, so they’re visible everywhere the video plays. It’s the standard approach for short-form social video and a common requirement for clips shared in chats, presentations and ads. But it’s not always the right choice — sometimes a separate subtitle track is better.

This guide explains hardsubs vs softsubs, then walks through burning captions in with the most common tools.

Hardsubs vs softsubs

Softsubs (soft subtitles) are stored separately from the picture: either as a sidecar file next to the video (video.srt) or as a subtitle track inside the container (MKV, MP4). The player renders them on top of the video at playback time, and the viewer can turn them on or off or choose a language.

Hardsubs (hardcoded or burned-in subtitles) are part of the video frames. Once rendered, they’re pixels like everything else in the shot.

SoftsubsHardsubs
Viewer can toggleYesNo
Multiple languagesYes, multiple tracksOne per video file
Editable after exportYes, just edit the fileNo, re-export the video
Look identical everywhereNo, depends on playerYes
Custom fonts, colours, animationLimitedAnything you can design
Works on any platform or appNoYes
Requires re-encodingNoYes
Accessible to screen readers / searchText is availableText is just pixels

When to use softsubs

  • Uploading to YouTube, Vimeo or your own site, where a caption track is supported and viewers expect to toggle it.
  • Offering multiple languages.
  • Delivering files to a broadcaster, distributor or client who asked for a subtitle file.
  • When you want the caption text to be searchable and readable by assistive technology.

When to burn in

  • TikTok, Instagram Reels, YouTube Shorts and other feeds where styled captions are part of the format.
  • Videos shared in messaging apps, presentations or social posts where you can’t attach a subtitle file.
  • Ads that autoplay muted.
  • When the caption design — font, colour, word highlighting, position — matters.

Many creators do both: burn styled captions into the video and upload a plain SRT to platforms that support it.

Before you burn: finalise the subtitles

Burning in is the last step. Once it’s done, fixing a typo means re-exporting the whole video. Before you render:

  • Proofread every line with the video playing.
  • Check timing, especially the start and end of the video. If it’s off, fix it first — see how to fix out-of-sync subtitles.
  • Check line length and position for the target platform. For vertical video, read captions for short-form vertical video.
  • Keep a copy of the subtitle file. You’ll need it for the next edit or a translated version.

Method 1: Burn subtitles with FFmpeg

FFmpeg is free, scriptable and the engine behind many other tools. Its subtitles filter uses libass to render captions.

Burn an SRT file

ffmpeg -i input.mp4 -vf "subtitles=subs.srt" \
  -c:v libx264 -crf 18 -preset medium -c:a copy output.mp4
  • -vf "subtitles=subs.srt" draws the captions onto the frames.
  • -c:v libx264 -crf 18 re-encodes the video. Burning in always requires re-encoding; lower CRF means higher quality and larger files.
  • -c:a copy keeps the audio as-is.

Style an SRT while burning

SRT has no styling, so FFmpeg uses defaults. You can override them with force_style, using ASS style field names:

ffmpeg -i input.mp4 -vf "subtitles=subs.srt:force_style='FontName=Arial,FontSize=20,Bold=1,PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,BorderStyle=1,Outline=2,Alignment=2,MarginV=60'" \
  -c:v libx264 -crf 18 -c:a copy output.mp4

Two gotchas:

  • For SRT input, libass scales sizes against a small default script resolution rather than your video’s pixel size, so FontSize and MarginV values look smaller than you might expect. Adjust by eye with a short test render.
  • ASS colours are &HAABBGGRR — blue, green, red order — so yellow is &H0000FFFF.

Burn an ASS file

For real control — exact positioning, word highlighting, boxes, fades — design the captions as an ASS file with a script resolution that matches your video, then burn it:

ffmpeg -i input.mp4 -vf "ass=subs.ass" -c:v libx264 -crf 18 -c:a copy output.mp4

With PlayResX: 1080 and PlayResY: 1920 in the ASS header, sizes and positions map directly onto a vertical 1080×1920 frame.

Test on a short section first

Rendering a long video to check styling wastes time. Render 10 seconds instead:

ffmpeg -i input.mp4 -ss 00:00:30 -t 10 -vf "subtitles=subs.srt" -c:v libx264 -crf 23 -c:a copy test.mp4

Note that -ss comes after -i here. If you put it before the input (fast seeking), the video’s timestamps restart at zero for the clip, and the subtitle filter will show captions from the start of the file instead of the ones for that section.

Path and font issues

  • File paths inside the filter need escaping. Paths with spaces, colons (Windows drive letters) or apostrophes are the usual culprits — the simplest fix is to run FFmpeg from the folder containing the subtitle file and use a plain relative name.
  • If a font isn’t found, libass falls back to another. Install the font on the system, or point to a folder with subtitles=subs.srt:fontsdir=./fonts.

Method 2: HandBrake

HandBrake is a free GUI encoder that can burn in subtitles without the command line:

  1. Open your video.
  2. Go to the Subtitles tab and choose Import Subtitle (SRT or ASS).
  3. Tick Burn In for that track.
  4. Choose your video preset and start the encode.

HandBrake renders SRT with a default style and keeps ASS styling, so design in ASS if appearance matters.

Method 3: Your video editor

Most editors can create captions on a dedicated track and burn them in at export:

  • Adobe Premiere Pro: import or create captions on a captions track, style them, then in the export settings choose to burn captions into the video.
  • DaVinci Resolve: import the SRT onto a subtitle track, then on the Deliver page enable subtitle export and choose to burn them into the video.
  • CapCut and similar mobile editors: auto-captions are burned in automatically on export.

Editors are convenient if the project already lives there. The downside is that styling options and export flags vary between versions, and fixing many timing problems inside an editor timeline can be slow.

Adding softsubs instead

If you decide a toggleable track is better, you can add subtitles to a container without re-encoding:

# MKV: keeps SRT as-is
ffmpeg -i input.mp4 -i subs.srt -map 0 -map 1 -c copy output.mkv

# MP4: subtitles must be converted to mov_text
ffmpeg -i input.mp4 -i subs.srt -map 0 -map 1 -c copy -c:s mov_text \
  -metadata:s:s:0 language=eng output.mp4

This is fast because the video and audio are copied, not re-encoded. Player support for embedded MP4 subtitles varies, so for web delivery a sidecar WebVTT file is usually more reliable.

Quality tips for burned-in captions

  • Render at the final resolution. Burning in at 720p and upscaling later makes text soft.
  • Use a decent bitrate. Sharp text edges suffer with aggressive compression; a slightly lower CRF helps.
  • Leave room for platform UI on vertical video, so the app’s buttons don’t cover your captions.
  • Check on a phone before posting.

Burning in is where CutMySub is headed too: style captions for 9:16, preview them inside safe areas and render the final video in the browser. See what’s coming.

· srt

How to Split or Merge SRT Files Without Breaking the Timing

Step-by-step guide to splitting an SRT file at a timestamp, merging several SRT parts into one, and combining two subtitle tracks — with the offset and renumbering rules that keep everything in sync.

Back to all guides