Beispiel #1
0
def analyze(path, height=96, min_n_frames=25, max_n_frames=3000):
    analysis = Analysis()
    nframes = 0
    cur_is_hard = True

    prevframe = None
    prevprevframe = None
    for frame in numm.video_frames(path, height=height, fps=25):
        if nframes > min_n_frames and discontinuity(
                prevframe, frame) and discontinuity(prevprevframe, frame):
            # HARD CUT
            yield (analysis.pop(), cur_is_hard)
            nframes = 0
            cur_is_hard = True

        elif nframes >= max_n_frames:
            # SOFT CUT (max_n_frames)
            # XXX: bring back metric to segment on slow changes
            yield (analysis.pop(), cur_is_hard)
            cur_is_hard = False
            nframes = 0

        analysis.process(frame)
        nframes += 1
        prevprevframe = prevframe
        prevframe = frame
    yield (analysis.pop(), cur_is_hard)
Beispiel #2
0
def analyze(path, width=120, height=96, min_n_frames=25, max_n_frames=3000):
    analysis = Analysis()
    nframes = 0
    cur_is_hard = True

    prevframe  = None
    prevprevframe = None
    for frame in numm.video_frames(path, height=height, fps=25):
        if nframes>min_n_frames and discontinuity(prevframe, frame) and discontinuity(prevprevframe, frame):
            # HARD CUT
            yield (analysis.pop(), cur_is_hard)
            nframes = 0
            cur_is_hard = True

        elif nframes >= max_n_frames:
            # SOFT CUT (max_n_frames)
            # XXX: bring back metric to segment on slow changes
            yield (analysis.pop(), cur_is_hard)
            cur_is_hard = False
            nframes = 0

        analysis.process(frame)
        nframes += 1
        prevprevframe = prevframe
        prevframe = frame
    yield (analysis.pop(), cur_is_hard)
Beispiel #3
0
def serialize(videopath, directory=None, min_n_frames=25, max_n_frames=3000):
    import json, time

    t0 = time.time()

    if directory is None:
        directory = videopath + '.analysis'
    absdir = os.path.join(directory, 'abs')

    if not os.path.isdir(directory):
        os.makedirs(directory)
    if not os.path.isdir(absdir):
        os.makedirs(absdir)

    doc = []

    def cut_doc(ishard, start, duration):
        return {'start': start, 'duration': duration, 'hard': ishard}

    everyframe = EveryNSecs(outpattern=os.path.join(absdir, "mod_%d.png"),
                            nsecs=5)

    # FIXME: repeated code (so as to serialize & post-process ...)
    analysis = Analysis(everyframe=everyframe)
    nframes = 0
    ncuts = 0
    cur_is_hard = True

    prevframe = None
    firstframe = None
    count = 0
    for f_idx, frame in enumerate(
            numm.video_frames(videopath, height=96, fps=25)):
        if firstframe is None:
            firstframe = frame

        if nframes > min_n_frames and discontinuity(prevframe, frame):
            # HARD CUT
            doc.append(
                cut_doc(cur_is_hard, (f_idx - nframes) / 25.0, nframes / 25.0))
            analysis.serialize(os.path.join(directory, str(ncuts)))
            analysis.reset()
            firstframe = frame
            nframes = 0
            ncuts += 1
            cur_is_hard = True

        elif nframes >= max_n_frames:
            # SOFT CUT (max_n_frames)
            # XXX: bring back metric to segment on slow changes
            doc.append(
                cut_doc(cur_is_hard, (f_idx - nframes) / 25.0, nframes / 25.0))
            analysis.serialize(os.path.join(directory, str(ncuts)))
            analysis.reset()
            firstframe = frame
            cur_is_hard = False
            nframes = 0
            ncuts += 1

        analysis.process(frame)
        nframes += 1
        prevframe = frame
        count += 1

    doc.append(cut_doc(cur_is_hard, (count - nframes) / 25.0, nframes / 25.0))
    analysis.serialize(os.path.join(directory, str(ncuts)))
    analysis.reset()

    json.dump(doc, open(os.path.join(directory, 'video.json'), 'w'))

    dur = doc[-1]['start'] + doc[-1]['duration']
    dt = time.time() - t0
    ratio = dur / dt

    print 'analyzed a %ds video in %ds (%.2fx)' % (dur, dt, ratio)
Beispiel #4
0
def serialize(videopath, directory=None, min_n_frames=25, max_n_frames=3000):
    import json, time

    t0 = time.time()

    if directory is None:
        directory = videopath + '.analysis'
    absdir = os.path.join(directory, 'abs')

    if not os.path.isdir(directory):
        os.makedirs(directory)
    if not os.path.isdir(absdir):
        os.makedirs(absdir)

    doc = []
    def cut_doc(ishard, start, duration):
        return {'start': start,
                'duration': duration,
                'hard': ishard
                }

    everyframe= EveryNSecs(outpattern=os.path.join(absdir, "mod_%d.png"), nsecs=5)

    # FIXME: repeated code (so as to serialize & post-process ...)
    analysis = Analysis(everyframe=everyframe)
    nframes = 0
    ncuts = 0
    cur_is_hard = True

    prevframe  = None
    firstframe = None
    count = 0
    for f_idx, frame in enumerate(numm.video_frames(videopath, height=96, fps=25)):
        if firstframe is None:
            firstframe = frame

        if nframes>min_n_frames and discontinuity(prevframe, frame):
            # HARD CUT
            doc.append(cut_doc(cur_is_hard, (f_idx-nframes)/25.0, nframes/25.0))
            analysis.serialize(os.path.join(directory, str(ncuts)))
            analysis.reset()
            firstframe = frame
            nframes = 0
            ncuts += 1
            cur_is_hard = True

        elif nframes >= max_n_frames:
            # SOFT CUT (max_n_frames)
            # XXX: bring back metric to segment on slow changes
            doc.append(cut_doc(cur_is_hard, (f_idx-nframes)/25.0, nframes/25.0))
            analysis.serialize(os.path.join(directory, str(ncuts)))
            analysis.reset()
            firstframe = frame
            cur_is_hard = False
            nframes = 0
            ncuts += 1

        analysis.process(frame)
        nframes += 1
        prevframe = frame
        count += 1

    doc.append(cut_doc(cur_is_hard, (count-nframes)/25.0, nframes/25.0))
    analysis.serialize(os.path.join(directory, str(ncuts)))
    analysis.reset()

    json.dump(doc, open(os.path.join(directory, 'video.json'), 'w'))

    dur = doc[-1]['start'] + doc[-1]['duration']
    dt = time.time() - t0
    ratio = dur / dt

    print 'analyzed a %ds video in %ds (%.2fx)' % (dur, dt, ratio)