[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