| import bpy
import os
import os.path
import re
def build_directory_dictionary(scn):
    """
    :param scn:
    :return: a dictionary mapping from image sequence directory to the strip that references the directory
    """
    rval = {}
    for strip in scn.sequence_editor.sequences_all:
        if strip.type == 'IMAGE':
            rval[strip.directory] = strip
    return rval
def end_of_channel(channel, scn):
    """
    :param channel:
    :param scn:
    :return: the frame number after the last strip in channel
    """
    rval = 1
    for strip in scn.sequence_editor.sequences:
        if channel != strip.channel:
            continue # it is in a different channel, skip it
        t = strip.frame_start + strip.frame_final_duration
        print("%s in %d ends %d"%(strip.name, strip.channel, t))
        if (t>rval):
            rval = t
    return rval
def make_strip_from(dirname, pngs, scn):
    name = os.path.basename(dirname)
    channel = 3
    t = end_of_channel(channel, scn)
    # make a beginning still to give the viewer's eyeballs a break.
    strip0 = scn.sequence_editor.sequences.new_image(name+" pre", os.path.join(dirname, pngs[0]), channel, t)
    strip0.frame_final_duration = scn.render.fps
    t = t + strip0.frame_final_duration
    # now we go into the animation
    strip = scn.sequence_editor.sequences.new_image(name, os.path.join(dirname, pngs[0]), channel, t)
    for str in pngs[1:]:
        strip.elements.append(str)
    t = t + strip.frame_final_duration
    # and finish by holding on the final image.
    strip9 =scn.sequence_editor.sequences.new_image(name+" post", os.path.join(dirname, pngs[-1]), channel, t)
    strip9.frame_final_duration = scn.render.fps
    # I hate bpy.ops.  It requires me to futz with editor state
    for s2 in scn.sequence_editor.sequences_all:
        s2.select = False
    strip0.select = True
    strip.select = True
    strip9.select = True
    bpy.ops.sequencer.meta_make()
    meta = scn.sequence_editor.active_strip
    meta.name = name
    # strip.update()
def make_strip_for(dirname, scn):
    """
    if dirname has some blender rendered PNGs in it, make an image strip from them
    :param dirname:
    :param scn:
    :return:
    """
    rx = re.compile(r"^\d{4}\.png$")
    pngs = []
    for name in os.listdir(dirname):
        if re.search(rx, name) is None:
            continue
        pngs.append(name)
    print("%s [%d]"%(dirname, len(pngs)))
    if 1> len(pngs):
        return # nothing to build a strip from
    pngs.sort()
    make_strip_from(dirname, pngs, scn)
def make_strips_for_all_in(dirname, scn, preexisting=None, predicate = lambda name: True):
    """iterate through all the subdirectories of dirname
    and make VSE strips for them if we don't have them in the scene already
    """
    if preexisting is None:
        preexisting = build_directory_dictionary(scn)
    for name in os.listdir(dirname):
        full = os.path.join(dirname, name)
        if preexisting.get(full+"/") is None:
            print("no strip for %s"%full)
            if (os.path.isdir(full)):
                make_strip_for(full, scn)
#
 | 
Blender python API quick-start
Syntax highlighting by Pygments.