#!/usr/bin/env python3 import json import os.path import os import subprocess as sp import sys import time def has_subtitles(fname) -> bool: base, _ = os.path.splitext(fname) if os.path.exists(base + '.srt') or \ os.path.exists(base + '.en.srt') or \ os.path.exists(base + '.english.srt') or \ os.path.exists(base + '.stt') or \ os.path.exists(base + '.en.stt') or \ os.path.exists(base + '.english.stt') or \ os.path.exists(base + '.sub'): return True out = sp.check_output(['ffprobe', '-v', 'quiet', '-print_format', 'json', '-show_format', '-show_streams', fname], stderr=sp.STDOUT) for stream in json.loads(out)['streams']: if stream['codec_type'] == 'subtitle': return True return False check_endings = {'.mkv', '.mpg', '.avi', '.mp4', '.m4v', '.mov'} for dirpath, dirnames, fnames in os.walk(sys.argv[1]): for name in fnames: fname = os.path.join(dirpath, name) _, ext = os.path.splitext(fname) if ext in check_endings: if not has_subtitles(fname): print(fname) sp.check_call(['./make-subtitles.sh', fname])