import os, os.path import glob import sys import getopt import shutil #this is the pulldown pattern for 48 fps #0 is unique frame, 1 is dupe VARICAM_PATTERN= "0000100001000010001" def get_file_prefix(compare_1, compare_2): """takes two filenames, and returns the bit at the beginning that's the same""" i=0 prefix = "" for i in range(0, len(compare_1)): if compare_1[i] != compare_2[i]: break i+=1 return compare_1[0:i] def find_offset(files, VARICAM_PATTERN): skip_seq = [] skip = 0 old_size = 0 for f in files: new_size = os.stat(f)[6] if new_size == old_size: skip_seq.append("1") skip = 0 else: skip_seq.append("0") skip += 1 old_size = new_size if len(skip_seq) >= len(VARICAM_PATTERN) * 2: skip_str = "".join(skip_seq) seek_offset = skip_str.find(VARICAM_PATTERN) if seek_offset > -1: seek_offset = seek_offset % len(VARICAM_PATTERN) print "found offset", seek_offset #print VARICAM_PATTERN[-seek_offset:] + VARICAM_PATTERN*10 #print skip_str return seek_offset def usage(): print "Takes a folder with an image sequence at 60p and extracts a 24p image sequence into output folder" print """Need some options: -i --input Directory containing files -o --output Directory where you want to put the new files""" try: opts, args = getopt.getopt(sys.argv[1:], "i:o:", ["input", "output"]) except: usage() sys.exit(1) if len(opts) < 2: usage() sys.exit(2) input_dir = None output_dir = None for o, a in opts: if o in ('-i', '--input'): input_dir = a elif o in ('-o', '--output'): output_dir = a if not os.path.isdir(input_dir): usage() sys.exit(3) if not os.path.isdir(output_dir): try: os.mkdir(output_dir) except: print "Couldn't create output folder" usage() sys.exit(4) files = glob.glob(os.path.join(input_dir, '*.tif')) files.sort() prefix = get_file_prefix(files[0], files[-1]) seek_offset = find_offset(files, VARICAM_PATTERN) pattern_offset = 0 - seek_offset if seek_offset == -1: print "error getting seek offset" sys.exit(1) old_size = 0 skip_seq = [] skip = 0 new_idx = 0 alternate = 0 for f in files: new_size = os.stat(f)[6] if new_size == old_size: if VARICAM_PATTERN[pattern_offset] != "1": print "Unexpected dupe frame,", f skip_seq.append(skip) #print skip, expected_skip_seq[pattern_offset] - 1 skip = 0 else: if VARICAM_PATTERN[pattern_offset] == "1": print "Expected a dupe frame,", f skip += 1 #print skip, expected_skip_seq[pattern_offset] old_size = new_size #print expected, pattern_offset if VARICAM_PATTERN[pattern_offset] == '1': #print "I would skip this (%i %i)" % (new_size, old_size) #print "offset" pass else: if alternate == 1: alternate = 0 else: alternate = 1 #TODO: Actually copy a file, rename it, whatever new_filename = "%s_%06d.tif" % (prefix, new_idx) new_filename = os.path.join(output_dir, new_filename) try: os.stat(new_filename) print "Error, file already exists! won't overwrite" sys.exit(4) except: pass new_idx += 1 #print "cp %s %s" % (f, new_filename) shutil.copyfile(f, new_filename) pattern_offset += 1 if pattern_offset >= len(VARICAM_PATTERN): pattern_offset = 0