All Tools View Categories About Contact Privacy

Subtitle Muxer

Embed an SRT into a video as a soft-sub track.

Runs entirely in your browser — no data is uploaded or stored.

Soft subs stay toggleable; use the burn-in tool if you need permanent captions.

About this tool & how to use it
  • Lossless stream copy: The generated command uses -c copy, so your video and audio are carried over untouched and there is no generational quality loss from adding captions.
  • Explicit subtitle codec: Adding -c:s srt tells ffmpeg exactly how to write the caption stream, avoiding the codec-mismatch errors that appear when a container's default subtitle codec does not match your source.
  • Language tagging: Whatever you type into Language code is written as stream metadata, which is what makes a player show "English" or "Spanish" in its subtitle menu instead of an unlabelled track.
  • Container control: The Output file extension decides the container, so you can choose MKV for maximum subtitle compatibility or MP4 when your delivery target insists on it.
  • Working defaults: Blank fields fall back to video.mp4, subs.srt, the language code eng and an output of muxed.mkv, so you can see a complete, valid command before entering real paths.
  • Shell-safe quoting: Every path in the command is quoted, which keeps filenames with spaces, apostrophes or accented characters from splitting into separate arguments.
  • Local and private: The tool composes a string in your browser; your master file is never read, uploaded or stored anywhere.
  1. Enter the path of the video you want to caption into the Video file box.
  2. Enter the caption file you want embedded into the Subtitle file box, usually a finished and proofread SRT.
  3. Type the ISO 639-2 code for the caption language into Language code, for example eng for English or spa for Spanish.
  4. Choose a destination in Output file, preferring an .mkv extension if you want the widest subtitle support.
  5. Press Run to build the command and confirm that the metadata argument shows the language code you expect.
  6. Copy the command or download the .txt, then paste it into a terminal on a machine with ffmpeg available.
  7. Open the muxed file in a player, switch the subtitle track on, and check that it is labelled correctly and stays in sync.

Example 1 - adding an English track. Picture and sound are copied straight through; only the caption stream is new.

Language code: eng

ffmpeg -i "lecture.mp4" -i "lecture-en.srt" -c copy -c:s srt -metadata:s:s:0 language=eng "lecture-muxed.mkv"

Example 2 - a Spanish deliverable. Only the subtitle file and language code change, but the player menu now reads Spanish instead of an unnamed track.

ffmpeg -i "lecture.mp4" -i "lecture-es.srt" -c copy -c:s srt -metadata:s:s:0 language=spa "lecture-es.mkv"

That metadata tag is small but decisive: without it viewers see Track 1 and have to guess which language they are switching on.

About Subtitle Muxer

The Subtitle Muxer generates the ffmpeg command that embeds an existing SRT into a video as a selectable soft subtitle track. Fill in Video file, Subtitle file, Language code and Output file, and you get a single command using -c copy -c:s srt plus a language metadata tag, ready to copy or download as .txt.

Soft subs are what viewers want when they have the choice: a muxed track can be switched on or off, restyled by the player and swapped between languages without a second copy of the video. Broadcasters, streaming teams and university media services need the text alongside the picture rather than painted into it, and accessibility policies often require captions to be toggleable.

The command takes two inputs and copies every stream instead of re-encoding. -c copy preserves the original video and audio bit for bit, -c:s srt forces the subtitle stream to be written in SRT form in the new container, and -metadata:s:s:0 language= stamps the first subtitle stream with the code you entered, which is what players read when labelling the track. Nothing is transcoded, so the mux runs at disk speed.

Use a three-letter ISO 639-2 code such as eng, spa or jpn, and prefer MKV for SRT streams. The page only builds text; no file is opened or uploaded.

Features

  • Lossless stream copy: The generated command uses -c copy, so your video and audio are carried over untouched and there is no generational quality loss from adding captions.
  • Explicit subtitle codec: Adding -c:s srt tells ffmpeg exactly how to write the caption stream, avoiding the codec-mismatch errors that appear when a container's default subtitle codec does not match your source.
  • Language tagging: Whatever you type into Language code is written as stream metadata, which is what makes a player show "English" or "Spanish" in its subtitle menu instead of an unlabelled track.
  • Container control: The Output file extension decides the container, so you can choose MKV for maximum subtitle compatibility or MP4 when your delivery target insists on it.
  • Working defaults: Blank fields fall back to video.mp4, subs.srt, the language code eng and an output of muxed.mkv, so you can see a complete, valid command before entering real paths.
  • Shell-safe quoting: Every path in the command is quoted, which keeps filenames with spaces, apostrophes or accented characters from splitting into separate arguments.
  • Local and private: The tool composes a string in your browser; your master file is never read, uploaded or stored anywhere.

How to Use

  1. Enter the path of the video you want to caption into the Video file box.
  2. Enter the caption file you want embedded into the Subtitle file box, usually a finished and proofread SRT.
  3. Type the ISO 639-2 code for the caption language into Language code, for example eng for English or spa for Spanish.
  4. Choose a destination in Output file, preferring an .mkv extension if you want the widest subtitle support.
  5. Press Run to build the command and confirm that the metadata argument shows the language code you expect.
  6. Copy the command or download the .txt, then paste it into a terminal on a machine with ffmpeg available.
  7. Open the muxed file in a player, switch the subtitle track on, and check that it is labelled correctly and stays in sync.

Examples

Example 1 - adding an English track. Picture and sound are copied straight through; only the caption stream is new.

Language code: eng

ffmpeg -i "lecture.mp4" -i "lecture-en.srt" -c copy -c:s srt -metadata:s:s:0 language=eng "lecture-muxed.mkv"

Example 2 - a Spanish deliverable. Only the subtitle file and language code change, but the player menu now reads Spanish instead of an unnamed track.

ffmpeg -i "lecture.mp4" -i "lecture-es.srt" -c copy -c:s srt -metadata:s:s:0 language=spa "lecture-es.mkv"

That metadata tag is small but decisive: without it viewers see Track 1 and have to guess which language they are switching on.

Benefits

  • Viewers stay in control: Toggleable captions let people turn text on for accessibility or a noisy room and off when they do not want it, which is something burned-in subtitles can never offer.
  • No quality cost: Because the mux copies streams instead of re-encoding, you add captions to a finished master without softening the picture or bloating the bitrate.
  • Fewer rejected deliveries: Correct language metadata is a routine QC checkpoint, and getting it right at mux time avoids a file bouncing back for a missing track label.
  • One file, several audiences: A single muxed master can serve multiple regions once you add tracks, cutting storage and simplifying asset management.
  • Runs in seconds: Stream copying is limited by disk speed rather than CPU, so even long-form content is muxed almost immediately.
  • Nothing uploaded: The command is assembled in your browser, keeping embargoed or private footage entirely on your own hardware.

Frequently Asked Questions

Soft vs hard subtitles?
This muxes a soft (toggleable) track; the video is not re-encoded.
Which language code?
Use ISO 639-2/B codes like eng, spa, fre, ger, jpn.
Do you run ffmpeg?
No, we output the command for you to run.
Is my file uploaded?
No, generation is local.