How to extract subtitles from MP4 and MKV movies
MP4 and 3GP files
The free and cross-platform MP4Box only works with MP4 or 3GP containers. You can install it from the homepage. First, you want look at the different tracks and see which ID belongs to the subtitle track.
MP4Box -info input.mp4
Look at the ID next to the subtitle track. Then, based on the track ID <trackId>
you want to extract, call the following command:
MP4Box -raw <trackID> input.mp4
Or, to export to the commonly used SRT format:
MP4Box -srt <trackID> input.mp4
MKV files
In order to extract subtitles from Matroska (MKV) files, you need the free and open source mkvtoolnix
packages. They come for Windows and Linux, and on a Mac you can install them through Homebrew with brew install mkvtoolnix
.
Then, inspect the file:
mkvmerge -i input.mkv
This will list the tracks, for example like this:
File 'input.mkv': container: Matroska
Track ID 1: video (V_MPEG4/ISO/AVC)
Track ID 2: audio (A_AAC)
Track ID 3: subtitles (S_TEXT/UTF8)
Based on the ID of the track, call the following command, where <trackID>
is the one you identified above. <output>
is just a dummy name, you can use any you want.
mkvextract tracks input.mkv <trackID>:<output>.srt
So, in our case, that would have been:
mkvextract tracks input.mkv 3:subs.srt
Here is a solution for virtually any file format that is supported by ffmpeg
(even remote files are supported):
ffmpeg -i video.mp4 subtitle.srt
ffmpeg
is present in newer Ubuntu versions by default, for Mac OS X and Windows you'll have to install it (by downloading it from official web site or via homebrew).
Here video.mp4
is source local or remote video file name, and subtitle.srt
is output subtitle file name. It is important to specify file extension for output, since ffmpeg
detects what exactly you want to extract by it. That is, you can specify .mp3
file extension in order to extract mp3 audio from video file, or just set another video container in order to convert between formats.