[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4145] trunk/py/scripts/addons/ io_sequencer_edl: fixes to EDL import

Campbell Barton ideasman42 at gmail.com
Sun Jan 6 11:15:22 CET 2013


Revision: 4145
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4145
Author:   campbellbarton
Date:     2013-01-06 10:15:19 +0000 (Sun, 06 Jan 2013)
Log Message:
-----------
fixes to EDL import
- allow editmode 'a1', 'a2', 'a3'... etc
- allow editmode 'none'
- accept black as 'bl', 'bw', 'blk', 'black'
- black was being imported as grey
- add global frame offset option for importing
- fix error naming strips
- if a reel has an extension, match with the extension stripped as well --- so foobar.mov will find foobar.avi file.

Modified Paths:
--------------
    trunk/py/scripts/addons/io_sequencer_edl/__init__.py
    trunk/py/scripts/addons/io_sequencer_edl/import_edl.py
    trunk/py/scripts/addons/io_sequencer_edl/parse_edl.py

Modified: trunk/py/scripts/addons/io_sequencer_edl/__init__.py
===================================================================
--- trunk/py/scripts/addons/io_sequencer_edl/__init__.py	2013-01-06 08:41:42 UTC (rev 4144)
+++ trunk/py/scripts/addons/io_sequencer_edl/__init__.py	2013-01-06 10:15:19 UTC (rev 4145)
@@ -79,7 +79,7 @@
                      for reel in edl_import_info.reels}
 
         reels = elist.reels_as_dict()
-        reels = [k for k in reels.keys() if k != "bw"]
+        reels = [k for k in reels.keys() if k not in parse_edl.BLACK_ID]
 
         # re-create reels collection, keeping old values
         bl_reels.clear()
@@ -116,6 +116,7 @@
 
         # walk over .avi, .mov, .wav etc.
         def media_file_walker(path):
+            ext_check = bpy.path.extensions_movie | bpy.path.extensions_audio
             for dirpath, dirnames, filenames in os.walk(path):
                 # skip '.svn'
                 if dirpath.startswith("."):
@@ -123,10 +124,8 @@
                 for filename in filenames:
                     fileonly, ext = os.path.splitext(filename)
                     ext_lower = ext.lower()
-                    if ext_lower in bpy.path.extensions_movie:
+                    if ext_lower in ext_check:
                         yield os.path.join(dirpath, filename), fileonly
-                    elif ext_lower in bpy.path.extensions_audio:
-                        yield os.path.join(dirpath, filename), fileonly
 
         scene = context.scene
         edl_import_info = scene.edl_import_info
@@ -143,6 +142,11 @@
         for reel_names, reel_files_found, reel in bl_reels_search:
             reel_names_list = []
             reel_names_list.append(reel.name.lower())
+
+            # add non-extension version of the reel name
+            if "." in reel_names_list[-1]:
+                reel_names_list.append(os.path.splitext(reel_names_list[-1])[0])
+
             # use the filepath if set
             reel_filepath = reel.filepath
             if reel_filepath:
@@ -156,6 +160,12 @@
                                 if "_" in reel_filepath]
             reel_names.update(reel_names_list)
 
+        # debug info
+        print("Searching or %d reels" % len(bl_reels_search))
+        for reel_names, reel_files_found, reel in bl_reels_search:
+            print("Reel: %r --> (%s)" % (reel.name, " ".join(sorted(reel_names))))
+        print()
+
         for filename, fileonly in media_file_walker(self.directory):
             for reel_names, reel_files_found, reel in bl_reels_search:
                 if fileonly.lower() in reel_names:
@@ -227,7 +237,8 @@
 
         msg = import_edl.load_edl(
                 scene, filepath,
-                reel_filepaths, reel_offsets)
+                reel_filepaths, reel_offsets,
+                edl_import_info.frame_offset)
 
         if msg:
             self.report({'WARNING'}, msg)
@@ -258,8 +269,10 @@
     reels = bpy.props.CollectionProperty(
             type=EDLReelInfo,
             )
+    frame_offset = IntProperty(
+            name="Global Frame Offset",
+            )
 
-
 # ----------------------------------------------------------------------------
 # Panel to show EDL Import UI
 
@@ -278,6 +291,7 @@
         layout.operator(ImportEDL.bl_idname)
 
         col = layout.column(align=True)
+        col.prop(edl_import_info, "frame_offset")
         col.prop(edl_import_info, "filepath", text="")
         col.operator(ReloadEDL.bl_idname, icon='FILE_REFRESH')
 

