[Bf-extensions-cvs] [887d5eb1] master: io_sequencer_edl: move to contrib: T63750
meta-androcto
noreply at git.blender.org
Fri May 24 03:50:37 CEST 2019
Commit: 887d5eb1672a9665f8384d8d2405dfaf8169935c
Author: meta-androcto
Date: Fri May 24 11:50:16 2019 +1000
Branches: master
https://developer.blender.org/rBA887d5eb1672a9665f8384d8d2405dfaf8169935c
io_sequencer_edl: move to contrib: T63750
===================================================================
D io_sequencer_edl/__init__.py
D io_sequencer_edl/import_edl.py
D io_sequencer_edl/parse_edl.py
===================================================================
diff --git a/io_sequencer_edl/__init__.py b/io_sequencer_edl/__init__.py
deleted file mode 100644
index 8d1d871c..00000000
--- a/io_sequencer_edl/__init__.py
+++ /dev/null
@@ -1,329 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-# <pep8 compliant>
-
-bl_info = {
- "name": "Import EDL",
- "author": "Campbell Barton",
- "version": (1, 0),
- "blender": (2, 65, 0),
- "location": "Sequencer -> Track View Properties",
- "description": "Load a CMX formatted EDL into the sequencer",
- "warning": "",
- "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"
- "Scripts/Import-Export/EDL_Import",
- "category": "Import-Export",
-}
-
-import bpy
-
-
-from bpy.props import (
- StringProperty,
- IntProperty,
- PointerProperty,
- )
-from bpy.types import Operator
-
-# ----------------------------------------------------------------------------
-# Main Operators
-
-
-class ReloadEDL(Operator):
- bl_idname = "sequencer.import_edl_refresh"
- bl_label = "Refresh Reels"
-
- def execute(self, context):
- import os
- from . import parse_edl
-
- scene = context.scene
- edl_import_info = scene.edl_import_info
-
- filepath = edl_import_info.filepath
- dummy_fps = 25
-
- if not os.path.exists(filepath):
- self.report({'ERROR'}, "File Not Found %r" % filepath)
- return {'CANCELLED'}
-
- elist = parse_edl.EditList()
- if not elist.parse(filepath, dummy_fps):
- self.report({'ERROR'}, "Failed to parse EDL %r" % filepath)
- return {'CANCELLED'}
-
- scene = context.scene
- edl_import_info = scene.edl_import_info
- bl_reels = edl_import_info.reels
-
- data_prev = {reel.name: (reel.filepath, reel.frame_offset)
- for reel in edl_import_info.reels}
-
- reels = elist.reels_as_dict()
- 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()
- for k in sorted(reels):
- reel = bl_reels.add()
- reel.name = k
- filepath, frame_offset = data_prev.get(k, (None, None))
- if filepath is not None:
- reel.filepath = filepath
- reel.frame_offset = frame_offset
-
- return {'FINISHED'}
-
-
-class FindReelsEDL(Operator):
- """Scan a path for missing reel files, """ \
- """ Matching by reel name and existing filename when set"""
- bl_idname = "sequencer.import_edl_findreel"
- bl_label = "Find Missing Reel Files"
- directory: StringProperty(
- subtype='DIR_PATH',
- )
-
- @staticmethod
- def missing_reels(context):
- import os
- scene = context.scene
- edl_import_info = scene.edl_import_info
- return [reel for reel in edl_import_info.reels
- if not os.path.exists(reel.filepath)]
-
- def execute(self, context):
- import os
-
- # 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 '.git'
- dirnames[:] = [d for d in dirnames if not d.startswith(".")]
- for filename in filenames:
- fileonly, ext = os.path.splitext(filename)
- ext_lower = ext.lower()
- if ext_lower in ext_check:
- yield os.path.join(dirpath, filename), fileonly
-
- # scene = context.scene
- # edl_import_info = scene.edl_import_info
-
- bl_reels = FindReelsEDL.missing_reels(context)
- assert(len(bl_reels))
-
- # Search is as follows
- # Each reel has a triple:
- # ([search_names, ...], [(priority, found_file), ...], bl_reel)
- bl_reels_search = [(set(), [], reel) for reel in bl_reels]
-
- # first get the search names...
- 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:
- reel_filepath = os.path.basename(reel_filepath)
- reel_filepath = os.path.splitext(reel_filepath)[0]
- reel_names_list.append(reel_filepath.lower())
-
- # when '_' are found, replace with space
- reel_names_list += [reel_filepath.replace("_", " ")
- for reel_filepath in reel_names_list
- 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:
- reel_files_found.append((0, filename))
- else:
- # check on partial match
- for r in reel_names:
- if fileonly.startswith(r):
- reel_files_found.append((1, filename))
- if fileonly.endswith(r):
- reel_files_found.append((2, filename))
-
- # apply back and report
- tot_done = 0
- tot_fail = 0
- for reel_names, reel_files_found, reel in bl_reels_search:
- if reel_files_found:
- # make sure partial matches end last
- reel_files_found.sort()
- reel.filepath = reel_files_found[0][1]
- tot_done += 1
- else:
- tot_fail += 1
-
- self.report({'INFO'} if tot_fail == 0 else {'WARNING'},
- "Found %d clips, missing %d" % (tot_done, tot_fail))
-
- return {'FINISHED'}
-
- def invoke(self, context, event):
- import os
- scene = context.scene
- edl_import_info = scene.edl_import_info
-
- if not FindReelsEDL.missing_reels(context):
- self.report({'INFO'},
- "Nothing to do, all reels point to valid files")
- return {'CANCELLED'}
-
- # default to the EDL path
- if not self.directory and edl_import_info.filepath:
- self.directory = os.path.dirname(edl_import_info.filepath)
-
- wm = context.window_manager
- wm.fileselect_add(self)
- return {"RUNNING_MODAL"}
-
-
-class ImportEDL(Operator):
- """Import an EDL into the sequencer"""
- bl_idname = "sequencer.import_edl"
- bl_label = "Import Video Sequence (.edl)"
-
- def execute(self, context):
- import os
- from . import import_edl
- scene = context.scene
- edl_import_info = scene.edl_import_info
-
- filepath = edl_import_info.filepath
- reel_filepaths = {reel.name: reel.filepath
- for reel in edl_import_info.reels}
- reel_offsets = {reel.name: reel.frame_offset
- for reel in edl_import_info.reels}
-
- if not os.path.exists(filepath):
- self.report({'ERROR'}, "File Not Found %r" % filepath)
- return {'CANCELLED'}
-
- msg = import_edl.load_edl(
- scene, filepath,
- reel_filepaths, reel_offsets,
- edl_import_info.frame_offset)
-
- if msg:
- self.report({'WARNING'}, msg)
-
- return {'FINISHED'}
-
-
-# ----------------------------------------------------------------------------
-# Persistent Scene Data Types (store EDL import info)
-
-class EDLReelInfo(bpy.types.PropertyGroup):
- name: StringProperty(
- name="Name",
- )
- filepath: StringProperty(
- name="Video File",
- subtype='FILE_PATH',
- )
- frame_offset: IntProperty(
- name="Frame Offset",
- )
-
-
-class EDLImportInfo(bpy.types.PropertyGroup):
- filepath: StringProperty(
- subtype='FILE_PATH',
- )
- reels: bpy.props.CollectionProperty(
- type=EDLReelInfo,
- )
- frame_offset: IntProperty(
- name="Global Frame Offset",
- )
-
-# ----------------------------------------------------------------------------
-# Panel to show EDL Import UI
-
-
-class SEQUENCER_PT_import_edl(bpy.types.Panel):
- bl_label = "EDL Import"
- bl_space_type = 'SEQUENCE_EDITOR'
- bl_region_type = 'UI'
-
- def draw(self, context):
- layout = self.layout
-
- scene = context.scene
- edl_import_info = scene.edl_import_info
-
- layout.operator(ImportEDL.bl_idname)
-
- col = layout.column(align=True)
- col.prop(edl_import_info, "frame_offset")
- col.prop(edl_import_info, "filepath", text=
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list