def generate_Quicktime(sequencePath, frameRate, filePath, res=None):
    firstFrame, lastFrame = fileOperations.getSequenceRange(sequencePath)
    firstFrame = str(int(firstFrame))
    if res == None:
        ffmpegStr = 'ffmpeg -start_number ' + firstFrame + ' -r ' + frameRate + ' -i "' + sequencePath + '" -qscale:v 4 -vcodec mjpeg -y "' + filePath + '"'
    else:
        ffmpegStr = 'ffmpeg -start_number ' + firstFrame + ' -r ' + frameRate + ' -i "' + sequencePath + '" -qscale:v 4 -vf "[in] scale=' + res + ' [out]" -vcodec mjpeg -y "' + filePath + '"'
    subprocess.call(ffmpegStr)
def getItemRange(item):
    #Takes: item as valid sequence pattern or video file path
    #Performs: call to get_frame_length or call to fileOperations.getSequenceRange
    #Returns: firstFrame, lastFrame as int, int
    if fileOperations.isPattern(item):
        return fileOperations.getSequenceRange(item)
    else:
        return 0, get_frame_length(item)
def getItemStream(filePath):
    #Takes: filePath as valid sequence or video file path
    #Performs: call to ffmpeg_getStream
    #Returns: dictionary of values from ffmpeg
    if fileOperations.isPattern(filePath):
        first, last = fileOperations.getSequenceRange(filePath)
        filePath = fileOperations.patternFill(filePath, first)
        return ffmpeg_getStream(filePath)
    else:
        return ffmpeg_getStream(filePath)
def get_frame_length(filePath):
    #Takes: filePath as valid video file path
    #Performs: call to ffmpeg_getStream
    #Returns: duration of video file as int
    if fileOperations.isPattern(filePath):
        first, last = fileOperations.getSequenceRange(filePath)
        return int(last) - int(first)
    else:
        stream = ffmpeg_getStream(filePath)
        if stream['codec_time_base'] == '1/24':
            FrameRate = 24000.0 / 1001.0  #Correct Math for 23.976023976
            FrameRate = 23.97602746  #ffmpeg's incorrect math
        else:
            FrameRate = float(stream['codec_time_base'].split('/', 1)[1])
        return int(float(stream['duration']) * FrameRate)
def generate_Proxies(sequencePath, proxyScale, filePath):
    firstFrame, lastFrame = fileOperations.getSequenceRange(sequencePath)
    firstFrame = int(firstFrame)
    lastFrame = int(lastFrame)
    srcPadding = sequencePath[re.search("%\d\dd", sequencePath).start():re.
                              search("%\d\dd", sequencePath).end()]
    destPadding = filePath[re.search("%\d\dd", filePath).start():re.
                           search("%\d\dd", filePath).end()]
    srcPaddingDigits = int(
        sequencePath[re.search("%\d\dd", sequencePath).start() +
                     1:re.search("%\d\dd", sequencePath).end() - 1])
    destPaddingDigits = int(
        filePath[re.search("%\d\dd", filePath).start() +
                 1:re.search("%\d\dd", filePath).end() - 1])
    for i in range(firstFrame, lastFrame + 1):
        srcPath = sequencePath.replace(srcPadding,
                                       str(i).zfill(srcPaddingDigits))
        destPath = filePath.replace(destPadding,
                                    str(i).zfill(destPaddingDigits))
        ffmpegStr = 'ffmpeg -v warning -i "' + srcPath + '" -vf "[in] scale=' + proxyScale + ' [out]" -y "' + destPath + '"'
        subprocess.call(ffmpegStr)