Macos – How to add and remove subtitles in an MKV file

macosmatroskasubtitlesvideo

I have a good quality MKV file that has several subtitle options. I want to add an additional subtitle file to the list. I'm using OSX.

Some search online led me to use video converters, and basically re-encode the movie into a new file. That seems really overkill to me. Plus I may loose the previous subtitles, and some image quality along the way.

Best Answer

Removing subtitles:

mkvmerge -o output.mkv input.mkv -S # remove all subtitle tracks
mkvmerge -o output.mkv input.mkv -s 3,4 # remove tracks 3 and 4
mkvmerge -o output.mkv input.mkv -s '!3' # remove all subtitle tracks except 3
mkvmerge -i input.mkv # show track numbers

Adding subtitles:

mkvmerge -o output.mkv input.mkv subs.srt
mkvmerge -o output.mkv input.mkv --language 0:ger --track-name 0:German subs.srt

Extracting subtitles:

mkvextract tracks input.mkv 3:subs.srt
for f in *.mkv; do
  sub=$(mkvmerge -i "$f" | awk '$4=="subtitles"{print;exit}')
  [[ $sub ]] || continue
  [[ $sub =~ S_TEXT/ASS ]] && ext=ass || ext=srt
  track=$(awk -F '[ :]' '{print $3}' <<< "$sub")
  mkvextract tracks "$f" "$track:${f%mkv}$ext"
done

mkvmerge and mkvextract can be installed with brew install mkvtoolnix.

Related Question