---
title: 'How to Add Subtitles to a Video with FFmpeg'
source: 'https://youtube.com/watch?v=a3BfFk2vXBg'
video_id: 'a3BfFk2vXBg'
date: 2026-07-28
duration_sec: 398
channel: 'Bannerbear'
---

# How to Add Subtitles to a Video with FFmpeg

> Source: [How to Add Subtitles to a Video with FFmpeg](https://youtube.com/watch?v=a3BfFk2vXBg)

## Summary

This video explains how to add subtitles to video files using FFmpeg, covering both hard (burned-in) and soft (embedded as a separate stream) subtitles. It provides step-by-step commands and explains the differences between the two methods.

### Key Points

- **Why Subtitles Matter** [00:00] — 83% of people watch videos with sound off, making subtitles essential for engagement.
- **Hard Subtitles Overview** [00:44] — Hard subtitles are permanently burned into video frames and cannot be removed.
- **SRT File Structure** [01:12] — An SRT file has four parts per entry: index number, start/end timestamps, text, and a blank line.
- **FFmpeg Command for Hard Subtitles** [01:25] — Use `-vf subtitles=subtitle.srt` to burn SRT subtitles into the video.
- **Styling with ASS Format** [01:59] — Convert SRT to ASS for control over font, size, color, alignment, etc., then apply with `-vf ass=subtitle.ass`.
- **Soft Subtitles Overview** [02:34] — Soft subtitles are embedded as a separate stream, allowing viewers to toggle them on/off.
- **FFmpeg Command for Soft Subtitles** [03:01] — Use `-c copy -c:s mov_text` to embed SRT as a soft subtitle stream without re-encoding.
- **Adding Multiple Language Subtitles** [04:05] — Use `-map` flags to include multiple subtitle streams, e.g., English and Chinese.
- **Comparison: Hard vs Soft Subtitles** [05:24] — Hard subtitles are permanent and compatible everywhere; soft subtitles are toggleable and support multiple languages.

### Conclusion

FFmpeg provides flexible options for adding subtitles, with hard subtitles ensuring visibility and soft subtitles offering viewer control and multi-language support.

## Transcript

Hey, welcome back. Here's a stat that should make every video creator stop and think. 83% of people watch videos with sound off. They could be commuting, sitting in a quiet office,
multitasking, or simply don't have their headphones with them when they're outside. If there are no subtitles to follow along with, they're likely to scroll past it. If you're a developer building a video editing tool,
or anything that handles video, this is your phone to add subtitle support. In this video, I'm going to show you how to add subtitles to any video file using FFM tape,
a free, powerful command line tool. By the end of the video, you'll know how to add both hard and soft subtitles to videos. Let's start with hard subtitles. These subtitles are permanently
backed into the video frames. Once they're added they can't be removed. An SRT file has four parts per subtitle entry. An index number, a start and end
timestamp, the subtitle text, and a blank line to indicate the end of the subtitle. Make sure the SRT file is in the same folder as your video and run this
Here's what the command means. dash i inputs dot mp4 specifies the source video dash vf subtitles equals subtitle dot srt applies the subtitles filter
and specify the name of the srt subtitles file and finally output underscore srt dot mp4 specifies the name of the output file.
This adds the hard coded subtitle to the video using the default font style. If you want more styling control, convert your SRT file to an .ass file first using the command. The .ass format gives you control
over font name, size, color, bold, italic, alignment, margins and more. Once you've configured the styles in the file, apply it to your video with an AFF filter.
The styling will be applied to the subtitles, like how it's defined in the AFF file. Now, let's add soft subtitles. Unlike hard subtitles, these are not burned into the
video. They're embedded as a separate stream, so viewers can turn them on or off using their media player. This is great for accessibility and also for
supporting multiple languages. Before we start, rename your subtitle file to subtitle Then run this command Here the result You can see the subtitle stream is there in the player and you can switch it on or off
Let's break down the command that we just learned. Two files following "-i", are the video and subtitle files. "-ccopy", tells FFmpeg not to re-encode the video.
"-csmaz", converts the SRT stream to MOV underscore text format, which is what MP4 containers use.
And dash metadata SS0 language argument tags the subtitle stream as English using the ISO639 language code.
Basically, the command takes the video and embeds the subtitle file as a toggleable English subtitle stream without re-encoding the video, outputting it as output underscore English
dot mp4. Now let's add a Chinese subtitle to the video we just created. another file name subtitle.chi.srt with Chinese subtitles inside, we'll use
dash map flag to tell FFmpeg which streams to include. Dash map 0 includes everything from the previous output video including the English subtitle
stream and dash map one adds the Chinese SRP as an additional stream metadata ss one language tag marks the second subtitle stream as Chinese Let run the command
Now you can choose which subtitle to show. If you want to go from scratch and add both language subtitle streams in a single pass, here's the one-liner. Before we end
this video, let's quickly compare the two methods. Hard subtitles burn the text permanently into the video frames. You can't remove them and viewers can't toggle
them off, but they'll show up on any media player without any compatibility concerns. Use these when you need the subtitles to always be there. On the
other hand, SCUF subtitles are embedded as a separate stream. Viewers can turn them on or off and you can pack multiple languages into a single file. They're
also faster to process since FFmpeg skips re-encoding entirely. Use these when you're producing content for platforms that support subtitle tracks like a video app,
a streaming platform or a downloadable file where your audience speaks different languages. And that's a wrap. If you have any questions or any tutorials that you want to see,
drop them in the comments below. I'll see you for the next one.
