Skip to content

Instantly share code, notes, and snippets.

Forked from bmaeser/subtitle-extract.txt
Last active June 3, 2024 07:51
Show Gist options
  • Save pavelbinar/20a3366b54f41e355d2745c89091ec46 to your computer and use it in GitHub Desktop.
Save pavelbinar/20a3366b54f41e355d2745c89091ec46 to your computer and use it in GitHub Desktop.
Extract subtitles from .mkv files on Mac OS X
Copy link

Extract subtitles from MKV on all subdirectories

from os import walk
import subprocess
import re
from os import path

tool_path = "/Applications/"
dir = "./"

def find_files(dir, ext):
    file_list = []
    for (dirpath, dirnames, filenames) in walk(dir):
        for filename in filenames:
            if filename.endswith(ext) and not filename.startswith('._'):
                file_list.append(dirpath + '/' + filename)
    return file_list

for file in find_files(dir, ".mkv"):
    basename = file.replace(".mkv", "")
    if path.exists(basename+".srt") or path.exists(basename+".ssa"):
        print("Already Exist, skipping...", basename)

    # Find subtitle track
    result =[tool_path + "mkvmerge", "-i", file], stdout=subprocess.PIPE, check=True)
    # SubRip .srt
    srt_track ='Track ID (\d+): subtitles \(SubRip/SRT\)', str(result.stdout)) 
    if srt_track:
        srt_track = "{}:{}.{}".format(, basename, "srt")

    # SubStation Alpha .ssa
    ssa_track ='Track ID (\d+): subtitles \(SubStationAlpha\)', str(result.stdout)) 
    if ssa_track:
        ssa_track = "{}:{}.{}".format(, basename, "ssa")

    if not srt_track and not ssa_track:
        print('No SRT track found!', file, str(result.stdout))

    # Extract SRT, [tool_path+"mkvextract", "tracks", file, srt_track, ssa_track])), check=True)


then run on terminal like:


Copy link

same issue exactly with an srt file of over 10MB with binary data.

Copy link

There's a Mac application called Subtitle Extractor in the App Store that does this

Thank you for this @larryy ! I needed an SRT to translate subtitles into another language and needed precise time codes, this app does it!

Copy link

kwccoin commented Apr 15, 2021

For SRT it is ok but for SUP like Japanese and Chinese, seems OCR is needed.

Copy link

Thank you so much, it worked !!

Copy link

Thanks a lot!

Copy link

Very simple and work, it's really work well. Thank you very much

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment