import os, argparse, subprocess memes = os.path.dirname(os.path.abspath(__file__)) home = memes.rpartition('\\')[0] def extractVideo(Id, fn, args): print(f'Executing "{home}/yt "{Id}" -f mp4"') cmd = subprocess.Popen(f'{home}/yt "{Id}" -f mp4 {args}') cmd.wait() print('Video downloaded') print('Extracting memes') print(f'Executing "py {memes}/memeExtractor.py "{fn}""') cmd = subprocess.Popen(f'py {memes}/memeExtractor.py "{fn}"') cmd.wait() print(f'Memes extracted to {memes}/{fn}') def cmd2str(cmd): return cmd.stdout.read().decode("utf-8") parser = argparse.ArgumentParser(description='Download commentawards video and extract memes') parser.add_argument('type', type=str, choices=['v', 'p'], help='Video (v) or playlist (p)') parser.add_argument('id', type=str, help='Id') parser.add_argument('args', default='', nargs='?', type=str, help='Additional arguments for downloader') args = parser.parse_args() print('Target set for ' + ('video ' if args.type == 'v' else 'playlist ') + args.id) if args.type == 'v': print('Retreving filename') print(f'Executing "{home}/yt"{args.id}" -f mp4 --get-filename {args.args}"') cmd = subprocess.Popen(f'{home}/yt "{args.id}" -f mp4 --get-filename {args.args}', stdout=subprocess.PIPE) cmd.wait() fn = cmd2str(cmd).strip('.mp4\n') print(f'Filename extracted ({fn}.mp4)') print(f'Downloading {args.id}') extractVideo(args.id, fn, args.args) os.unlink(fn + '.mp4') else: print('Retreving filenames') print(f'Executing "{home}/yt "{args.id}" -f mp4 --get-filename {args.args}"') cmd = subprocess.Popen(f'{home}/yt "{args.id}" -f mp4 --get-filename {args.args}', stdout=subprocess.PIPE) cmd.wait() fns = cmd2str(cmd) total = fns.count('\n') print(f'Filenames extracted ({total} filenames):') print(fns) fns = fns.strip('\n').split('\n') for i, val in enumerate(fns): fn = val.strip('.mp4') print(f'Downloading {i} of {total}') extractVideo(args.id, fn, f'--playlist-items {i} {args.args}') os.unlink(fn + '.mp4')