import sys import json def is_blacklisted(title): if any( map(lambda x: title.startswith(x), ["Inicio", "Reconhecimento", "Intervalo", "Mudan"]) ): return True if title in ["Fim"]: return True return False # technically incorrect, wrong fomula if we ever get to "days" # but I'm not expecting to have a timestamp larger than a few hours # currently youtube is limited to 12h def to_secs(time): times = [ int(x) for x in reversed(time.split(':')) ] p = 1 res = 0 for t in times: res += t*p p *= 60 return res def diff_times(time1, time2): return to_secs(time2) - to_secs(time1) splits = [] with open(sys.argv[1], 'r') as f: for l in f.readlines(): s = l.split() splits.append( { 'starttime': s[0], 'title': ' '.join(s[1:]) }) for i in range(len(splits)-1): splits[i]['endtime'] = splits[i+1]['starttime'] if len(sys.argv) > 3: base_name = sys.argv[3] else: # take the file name without the .mp4 base_name = sys.argv[2][:-4] for dog in splits: if is_blacklisted(dog['title']): continue fname = f'{base_name} - {dog["title"]}.mp4' if 'endtime' in dog: print ( f'ffmpeg -ss {dog["starttime"]} -i "{sys.argv[2]}" -t {diff_times(dog["starttime"], dog["endtime"])} -c:v copy -c:a copy "{fname}"' ) else: print ( f'ffmpeg -ss {dog["starttime"]} -i "{sys.argv[2]}" -c:v copy -c:a copy "{fname}"' )