How to Burn Subtitles Into a Video With FFmpeg
Burning subtitles means rendering them directly into the video frames, so they show up everywhere — unlike a soft subtitle track, which some players and platforms ignore.
Burning subtitles means rendering them directly into the video frames, so they show up everywhere — unlike a soft subtitle track, which some players and platforms ignore.
The command
ffmpeg -i input.mp4 -vf "subtitles=captions.srt:force_style='FontSize=24,PrimaryColour=&H00FFFFFF'" -c:a copy output.mp4What each flag does
| -i input.mp4 | The source video. |
| -vf "subtitles=..." | A video filter that renders the .srt file into the frames. |
| force_style=... | Optional — overrides the subtitle file's default font size and color. |
| -c:a copy | Copies the audio stream unchanged instead of re-encoding it, which is faster and lossless. |
Where this goes wrong
The single most common failure is a path or filename with spaces or a colon in it — the subtitles filter parses its argument with colons as separators, so subtitles=C:/captions.srt on Windows breaks unless you escape the colon. Keep the .srt file in the same folder as the command and reference it by filename only.
If you want word-by-word instead of line-by-line
A standard .srt file shows subtitles in multi-word chunks, timed per line, not per word. FFmpeg can burn whatever is in the file — it doesn't generate word-level timing itself. Getting true word-by-word reveal requires a transcription step that outputs per-word timestamps (Whisper with word-level timestamps enabled is the common tool for this), then generating an .srt or .ass file with one entry per word before you run the burn command above.
Manually timed .srt files get old fast. The NULLFRAME kit generates word-by-word captions directly from your audio's real timestamps — no .srt file, no font wrangling.
Get the kitCommon questions
Does burning subtitles reduce video quality?+
-crf 18 or copy the original bitrate to avoid any loss.Can I style the subtitles (color, size, position)?+
force_style in the filter, using ASS-style parameters like FontSize, PrimaryColour, and Alignment.Why do my subtitles show a box or wrong font?+
fontsdir.