Ubuntu – How to embed subtitles into a movie file

software-recommendationsubtitle

My TV can only play subtitles if they are embedded into the file (eg a MKV or hardcoded over the video).

So given a film in a format (eg MP4) and a subtitle as something like a SRT, how can I combine them into something my TV can play?

Best Answer

Short answer

You could use mkvmerge (apt-get install mkvtoolnix) to create a Matroska container and include the subtitles in the output:

mkvmerge -o output.mkv input.mp4 subtitle0.srt subtitle1.srt

This does not require re-encoding, so it is pretty fast.

Further customization

You may set the language and name of each subtitle track:

mkvmerge -o output.mkv input.mp4 \
    --language 0:en --track-name 0:English english_subtitles.srt
    --language 0:es --track-name 0:EspaƱol spanish_subtitles.srt

Note that we used for both languages the same track ID (0:), which corresponds to the input video track.

The --language needs to be properly encoded. You can list all allowed ISO 639-2 and ISO 639-1 codes with:

mkvmerge --list-languages

Other useful features

You may also set the title of the output video with:

--title "Your title"

We can check how all subtitles were added to the output:

$ mkvmerge -i output.mkv
File 'output.mkv': container: Matroska
Track ID 0: video (MPEG-4p10/AVC/H.264)
Track ID 1: audio (AAC)
Track ID 2: subtitles (SubRip/SRT)
Track ID 3: subtitles (SubRip/SRT)

If you really want to "burn" the subtitles in the video, you may use ffmpeg instead.