import csv, sys, argparse from timecode import timecode_tosecs from math import floor from urllib.parse import urlparse import os def url_filename (url): p = urlparse(url) return os.path.split(p.path)[1] def to_cmd (edl, framerate): def s2f (t, framerate=args.framerate): if t == None: return None return floor(framerate*timecode_tosecs(t)) def cmdify (edit): if edit['end']: return '"{0}" in={1} out={2}'.format(url_filename(edit['url']), s2f(edit['start']), s2f(edit['end'])) else: return '"{0}" in={1}'.format(url_filename(edit['url']), s2f(edit['start'])) return "melt " + " ".join([cmdify(edit) for edit in edl]) ap = argparse.ArgumentParser("srt to melt command") ap.add_argument("--framerate", type=float, default=25.0) ap.add_argument("--output", default="edit.mp4") ap.add_argument("--profile", default="quarter_pal_wide") args = ap.parse_args() outf = csv.writer(sys.stdout) rows = [] for row in csv.DictReader(sys.stdin): rows.append(row) cmd = to_cmd(rows, args.framerate) cmd += f" -profile {args.profile} -consumer avformat:{args.output}" print (cmd)