Modified: trunk/py/scripts/addons/io_sequencer_edl/import_edl.py
===================================================================
--- trunk/py/scripts/addons/io_sequencer_edl/import_edl.py	2013-01-06 08:41:42 UTC (rev 4144)
+++ trunk/py/scripts/addons/io_sequencer_edl/import_edl.py	2013-01-06 10:15:19 UTC (rev 4145)
@@ -89,7 +89,7 @@
     return path[:path.rfind(".") + 1] + ext
 
 
-def load_edl(scene, filename, reel_files, reel_offsets):
+def load_edl(scene, filename, reel_files, reel_offsets, global_offset):
     """
     reel_files - key:reel <--> reel:filename
     """
@@ -123,7 +123,10 @@
     prev_edit = None
     for edit in edits:
         print(edit)
-        frame_offset = reel_offsets[edit.reel]
+        if edit.reel.lower() in parse_edl.BLACK_ID:
+            frame_offset = 0
+        else:
+            frame_offset = reel_offsets[edit.reel]
 
         src_start = int(edit.srcIn) + frame_offset
         src_end = int(edit.srcOut) + frame_offset
@@ -133,6 +136,10 @@
         rec_end = int(edit.recOut) + 1
         rec_length = rec_end - rec_start
 
+        # apply global offset
+        rec_start += global_offset
+        rec_end += global_offset
+
         # print src_length, rec_length, src_start
 
         if edit.m2 is not None:
@@ -148,16 +155,17 @@
 
         strip = None
         final_strips = []
-        if edit.reel.lower() == "bw":
+        if edit.reel.lower() in parse_edl.BLACK_ID:
             strip = sequence_editor.sequences.new_effect(
-                    name="Wipe",
+                    name="Color",
                     type='COLOR',
                     start_frame=rec_start,
+                    end_frame=rec_start + max(1, rec_length),
                     channel=track + 1)
             strip_list.append(strip)
-
-            strip.frame_duration = rec_length  # for color its simple
             final_strips.append(strip)
+            strip.color = 0.0, 0.0, 0.0
+            
         else:
             path_full = reel_files[edit.reel]
             path_dironly, path_fileonly = os.path.split(path_full)
@@ -272,7 +280,7 @@
         if final_strips:
             for strip in final_strips:
                 # strip.frame_duration = length
-                final_strip.name = edit.as_name()
+                strip.name = edit.as_name()
                 edit.custom_data[:] = final_strips
                 # track = not track
                 prev_edit = edit

Modified: trunk/py/scripts/addons/io_sequencer_edl/parse_edl.py
===================================================================
--- trunk/py/scripts/addons/io_sequencer_edl/parse_edl.py	2013-01-06 08:41:42 UTC (rev 4144)
+++ trunk/py/scripts/addons/io_sequencer_edl/parse_edl.py	2013-01-06 10:15:19 UTC (rev 4145)
@@ -223,9 +223,9 @@
 enum += 1
 
 EDIT_DICT = {
+    "none": 0,  # TODO, investigate this more.
     "v": EDIT_VIDEO,
     "a": EDIT_AUDIO,
-    "a2": EDIT_AUDIO,  # TODO, what is this really?, FCP uses.
     "aa": EDIT_AUDIO_STEREO,
     "va": EDIT_VIDEO_AUDIO,
     "b": EDIT_VIDEO_AUDIO,
@@ -248,7 +248,14 @@
 KEY_OUT = enum  # K O
 enum += 1
 
+BLACK_ID = {
+    "bw",
+    "bl",
+    "blk",
+    "black",
+    }
 
+
 """
 Most sytems:
 Non-dropframe: 1:00:00:00 - colon in last position
@@ -290,6 +297,10 @@
     def edit_flags_to_text(flag):
         return "/".join([item for item, val in EDIT_DICT.items() if val & flag])
 
+    @staticmethod
+    def strip_digits(text):
+        return "".join(filter(lambda x: not x.isdigit(), text))
+
     def __init__(self, text=None, fps=25):
         # print text
         self.number = -1
@@ -351,7 +362,8 @@
         # AA/V can be an edit type
         self.edit_type = 0
         for edit_type in line[index].lower().split("/"):
-            self.edit_type |= EDIT_DICT[edit_type]
+            # stripping digits is done because we don't do 'a1, a2...'
+            self.edit_type |= EDIT_DICT[EditDecision.strip_digits(edit_type)]
         index += 1
 
         tx_name = "".join([c for c in line[index].lower() if not c.isdigit()])



More information about the Bf-extensions-cvs mailing list