[Bf-extensions-cvs] [e45c150] master: After Effects export: rewrite function to get cameras for each frame

Damien Picard noreply at git.blender.org
Wed May 25 12:43:16 CEST 2022


Commit: e45c1506171c165a3f442c4fd95637faac69f993
Author: Damien Picard
Date:   Thu May 19 18:03:48 2022 +0200
Branches: master
https://developer.blender.org/rBACe45c1506171c165a3f442c4fd95637faac69f993

After Effects export: rewrite function to get cameras for each frame

Instead, get frame ranges for each camera. This will allow us to
export many animated cameras with appropriate frame ranges.

===================================================================

M	io_export_after_effects.py

===================================================================

diff --git a/io_export_after_effects.py b/io_export_after_effects.py
index 96a5609..fef9dba 100644
--- a/io_export_after_effects.py
+++ b/io_export_after_effects.py
@@ -40,36 +40,28 @@ from math import degrees
 from mathutils import Matrix, Vector, Color
 
 
-def get_active_cam_for_each_frame(scene, start, end):
-    """Create list of active camera for each frame in case active camera is set by markers"""
-    active_cam_frames = []
-    sorted_markers = []
-    markers = scene.timeline_markers
-    if markers:
-        for marker in markers:
-            if marker.camera:
-                sorted_markers.append([marker.frame, marker])
-        sorted_markers = sorted(sorted_markers)
-
-        if sorted_markers:
-            for frame in range(start, end + 1):
-                for m, marker in enumerate(sorted_markers):
-                    if marker[0] > frame:
-                        if m != 0:
-                            active_cam_frames.append(
-                                sorted_markers[m - 1][1].camera)
-                        else:
-                            active_cam_frames.append(marker[1].camera)
-                        break
-                    elif m == len(sorted_markers) - 1:
-                        active_cam_frames.append(marker[1].camera)
-    if not active_cam_frames:
-        if scene.camera:
-            # in this case active_cam_frames array will have length of 1. This
-            # will indicate that there is only one active cam in all frames
-            active_cam_frames.append(scene.camera)
-
-    return(active_cam_frames)
+def get_camera_frame_ranges(scene, start, end):
+    """Get frame ranges for each marker in the timeline
+
+    For this, start at the end of the timeline,
+    iterate through each camera-bound marker in reverse,
+    and get the range from this marker to the end of the previous range.
+    """
+    markers = sorted((m for m in scene.timeline_markers if m.camera is not None),
+                     key=lambda m:m.frame, reverse=True)
+
+    if len(markers) <= 1:
+        return [[[start, end], scene.camera],]
+
+    camera_frame_ranges = []
+    current_frame = end
+    for m in markers:
+        if m.frame < current_frame:
+            camera_frame_ranges.append([[m.frame, current_frame + 1], m.camera])
+            current_frame = m.frame - 1
+    camera_frame_ranges.reverse()
+    camera_frame_ranges[0][0][0] = start
+    return camera_frame_ranges
 
 
 class ObjectExport():



More information about the Bf-extensions-cvs mailing list