From 5a8e274829ba8171496aff1091f864fc393a998d Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Thu, 21 Dec 2017 17:13:39 -0800 Subject: [PATCH 01/44] Fixed a bug in Timeline's each_child. Added unit tests for the recursion behaviour of each_child. --- opentimelineio/schema/timeline.py | 2 +- tests/test_composition.py | 64 +++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/opentimelineio/schema/timeline.py b/opentimelineio/schema/timeline.py index 269adbd231..81bedef34f 100644 --- a/opentimelineio/schema/timeline.py +++ b/opentimelineio/schema/timeline.py @@ -81,7 +81,7 @@ def __repr__(self): def each_child( self, search_range=None, - descended_from_type=core.Composition + descended_from_type=core.Composable ): return self.tracks.each_child(search_range, descended_from_type) diff --git a/tests/test_composition.py b/tests/test_composition.py index a3c6f35c66..de5d6a478b 100755 --- a/tests/test_composition.py +++ b/tests/test_composition.py @@ -60,6 +60,70 @@ def test_parent_manip(self): co = otio.core.Composition(children=[it]) self.assertEqual(it._parent, co) + def test_each_child_recursion(self): + tl = otio.schema.Timeline(name="TL") + + tr1 = otio.schema.Track(name="tr1") + tl.tracks.append(tr1) + c1 = otio.schema.Clip(name="c1") + tr1.append(c1) + c2 = otio.schema.Clip(name="c2") + tr1.append(c2) + c3 = otio.schema.Clip(name="c3") + tr1.append(c3) + + tr2 = otio.schema.Track(name="tr2") + tl.tracks.append(tr2) + c4 = otio.schema.Clip(name="c4") + tr2.append(c4) + c5 = otio.schema.Clip(name="c5") + tr2.append(c5) + + st = otio.schema.Stack(name="st") + tr2.append(st) + c6 = otio.schema.Clip(name="c6") + st.append(c6) + tr3 = otio.schema.Track(name="tr3") + c7 = otio.schema.Clip(name="c7") + tr3.append(c7) + c8 = otio.schema.Clip(name="c8") + tr3.append(c8) + st.append(tr3) + + self.assertEqual(2, len(tl.tracks)) + self.assertEqual(3, len(tr1)) + self.assertEqual(3, len(tr2)) + self.assertEqual(2, len(st)) + self.assertEqual(2, len(tr3)) + + clips = list(tl.each_clip()) + self.assertEqual( + [c1, c2, c3, c4, c5, c6, c7, c8], + clips + ) + + all_tracks = list(tl.each_child( + descended_from_type=otio.schema.Track + )) + self.assertEqual( + [tr1, tr2, tr3], + all_tracks + ) + + all_stacks = list(tl.each_child( + descended_from_type=otio.schema.Stack + )) + self.assertEqual( + [st], + all_stacks + ) + + all_children = list(tl.each_child()) + self.assertEqual( + [tr1, c1, c2, c3, tr2, c4, c5, st, c6, tr3, c7, c8], + all_children + ) + class StackTest(unittest.TestCase): From 14ce2aaf20ac06d4ae10af338a9988d8b86b30e0 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Wed, 6 Sep 2017 17:01:04 -0700 Subject: [PATCH 02/44] Starting from scratch. --- contrib/adapters/advanced_authoring_format.py | 246 ++++++++++++++++++ .../contrib_adapters.plugin_manifest.json | 7 + 2 files changed, 253 insertions(+) create mode 100644 contrib/adapters/advanced_authoring_format.py diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py new file mode 100644 index 0000000000..4c9db6cfee --- /dev/null +++ b/contrib/adapters/advanced_authoring_format.py @@ -0,0 +1,246 @@ +# +# Copyright 2017 Pixar Animation Studios +# +# Licensed under the Apache License, Version 2.0 (the "Apache License") +# with the following modification; you may not use this file except in +# compliance with the Apache License and the following modification to it: +# Section 6. Trademarks. is deleted and replaced with: +# +# 6. Trademarks. This License does not grant permission to use the trade +# names, trademarks, service marks, or product names of the Licensor +# and its affiliates, except as required to comply with Section 4(c) of +# the License and to reproduce the content of the NOTICE file. +# +# You may obtain a copy of the Apache License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the Apache License with the above modification is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the Apache License for the specific +# language governing permissions and limitations under the Apache License. +# + +"""OpenTimelineIO Advanced Authoring Format (AAF) Adapter""" + +import sys +sys.path.append("/depts/tools/mpg/lib/python/pyaafosx") + +import aaf +import aaf.storage +import aaf.mob +import aaf.define +import aaf.component +import aaf.base + +import opentimelineio as otio + +def _get_name(item): + if hasattr(item, 'name'): + name = item.name + if name: + return name + return _get_class_name(item) + +def _get_class_name(item): + if hasattr(item,"class_name"): + return item.class_name + else: + return item.__class__.__name__ + +def _transcribe(item, parent=None, editRate=24): + result = None + metadata = {} + + if False: + pass + # if isinstance(item, list): + # self.extendChildItems(item) + + # elif isinstance(item, aaf.storage.File): + # self.extendChildItems([item.header]) + + # elif isinstance(item, aaf.storage.Header): + # self.extendChildItems([item.storage()]) + # self.extendChildItems([item.dictionary()]) + + # elif isinstance(item, DummyItem): + # self.extendChildItems(item.item) + + elif isinstance(item, aaf.storage.ContentStorage): + result = otio.schema.SerializableCollection() + + for mob in item.composition_mobs(): + child = _transcribe(mob, item) + if child is not None: + result.append(child) + + # TODO: Do we want these mixed in with the composition? + for mob in item.master_mobs(): + child = _transcribe(mob, item) + if child is not None: + result.append(child) + + # for mob in item.GetSourceMobs(): + # result.append(_transcribe(mob, item)) + + elif isinstance(item, aaf.mob.Mob): + result = otio.schema.Timeline() + + for slot in item.slots(): + child = _transcribe(slot, item) + if child is not None: + result.tracks.append(child) + + + # elif isinstance(item, aaf.dictionary.Dictionary): + # l = [] + # l.append(DummyItem(list(item.class_defs()), 'ClassDefs')) + # l.append(DummyItem(list(item.codec_defs()), 'CodecDefs')) + # l.append(DummyItem(list(item.container_defs()), 'ContainerDefs')) + # l.append(DummyItem(list(item.data_defs()), 'DataDefs')) + # l.append(DummyItem(list(item.interpolation_defs()), 'InterpolationDefs')) + # l.append(DummyItem(list(item.klvdata_defs()), 'KLVDataDefs')) + # l.append(DummyItem(list(item.operation_defs()), 'OperationDefs')) + # l.append(DummyItem(list(item.parameter_defs()), 'ParameterDefs')) + # l.append(DummyItem(list(item.plugin_defs()), 'PluginDefs')) + # l.append(DummyItem(list(item.taggedvalue_defs()), 'TaggedValueDefs')) + # l.append(DummyItem(list(item.type_defs()), 'TypeDefs')) + # self.extendChildItems(l) + # + # elif isinstance(item, aaf.mob.Mob): + # + # self.extendChildItems(list(item.slots())) + # + # elif isinstance(item, aaf.mob.MobSlot): + # self.extendChildItems([item.segment]) + # elif isinstance(item, aaf.component.NestedScope): + # self.extendChildItems(list(item.segments())) + # elif isinstance(item, aaf.component.Sequence): + # self.extendChildItems(list(item.components())) + # + # elif isinstance(item, aaf.component.SourceClip): + # ref = item.resolve_ref() + # name = ref.name + # if name: + # self.extendChildItems([name]) + # + # elif isinstance(item,aaf.component.OperationGroup): + # self.extendChildItems(list(item.input_segments())) + +# elif isinstance(item, pyaaf.AxSelector): +# self.extendChildItems(list(item.EnumAlternateSegments())) +# +# elif isinstance(item, pyaaf.AxScopeReference): +# #print item, item.GetRelativeScope(),item.GetRelativeSlot() +# pass +# +# elif isinstance(item, pyaaf.AxEssenceGroup): +# segments = [] +# +# for i in xrange(item.CountChoices()): +# choice = item.GetChoiceAt(i) +# segments.append(choice) +# self.extendChildItems(segments) +# +# elif isinstance(item, pyaaf.AxProperty): +# self.properties['Value'] = str(item.GetValue()) + # elif isinstance(item, (aaf.base.AAFObject,aaf.define.MetaDef)): + # pass + # + # elif isinstance(item, aaf.component.Component): + # pass + # + # else: + # self.properties['Name'] = str(item) + # self.properties['ClassName'] = str(type(item)) + # return + + elif isinstance(item, aaf.component.SourceClip): + result = otio.schema.Clip() + + length = item.length + result.source_range = otio.opentime.TimeRange( + otio.opentime.RationalTime(0,editRate), + otio.opentime.RationalTime(length,editRate) + ) + + elif isinstance(item, aaf.component.Filler): + result = otio.schema.Gap() + + elif isinstance(item, aaf.component.NestedScope): + result = otio.schema.Sequence() + + for segment in item.segments(): + child = _transcribe(segment, item) + if child is not None: + result.append(child) + + elif isinstance(item, aaf.component.Sequence): + result = otio.schema.Sequence() + + for component in item.components(): + child = _transcribe(component, item) + if child is not None: + result.append(child) + + elif isinstance(item, aaf.mob.TimelineMobSlot): + result = otio.schema.Sequence() + + child = _transcribe(item.segment, item) + if child is not None: + result.append(child) + + elif isinstance(item, aaf.component.Timecode): + pass + elif isinstance(item, aaf.component.Pulldown): + pass + elif isinstance(item, aaf.component.EdgeCode): + pass + elif isinstance(item, aaf.component.ScopeReference): + pass + + else: + # result = otio.core.Composition() + print("SKIPPING: {}: {} -- {}".format(type(item), item, result)) + + metadata["Name"] = _get_name(item) + metadata["ClassName"] = _get_class_name(item) + + if isinstance(item, aaf.component.Component): + metadata["Length"] = item.length + + if result is not None: + result.name = str(metadata["Name"]) + if not result.metadata: + result.metadata = {} + result.metadata["AAF"] = metadata + + return result + +def read_from_file(filepath): + + f = aaf.open(filepath) + + header = f.header + storage = f.storage + + print("F: {}".format(f)) + print("HEADER: {}".format(header)) + print("STORAGE: {}".format(storage)) + + topLevelMobs = list(storage.toplevel_mobs()) + + print("topLevelMobs: {}".format(topLevelMobs)) + + collection = _transcribe(storage) + # otio.schema.SerializableCollection() + # + # for mob in topLevelMobs: + # timeline = otio.schema.Timeline() + # timeline.name = mob.name + # collection.append(timeline) + + return collection + diff --git a/contrib/adapters/contrib_adapters.plugin_manifest.json b/contrib/adapters/contrib_adapters.plugin_manifest.json index 968928eb74..28721065e2 100644 --- a/contrib/adapters/contrib_adapters.plugin_manifest.json +++ b/contrib/adapters/contrib_adapters.plugin_manifest.json @@ -35,6 +35,13 @@ "execution_scope" : "in process", "filepath" : "burnins.py", "suffixes" : [] + }, + { + "OTIO_SCHEMA" : "Adapter.1", + "name" : "AAF", + "execution_scope" : "in process", + "filepath" : "advanced_authoring_format.py", + "suffixes" : ["aaf"] } ] } From 2455342fc038719f3ca530123ed6be553dd201e9 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Thu, 7 Sep 2017 18:15:16 -0700 Subject: [PATCH 03/44] Getting most of the structure and clip names... --- contrib/adapters/advanced_authoring_format.py | 53 +++++++++++++++---- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index 4c9db6cfee..14cabb1db3 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -41,6 +41,8 @@ def _get_name(item): name = item.name if name: return name + if isinstance(item, aaf.component.SourceClip): + return item.resolve_ref().name or "Untitled SourceClip" return _get_class_name(item) def _get_class_name(item): @@ -55,6 +57,7 @@ def _transcribe(item, parent=None, editRate=24): if False: pass + # if isinstance(item, list): # self.extendChildItems(item) @@ -77,10 +80,10 @@ def _transcribe(item, parent=None, editRate=24): result.append(child) # TODO: Do we want these mixed in with the composition? - for mob in item.master_mobs(): - child = _transcribe(mob, item) - if child is not None: - result.append(child) + # for mob in item.master_mobs(): + # child = _transcribe(mob, item) + # if child is not None: + # result.append(child) # for mob in item.GetSourceMobs(): # result.append(_transcribe(mob, item)) @@ -92,6 +95,8 @@ def _transcribe(item, parent=None, editRate=24): child = _transcribe(slot, item) if child is not None: result.tracks.append(child) + else: + print "NO CHILD?", slot # elif isinstance(item, aaf.dictionary.Dictionary): @@ -159,7 +164,7 @@ def _transcribe(item, parent=None, editRate=24): elif isinstance(item, aaf.component.SourceClip): result = otio.schema.Clip() - + length = item.length result.source_range = otio.opentime.TimeRange( otio.opentime.RationalTime(0,editRate), @@ -169,6 +174,12 @@ def _transcribe(item, parent=None, editRate=24): elif isinstance(item, aaf.component.Filler): result = otio.schema.Gap() + length = item.length + result.source_range = otio.opentime.TimeRange( + otio.opentime.RationalTime(0,editRate), + otio.opentime.RationalTime(length,editRate) + ) + elif isinstance(item, aaf.component.NestedScope): result = otio.schema.Sequence() @@ -176,6 +187,8 @@ def _transcribe(item, parent=None, editRate=24): child = _transcribe(segment, item) if child is not None: result.append(child) + else: + print "NO CHILD?", segment elif isinstance(item, aaf.component.Sequence): result = otio.schema.Sequence() @@ -184,13 +197,27 @@ def _transcribe(item, parent=None, editRate=24): child = _transcribe(component, item) if child is not None: result.append(child) + else: + print "NO CHILD?", component elif isinstance(item, aaf.mob.TimelineMobSlot): result = otio.schema.Sequence() child = _transcribe(item.segment, item) if child is not None: + child.metadata["AAF"]["MediaKind"] = str(item.segment.media_kind) result.append(child) + else: + print "NO CHILD?", item.segment + + elif isinstance(item, aaf.mob.MobSlot): + result = otio.schema.Sequence() + + child = _transcribe(item.segment, item) + if child is not None: + result.append(child) + else: + print "NO CHILD?", item.segment elif isinstance(item, aaf.component.Timecode): pass @@ -199,7 +226,15 @@ def _transcribe(item, parent=None, editRate=24): elif isinstance(item, aaf.component.EdgeCode): pass elif isinstance(item, aaf.component.ScopeReference): - pass + #TODO: is this like FILLER? + + result = otio.schema.Gap() + + length = item.length + result.source_range = otio.opentime.TimeRange( + otio.opentime.RationalTime(0,editRate), + otio.opentime.RationalTime(length,editRate) + ) else: # result = otio.core.Composition() @@ -226,9 +261,9 @@ def read_from_file(filepath): header = f.header storage = f.storage - print("F: {}".format(f)) - print("HEADER: {}".format(header)) - print("STORAGE: {}".format(storage)) + # print("F: {}".format(f)) + # print("HEADER: {}".format(header)) + # print("STORAGE: {}".format(storage)) topLevelMobs = list(storage.toplevel_mobs()) From 6b55a67346d038513733cf3c4574db04edfb4251 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Mon, 11 Sep 2017 13:42:48 -0700 Subject: [PATCH 04/44] Getting more AAF properties. --- contrib/adapters/advanced_authoring_format.py | 85 +++++++++++++++---- 1 file changed, 70 insertions(+), 15 deletions(-) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index 14cabb1db3..5260930f58 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -25,7 +25,8 @@ """OpenTimelineIO Advanced Authoring Format (AAF) Adapter""" import sys -sys.path.append("/depts/tools/mpg/lib/python/pyaafosx") +# sys.path.append("/depts/tools/mpg/lib/python/pyaafosx") +sys.path.append("/Users/joshm/mpg/lib/python/pyaafosx") import aaf import aaf.storage @@ -51,15 +52,53 @@ def _get_class_name(item): else: return item.__class__.__name__ +def _transcribe_property(prop): + if isinstance(prop, list): + return [_transcribe_property(child) for child in prop] + + elif type(prop) in (str, unicode, int, float, bool): + return prop + + if isinstance(prop, aaf.iterator.PropValueResolveIter): + result = {} + for child in prop: + if isinstance(child, aaf.property.TaggedValue): + result[child.name] = _transcribe_property(child.value) + elif isinstance(child, aaf.mob.MasterMob): + result[child.name] = str(child.mobID) + elif isinstance(child, aaf.mob.SourceMob): + result[child.name] = str(child.mobID) + # elif hasattr(child, "name"): + # result[child.name] = _transcribe(child) + else: + print "???", child + return result + + else: + return str(prop) + + def _transcribe(item, parent=None, editRate=24): result = None metadata = {} + metadata["Name"] = _get_name(item) + metadata["ClassName"] = _get_class_name(item) + + if isinstance(item, aaf.component.Component): + metadata["Length"] = item.length + + if isinstance(item, aaf.base.AAFObject): + for prop in item.properties(): + if hasattr(prop, 'name') and hasattr(prop, 'value'): + key = str(prop.name) + value = prop.value + # if isinstance(value, aaf.dictionary.Dictionary): + # ??? + metadata[key] = _transcribe_property(value) + if False: pass - - # if isinstance(item, list): - # self.extendChildItems(item) # elif isinstance(item, aaf.storage.File): # self.extendChildItems([item.header]) @@ -70,7 +109,7 @@ def _transcribe(item, parent=None, editRate=24): # elif isinstance(item, DummyItem): # self.extendChildItems(item.item) - + elif isinstance(item, aaf.storage.ContentStorage): result = otio.schema.SerializableCollection() @@ -97,7 +136,6 @@ def _transcribe(item, parent=None, editRate=24): result.tracks.append(child) else: print "NO CHILD?", slot - # elif isinstance(item, aaf.dictionary.Dictionary): # l = [] @@ -166,8 +204,9 @@ def _transcribe(item, parent=None, editRate=24): result = otio.schema.Clip() length = item.length + startTime = int(metadata.get("StartTime", "0")) result.source_range = otio.opentime.TimeRange( - otio.opentime.RationalTime(0,editRate), + otio.opentime.RationalTime(startTime,editRate), otio.opentime.RationalTime(length,editRate) ) @@ -240,12 +279,6 @@ def _transcribe(item, parent=None, editRate=24): # result = otio.core.Composition() print("SKIPPING: {}: {} -- {}".format(type(item), item, result)) - metadata["Name"] = _get_name(item) - metadata["ClassName"] = _get_class_name(item) - - if isinstance(item, aaf.component.Component): - metadata["Length"] = item.length - if result is not None: result.name = str(metadata["Name"]) if not result.metadata: @@ -254,6 +287,25 @@ def _transcribe(item, parent=None, editRate=24): return result +def _simplify(thing): + print "SIMPL", type(thing) + # if isinstance(thing, otio.schema.SerializableCollection): + # for i in range(len(thing)): + # thing[i] = _simplify(thing[i]) + # if len(thing)==1: + # thing = thing[0] + if isinstance(thing, otio.schema.Timeline): + for track in thing.tracks: + for j in range(len(track)): + track[j] = _simplify(track[j]) + elif isinstance(thing, otio.core.Composition) or isinstance(thing, otio.schema.SerializableCollection): + print "LEN", len(thing) + thing[:] = [_simplify(child) for child in thing] + # thing[:] = [child for child in thing if not isinstance(child, otio.core.Composition) or len(child)>0] + # if len(thing)==1: + # thing = thing[0] + return thing + def read_from_file(filepath): f = aaf.open(filepath) @@ -267,7 +319,7 @@ def read_from_file(filepath): topLevelMobs = list(storage.toplevel_mobs()) - print("topLevelMobs: {}".format(topLevelMobs)) + # print("topLevelMobs: {}".format(topLevelMobs)) collection = _transcribe(storage) # otio.schema.SerializableCollection() @@ -277,5 +329,8 @@ def read_from_file(filepath): # timeline.name = mob.name # collection.append(timeline) - return collection + result = collection + # result = _simplify(collection) + + return result From 0591424dfe1ab5edaba6c415881c0fd0ec2477cb Mon Sep 17 00:00:00 2001 From: Mike Mahony Date: Thu, 16 Nov 2017 17:33:34 -0800 Subject: [PATCH 05/44] Transition support (#2) --- contrib/adapters/advanced_authoring_format.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index 5260930f58..d30f82d221 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -210,6 +210,16 @@ def _transcribe(item, parent=None, editRate=24): otio.opentime.RationalTime(length,editRate) ) + elif isinstance(item, aaf.component.Transition): + result = otio.schema.Transition() + + result.transition_type = otio.schema.TransitionTypes.SMPTE_Dissolve # Does AAF support anything else? + + in_offset = int(metadata.get("CutPoint", "0")) + out_offset = item.length - in_offset + result.in_offset = otio.opentime.RationalTime(in_offset, editRate) + result.out_offset = otio.opentime.RationalTime(out_offset, editRate) + elif isinstance(item, aaf.component.Filler): result = otio.schema.Gap() From a5ff324efdf9635225b223ce6b75dc932797f37d Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Thu, 16 Nov 2017 18:20:35 -0800 Subject: [PATCH 06/44] Switched otio.schema.Sequence to otio.schema.Track. --- contrib/adapters/advanced_authoring_format.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index d30f82d221..4a82545b3f 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -230,7 +230,7 @@ def _transcribe(item, parent=None, editRate=24): ) elif isinstance(item, aaf.component.NestedScope): - result = otio.schema.Sequence() + result = otio.schema.Track() for segment in item.segments(): child = _transcribe(segment, item) @@ -240,7 +240,7 @@ def _transcribe(item, parent=None, editRate=24): print "NO CHILD?", segment elif isinstance(item, aaf.component.Sequence): - result = otio.schema.Sequence() + result = otio.schema.Track() for component in item.components(): child = _transcribe(component, item) @@ -250,7 +250,7 @@ def _transcribe(item, parent=None, editRate=24): print "NO CHILD?", component elif isinstance(item, aaf.mob.TimelineMobSlot): - result = otio.schema.Sequence() + result = otio.schema.Track() child = _transcribe(item.segment, item) if child is not None: @@ -260,7 +260,7 @@ def _transcribe(item, parent=None, editRate=24): print "NO CHILD?", item.segment elif isinstance(item, aaf.mob.MobSlot): - result = otio.schema.Sequence() + result = otio.schema.Track() child = _transcribe(item.segment, item) if child is not None: From 560d46973dad155d8f2a56333269cf2432b16c31 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Tue, 5 Dec 2017 16:19:34 -0800 Subject: [PATCH 07/44] Added a simple test case for the new AAF adapter. Turned off lots of debugging print statements. --- contrib/adapters/advanced_authoring_format.py | 88 ++++++++------- contrib/adapters/tests/sample_data/simple.aaf | Bin 0 -> 593920 bytes contrib/adapters/tests/test_aaf_adapter.py | 101 ++++++++++++++++++ 3 files changed, 152 insertions(+), 37 deletions(-) create mode 100644 contrib/adapters/tests/sample_data/simple.aaf create mode 100644 contrib/adapters/tests/test_aaf_adapter.py diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index 4a82545b3f..15c7f2acc5 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -37,6 +37,8 @@ import opentimelineio as otio +debug = False + def _get_name(item): if hasattr(item, 'name'): name = item.name @@ -58,7 +60,7 @@ def _transcribe_property(prop): elif type(prop) in (str, unicode, int, float, bool): return prop - + if isinstance(prop, aaf.iterator.PropValueResolveIter): result = {} for child in prop: @@ -71,17 +73,18 @@ def _transcribe_property(prop): # elif hasattr(child, "name"): # result[child.name] = _transcribe(child) else: - print "???", child + if debug: + print "???", child return result else: return str(prop) - + def _transcribe(item, parent=None, editRate=24): result = None metadata = {} - + metadata["Name"] = _get_name(item) metadata["ClassName"] = _get_class_name(item) @@ -99,10 +102,10 @@ def _transcribe(item, parent=None, editRate=24): if False: pass - + # elif isinstance(item, aaf.storage.File): # self.extendChildItems([item.header]) - + # elif isinstance(item, aaf.storage.Header): # self.extendChildItems([item.storage()]) # self.extendChildItems([item.dictionary()]) @@ -112,7 +115,7 @@ def _transcribe(item, parent=None, editRate=24): elif isinstance(item, aaf.storage.ContentStorage): result = otio.schema.SerializableCollection() - + for mob in item.composition_mobs(): child = _transcribe(mob, item) if child is not None: @@ -126,17 +129,18 @@ def _transcribe(item, parent=None, editRate=24): # for mob in item.GetSourceMobs(): # result.append(_transcribe(mob, item)) - + elif isinstance(item, aaf.mob.Mob): result = otio.schema.Timeline() - + for slot in item.slots(): child = _transcribe(slot, item) if child is not None: result.tracks.append(child) else: - print "NO CHILD?", slot - + if debug: + print "NO CHILD?", slot + # elif isinstance(item, aaf.dictionary.Dictionary): # l = [] # l.append(DummyItem(list(item.class_defs()), 'ClassDefs')) @@ -174,19 +178,19 @@ def _transcribe(item, parent=None, editRate=24): # elif isinstance(item, pyaaf.AxSelector): # self.extendChildItems(list(item.EnumAlternateSegments())) -# +# # elif isinstance(item, pyaaf.AxScopeReference): # #print item, item.GetRelativeScope(),item.GetRelativeSlot() # pass -# +# # elif isinstance(item, pyaaf.AxEssenceGroup): # segments = [] -# +# # for i in xrange(item.CountChoices()): # choice = item.GetChoiceAt(i) # segments.append(choice) # self.extendChildItems(segments) -# +# # elif isinstance(item, pyaaf.AxProperty): # self.properties['Value'] = str(item.GetValue()) # elif isinstance(item, (aaf.base.AAFObject,aaf.define.MetaDef)): @@ -213,7 +217,8 @@ def _transcribe(item, parent=None, editRate=24): elif isinstance(item, aaf.component.Transition): result = otio.schema.Transition() - result.transition_type = otio.schema.TransitionTypes.SMPTE_Dissolve # Does AAF support anything else? + # Does AAF support anything else? + result.transition_type = otio.schema.TransitionTypes.SMPTE_Dissolve in_offset = int(metadata.get("CutPoint", "0")) out_offset = item.length - in_offset @@ -231,42 +236,46 @@ def _transcribe(item, parent=None, editRate=24): elif isinstance(item, aaf.component.NestedScope): result = otio.schema.Track() - + for segment in item.segments(): child = _transcribe(segment, item) if child is not None: result.append(child) else: - print "NO CHILD?", segment + if debug: + print "NO CHILD?", segment elif isinstance(item, aaf.component.Sequence): result = otio.schema.Track() - + for component in item.components(): child = _transcribe(component, item) if child is not None: result.append(child) else: - print "NO CHILD?", component + if debug: + print "NO CHILD?", component elif isinstance(item, aaf.mob.TimelineMobSlot): result = otio.schema.Track() - + child = _transcribe(item.segment, item) if child is not None: child.metadata["AAF"]["MediaKind"] = str(item.segment.media_kind) result.append(child) else: - print "NO CHILD?", item.segment + if debug: + print "NO CHILD?", item.segment elif isinstance(item, aaf.mob.MobSlot): result = otio.schema.Track() - + child = _transcribe(item.segment, item) if child is not None: result.append(child) else: - print "NO CHILD?", item.segment + if debug: + print "NO CHILD?", item.segment elif isinstance(item, aaf.component.Timecode): pass @@ -276,7 +285,7 @@ def _transcribe(item, parent=None, editRate=24): pass elif isinstance(item, aaf.component.ScopeReference): #TODO: is this like FILLER? - + result = otio.schema.Gap() length = item.length @@ -284,10 +293,11 @@ def _transcribe(item, parent=None, editRate=24): otio.opentime.RationalTime(0,editRate), otio.opentime.RationalTime(length,editRate) ) - + else: # result = otio.core.Composition() - print("SKIPPING: {}: {} -- {}".format(type(item), item, result)) + if debug: + print("SKIPPING: {}: {} -- {}".format(type(item), item, result)) if result is not None: result.name = str(metadata["Name"]) @@ -298,7 +308,8 @@ def _transcribe(item, parent=None, editRate=24): return result def _simplify(thing): - print "SIMPL", type(thing) + if debug: + print "SIMPL", type(thing) # if isinstance(thing, otio.schema.SerializableCollection): # for i in range(len(thing)): # thing[i] = _simplify(thing[i]) @@ -308,25 +319,28 @@ def _simplify(thing): for track in thing.tracks: for j in range(len(track)): track[j] = _simplify(track[j]) - elif isinstance(thing, otio.core.Composition) or isinstance(thing, otio.schema.SerializableCollection): - print "LEN", len(thing) + elif (isinstance(thing, otio.core.Composition) or + isinstance(thing, otio.schema.SerializableCollection)): + if debug: + print "LEN", len(thing) thing[:] = [_simplify(child) for child in thing] - # thing[:] = [child for child in thing if not isinstance(child, otio.core.Composition) or len(child)>0] + # thing[:] = [child for child in thing if not isinstance(child, + # otio.core.Composition) or len(child)>0] # if len(thing)==1: # thing = thing[0] return thing def read_from_file(filepath): - + f = aaf.open(filepath) - + header = f.header storage = f.storage - + # print("F: {}".format(f)) # print("HEADER: {}".format(header)) # print("STORAGE: {}".format(storage)) - + topLevelMobs = list(storage.toplevel_mobs()) # print("topLevelMobs: {}".format(topLevelMobs)) @@ -338,9 +352,9 @@ def read_from_file(filepath): # timeline = otio.schema.Timeline() # timeline.name = mob.name # collection.append(timeline) - + result = collection # result = _simplify(collection) - + return result diff --git a/contrib/adapters/tests/sample_data/simple.aaf b/contrib/adapters/tests/sample_data/simple.aaf new file mode 100644 index 0000000000000000000000000000000000000000..81a09225c9b869d43a51a33071c9aba36d0a5ade GIT binary patch literal 593920 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 literal 0 HcmV?d00001 diff --git a/contrib/adapters/tests/test_aaf_adapter.py b/contrib/adapters/tests/test_aaf_adapter.py new file mode 100644 index 0000000000..ad73da58b6 --- /dev/null +++ b/contrib/adapters/tests/test_aaf_adapter.py @@ -0,0 +1,101 @@ +# +# Copyright 2017 Pixar Animation Studios +# +# Licensed under the Apache License, Version 2.0 (the "Apache License") +# with the following modification; you may not use this file except in +# compliance with the Apache License and the following modification to it: +# Section 6. Trademarks. is deleted and replaced with: +# +# 6. Trademarks. This License does not grant permission to use the trade +# names, trademarks, service marks, or product names of the Licensor +# and its affiliates, except as required to comply with Section 4(c) of +# the License and to reproduce the content of the NOTICE file. +# +# You may obtain a copy of the Apache License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the Apache License with the above modification is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the Apache License for the specific +# language governing permissions and limitations under the Apache License. +# + +"""Test the AAF adapter.""" + +# python +import os +import unittest + +import opentimelineio as otio + +SAMPLE_DATA_DIR = os.path.join(os.path.dirname(__file__), "sample_data") +EXAMPLE_PATH = os.path.join(SAMPLE_DATA_DIR, "simple.aaf") + + +class AAFAdapterTest(unittest.TestCase): + + def test_aaf_read(self): + aaf_path = EXAMPLE_PATH + collection = otio.adapters.read_from_file(aaf_path) + self.assertTrue(collection is not None) + self.assertEqual(type(collection), otio.schema.SerializableCollection) + self.assertEqual(len(collection), 1) + + timeline = collection[0] + self.assertEqual(timeline.name, "OTIO TEST 1.Exported.01") + fps = timeline.duration().rate + self.assertEqual(fps, 24.0) + self.assertEqual( + timeline.duration(), + otio.opentime.from_timecode("00:02:16:18", fps) + ) + + # TODO: Track nesting is not right yet... + #self.assertEqual(len(timeline.tracks), 3) + # video_track = timeline.tracks[0] + # self.assertEqual(len(video_track), 5) + + clips = list(timeline.each_clip()) + + self.assertEqual( + [clip.name for clip in clips], + [ + "tech.fux (loop)-HD.mp4", + "t-hawk (loop)-HD.mp4", + "out-b (loop)-HD.mp4", + "KOLL-HD.mp4", + "brokchrd (loop)-HD.mp4" + ] + ) + self.maxDiff = None + self.assertEqual( + [clip.source_range for clip in clips], + [ + otio.opentime.TimeRange( + otio.opentime.from_timecode("00:00:00:00", fps), + otio.opentime.from_timecode("00:00:30:00", fps) + ), + otio.opentime.TimeRange( + otio.opentime.from_timecode("00:00:00:00", fps), + otio.opentime.from_timecode("00:00:20:00", fps) + ), + otio.opentime.TimeRange( + otio.opentime.from_timecode("00:00:00:00", fps), + otio.opentime.from_timecode("00:00:30:02", fps) + ), + otio.opentime.TimeRange( + otio.opentime.from_timecode("00:00:00:00", fps), + otio.opentime.from_timecode("00:00:26:16", fps) + ), + otio.opentime.TimeRange( + otio.opentime.from_timecode("00:00:00:00", fps), + otio.opentime.from_timecode("00:00:30:00", fps) + ) + ] + ) + + +if __name__ == '__main__': + unittest.main() From 714e39a43ec16c00b8d78ffaf58ccba946c5c587 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Tue, 5 Dec 2017 16:31:21 -0800 Subject: [PATCH 08/44] Lint. --- contrib/adapters/advanced_authoring_format.py | 49 ++++++++++--------- contrib/adapters/tests/test_aaf_adapter.py | 4 +- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index 15c7f2acc5..73b88884c8 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -24,21 +24,22 @@ """OpenTimelineIO Advanced Authoring Format (AAF) Adapter""" -import sys -# sys.path.append("/depts/tools/mpg/lib/python/pyaafosx") -sys.path.append("/Users/joshm/mpg/lib/python/pyaafosx") - -import aaf -import aaf.storage -import aaf.mob -import aaf.define -import aaf.component -import aaf.base +try: + import aaf + import aaf.storage + import aaf.mob + import aaf.define + import aaf.component + import aaf.base +except ImportError: + print("If you need support for AAFs, please make sure PyAAF is installed.") + raise import opentimelineio as otio debug = False + def _get_name(item): if hasattr(item, 'name'): name = item.name @@ -48,12 +49,14 @@ def _get_name(item): return item.resolve_ref().name or "Untitled SourceClip" return _get_class_name(item) + def _get_class_name(item): - if hasattr(item,"class_name"): + if hasattr(item, "class_name"): return item.class_name else: return item.__class__.__name__ + def _transcribe_property(prop): if isinstance(prop, list): return [_transcribe_property(child) for child in prop] @@ -147,7 +150,8 @@ def _transcribe(item, parent=None, editRate=24): # l.append(DummyItem(list(item.codec_defs()), 'CodecDefs')) # l.append(DummyItem(list(item.container_defs()), 'ContainerDefs')) # l.append(DummyItem(list(item.data_defs()), 'DataDefs')) - # l.append(DummyItem(list(item.interpolation_defs()), 'InterpolationDefs')) + # l.append(DummyItem(list(item.interpolation_defs()), + # 'InterpolationDefs')) # l.append(DummyItem(list(item.klvdata_defs()), 'KLVDataDefs')) # l.append(DummyItem(list(item.operation_defs()), 'OperationDefs')) # l.append(DummyItem(list(item.parameter_defs()), 'ParameterDefs')) @@ -210,8 +214,8 @@ def _transcribe(item, parent=None, editRate=24): length = item.length startTime = int(metadata.get("StartTime", "0")) result.source_range = otio.opentime.TimeRange( - otio.opentime.RationalTime(startTime,editRate), - otio.opentime.RationalTime(length,editRate) + otio.opentime.RationalTime(startTime, editRate), + otio.opentime.RationalTime(length, editRate) ) elif isinstance(item, aaf.component.Transition): @@ -230,8 +234,8 @@ def _transcribe(item, parent=None, editRate=24): length = item.length result.source_range = otio.opentime.TimeRange( - otio.opentime.RationalTime(0,editRate), - otio.opentime.RationalTime(length,editRate) + otio.opentime.RationalTime(0, editRate), + otio.opentime.RationalTime(length, editRate) ) elif isinstance(item, aaf.component.NestedScope): @@ -284,14 +288,14 @@ def _transcribe(item, parent=None, editRate=24): elif isinstance(item, aaf.component.EdgeCode): pass elif isinstance(item, aaf.component.ScopeReference): - #TODO: is this like FILLER? + # TODO: is this like FILLER? result = otio.schema.Gap() length = item.length result.source_range = otio.opentime.TimeRange( - otio.opentime.RationalTime(0,editRate), - otio.opentime.RationalTime(length,editRate) + otio.opentime.RationalTime(0, editRate), + otio.opentime.RationalTime(length, editRate) ) else: @@ -307,6 +311,7 @@ def _transcribe(item, parent=None, editRate=24): return result + def _simplify(thing): if debug: print "SIMPL", type(thing) @@ -330,18 +335,19 @@ def _simplify(thing): # thing = thing[0] return thing + def read_from_file(filepath): f = aaf.open(filepath) - header = f.header + # header = f.header storage = f.storage # print("F: {}".format(f)) # print("HEADER: {}".format(header)) # print("STORAGE: {}".format(storage)) - topLevelMobs = list(storage.toplevel_mobs()) + # topLevelMobs = list(storage.toplevel_mobs()) # print("topLevelMobs: {}".format(topLevelMobs)) @@ -357,4 +363,3 @@ def read_from_file(filepath): # result = _simplify(collection) return result - diff --git a/contrib/adapters/tests/test_aaf_adapter.py b/contrib/adapters/tests/test_aaf_adapter.py index ad73da58b6..ab476e661d 100644 --- a/contrib/adapters/tests/test_aaf_adapter.py +++ b/contrib/adapters/tests/test_aaf_adapter.py @@ -51,9 +51,9 @@ def test_aaf_read(self): timeline.duration(), otio.opentime.from_timecode("00:02:16:18", fps) ) - + # TODO: Track nesting is not right yet... - #self.assertEqual(len(timeline.tracks), 3) + # self.assertEqual(len(timeline.tracks), 3) # video_track = timeline.tracks[0] # self.assertEqual(len(video_track), 5) From f822d60f9e5a131a55af8d9ba430511767874ad5 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Tue, 5 Dec 2017 16:46:16 -0800 Subject: [PATCH 09/44] Introduced OTIO_AAF_PYTHON_LIB for locating PyAAF. --- README.md | 2 ++ contrib/adapters/advanced_authoring_format.py | 29 +++++++++++-------- contrib/adapters/tests/test_aaf_adapter.py | 5 +++- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index f1f2b5db13..13d542b9d5 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,8 @@ Final Cut Pro X XML Format: - http://www.amwa.tv/downloads/specifications/aafobjectspec-v1.1.pdf - http://www.amwa.tv/downloads/specifications/aafeditprotocol.pdf +- set ${OTIO_AAF_PYTHON_LIB} to point the location of the PyAAF module. + Contrib Adapters ---------------- diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index 73b88884c8..f549b4743d 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -22,19 +22,24 @@ # language governing permissions and limitations under the Apache License. # -"""OpenTimelineIO Advanced Authoring Format (AAF) Adapter""" - -try: - import aaf - import aaf.storage - import aaf.mob - import aaf.define - import aaf.component - import aaf.base -except ImportError: - print("If you need support for AAFs, please make sure PyAAF is installed.") - raise +"""OpenTimelineIO Advanced Authoring Format (AAF) Adapter +Requires that you set the environment variables: + OTIO_AAF_PYTHON_LIB - should point at the PyAAF module. +""" + +import os +import sys + +if os.environ["OTIO_AAF_PYTHON_LIB"] not in sys.path: + sys.path += [os.environ["OTIO_AAF_PYTHON_LIB"]] + +import aaf +import aaf.storage +import aaf.mob +import aaf.define +import aaf.component +import aaf.base import opentimelineio as otio debug = False diff --git a/contrib/adapters/tests/test_aaf_adapter.py b/contrib/adapters/tests/test_aaf_adapter.py index ab476e661d..48fe5de240 100644 --- a/contrib/adapters/tests/test_aaf_adapter.py +++ b/contrib/adapters/tests/test_aaf_adapter.py @@ -33,7 +33,10 @@ SAMPLE_DATA_DIR = os.path.join(os.path.dirname(__file__), "sample_data") EXAMPLE_PATH = os.path.join(SAMPLE_DATA_DIR, "simple.aaf") - +@unittest.skipIf( + "OTIO_AAF_PYTHON_LIB" not in os.environ, + "OTIO_AAF_PYTHON_LIB not set, required for the AAF adapter" +) class AAFAdapterTest(unittest.TestCase): def test_aaf_read(self): From 10366a0b64e3f279ddb2a9ab1bf3b5b3b577a316 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Tue, 5 Dec 2017 16:50:31 -0800 Subject: [PATCH 10/44] Lint. --- contrib/adapters/advanced_authoring_format.py | 14 +++++++------- contrib/adapters/tests/test_aaf_adapter.py | 1 + 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index f549b4743d..8a3e40223c 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -30,17 +30,17 @@ import os import sys +import opentimelineio as otio if os.environ["OTIO_AAF_PYTHON_LIB"] not in sys.path: sys.path += [os.environ["OTIO_AAF_PYTHON_LIB"]] -import aaf -import aaf.storage -import aaf.mob -import aaf.define -import aaf.component -import aaf.base -import opentimelineio as otio +import aaf # noqa (E402 module level import not at top of file) +import aaf.storage # noqa +import aaf.mob # noqa +import aaf.define # noqa +import aaf.component # noqa +import aaf.base # noqa debug = False diff --git a/contrib/adapters/tests/test_aaf_adapter.py b/contrib/adapters/tests/test_aaf_adapter.py index 48fe5de240..199fcd2d77 100644 --- a/contrib/adapters/tests/test_aaf_adapter.py +++ b/contrib/adapters/tests/test_aaf_adapter.py @@ -33,6 +33,7 @@ SAMPLE_DATA_DIR = os.path.join(os.path.dirname(__file__), "sample_data") EXAMPLE_PATH = os.path.join(SAMPLE_DATA_DIR, "simple.aaf") + @unittest.skipIf( "OTIO_AAF_PYTHON_LIB" not in os.environ, "OTIO_AAF_PYTHON_LIB not set, required for the AAF adapter" From 733f3cfa876cd239ff0793d4dd0c472448c5ddf9 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Tue, 5 Dec 2017 17:46:00 -0800 Subject: [PATCH 11/44] Testing simplify vs non-simplify to get the right balance. --- contrib/adapters/advanced_authoring_format.py | 101 ++++++++++++------ contrib/adapters/tests/test_aaf_adapter.py | 51 +++++++-- 2 files changed, 108 insertions(+), 44 deletions(-) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index 8a3e40223c..20e55346f8 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -318,53 +318,86 @@ def _transcribe(item, parent=None, editRate=24): def _simplify(thing): - if debug: - print "SIMPL", type(thing) - # if isinstance(thing, otio.schema.SerializableCollection): - # for i in range(len(thing)): - # thing[i] = _simplify(thing[i]) - # if len(thing)==1: - # thing = thing[0] + _remove_gap_only_tracks(thing) + _remove_empty_children(thing) + thing = _simplify_nesting(thing) + + return thing + + +def _remove_empty_children(thing): if isinstance(thing, otio.schema.Timeline): - for track in thing.tracks: - for j in range(len(track)): - track[j] = _simplify(track[j]) + _remove_empty_children(thing.tracks) + elif (isinstance(thing, otio.core.Composition) or isinstance(thing, otio.schema.SerializableCollection)): - if debug: - print "LEN", len(thing) - thing[:] = [_simplify(child) for child in thing] - # thing[:] = [child for child in thing if not isinstance(child, - # otio.core.Composition) or len(child)>0] - # if len(thing)==1: - # thing = thing[0] + # simplify each child + for c, child in enumerate(thing): + _remove_empty_children(thing[c]) + + # remove empty containers + # TODO: We're discarding metadata here, should we retain it? + for c in reversed(range(len(thing))): + child = thing[c] + if isinstance(child, otio.core.Composition) and len(child) == 0: + del thing[c] + + +def _remove_gap_only_tracks(thing): + if isinstance(thing, otio.schema.Timeline): + _remove_gap_only_tracks(thing.tracks) + + elif (isinstance(thing, otio.core.Composition) or + isinstance(thing, otio.schema.SerializableCollection)): + # simplify each child + for c, child in enumerate(thing): + _remove_gap_only_tracks(thing[c]) + + # remove tracks with only gaps + # TODO: We're discarding metadata here, should we retain it? + for c in reversed(range(len(thing))): + child = thing[c] + if isinstance(child, otio.schema.Track): + non_gaps = filter( + lambda c: not isinstance(c, otio.schema.Gap), + child + ) + if len(non_gaps)==0: + del thing[c] + + +def _simplify_nesting(thing): + if isinstance(thing, otio.schema.Timeline): + thing.tracks = _simplify_nesting(thing.tracks) + + elif (isinstance(thing, otio.core.Composition) or + isinstance(thing, otio.schema.SerializableCollection)): + # simplify each child + for c, child in enumerate(thing): + z = _simplify_nesting(thing[c]) + if z != thing[c]: + thing[c] = z + + # look for containers that contain just one thing + if len(thing) == 1: + # replace ourselves with our child + # TODO: We're discarding metadata here, should we merge it? + return thing[0] + return thing -def read_from_file(filepath): +def read_from_file(filepath, simplify=True): f = aaf.open(filepath) # header = f.header storage = f.storage - - # print("F: {}".format(f)) - # print("HEADER: {}".format(header)) - # print("STORAGE: {}".format(storage)) - # topLevelMobs = list(storage.toplevel_mobs()) - # print("topLevelMobs: {}".format(topLevelMobs)) - - collection = _transcribe(storage) - # otio.schema.SerializableCollection() - # - # for mob in topLevelMobs: - # timeline = otio.schema.Timeline() - # timeline.name = mob.name - # collection.append(timeline) + result = _transcribe(storage) - result = collection - # result = _simplify(collection) + if simplify: + result = _simplify(result) return result diff --git a/contrib/adapters/tests/test_aaf_adapter.py b/contrib/adapters/tests/test_aaf_adapter.py index 199fcd2d77..08f6d7f2a8 100644 --- a/contrib/adapters/tests/test_aaf_adapter.py +++ b/contrib/adapters/tests/test_aaf_adapter.py @@ -42,12 +42,7 @@ class AAFAdapterTest(unittest.TestCase): def test_aaf_read(self): aaf_path = EXAMPLE_PATH - collection = otio.adapters.read_from_file(aaf_path) - self.assertTrue(collection is not None) - self.assertEqual(type(collection), otio.schema.SerializableCollection) - self.assertEqual(len(collection), 1) - - timeline = collection[0] + timeline = otio.adapters.read_from_file(aaf_path) self.assertEqual(timeline.name, "OTIO TEST 1.Exported.01") fps = timeline.duration().rate self.assertEqual(fps, 24.0) @@ -56,10 +51,9 @@ def test_aaf_read(self): otio.opentime.from_timecode("00:02:16:18", fps) ) - # TODO: Track nesting is not right yet... - # self.assertEqual(len(timeline.tracks), 3) - # video_track = timeline.tracks[0] - # self.assertEqual(len(video_track), 5) + self.assertEqual(len(timeline.tracks), 1) + video_track = timeline.tracks[0] + self.assertEqual(len(video_track), 5) clips = list(timeline.each_clip()) @@ -100,6 +94,43 @@ def test_aaf_read(self): ] ) + def test_aaf_simplify(self): + aaf_path = EXAMPLE_PATH + timeline = otio.adapters.read_from_file(aaf_path, simplify=True) + self.assertTrue(timeline is not None) + self.assertEqual(type(timeline), otio.schema.Timeline) + self.assertEqual(timeline.name, "OTIO TEST 1.Exported.01") + fps = timeline.duration().rate + self.assertEqual(fps, 24.0) + self.assertEqual( + timeline.duration(), + otio.opentime.from_timecode("00:02:16:18", fps) + ) + self.assertEqual(len(timeline.tracks), 1) + video_track = timeline.tracks[0] + self.assertEqual(len(video_track), 5) + + def test_aaf_no_simplify(self): + aaf_path = EXAMPLE_PATH + collection = otio.adapters.read_from_file(aaf_path, simplify=False) + self.assertTrue(collection is not None) + self.assertEqual(type(collection), otio.schema.SerializableCollection) + self.assertEqual(len(collection), 1) + + timeline = collection[0] + self.assertEqual(timeline.name, "OTIO TEST 1.Exported.01") + fps = timeline.duration().rate + self.assertEqual(fps, 24.0) + self.assertEqual( + timeline.duration(), + otio.opentime.from_timecode("00:02:16:18", fps) + ) + + self.assertEqual(len(timeline.tracks), 12) + + video_track = timeline.tracks[0] + self.assertEqual(len(video_track), 5) + if __name__ == '__main__': unittest.main() From 814a935bcce2e1b350d85e721f6f9e6031feeb42 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Tue, 5 Dec 2017 18:26:26 -0800 Subject: [PATCH 12/44] Simplify is working now. --- contrib/adapters/advanced_authoring_format.py | 105 ++++++++---------- contrib/adapters/tests/test_aaf_adapter.py | 2 +- 2 files changed, 49 insertions(+), 58 deletions(-) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index 20e55346f8..536bb1cbf0 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -318,73 +318,64 @@ def _transcribe(item, parent=None, editRate=24): def _simplify(thing): - _remove_gap_only_tracks(thing) - _remove_empty_children(thing) - thing = _simplify_nesting(thing) - - return thing - - -def _remove_empty_children(thing): - if isinstance(thing, otio.schema.Timeline): - _remove_empty_children(thing.tracks) - - elif (isinstance(thing, otio.core.Composition) or - isinstance(thing, otio.schema.SerializableCollection)): - # simplify each child + + if isinstance(thing, otio.schema.SerializableCollection): + if len(thing)==1: + return _simplify(thing[0]) + else: + for c, child in enumerate(thing): + thing[c] = _simplify(child) + return thing + + elif isinstance(thing, otio.schema.Timeline): + # note that we ignore the return value of _simplify here + # so that we don't ever get rid of the Timeline's Stack. + _simplify(thing.tracks) + return thing + + elif isinstance(thing, otio.core.Composition): + # simplify our children for c, child in enumerate(thing): - _remove_empty_children(thing[c]) - - # remove empty containers - # TODO: We're discarding metadata here, should we retain it? + thing[c] = _simplify(child) + + # remove empty children for c in reversed(range(len(thing))): child = thing[c] - if isinstance(child, otio.core.Composition) and len(child) == 0: + if not _contains_something_valuable(child): + # TODO: We're discarding metadata here, should we retain it? del thing[c] + + # skip redundant containers + if len(thing) == 1: + # TODO: We may be discarding metadata here, should we merge it? + return thing[0] + return thing -def _remove_gap_only_tracks(thing): - if isinstance(thing, otio.schema.Timeline): - _remove_gap_only_tracks(thing.tracks) - elif (isinstance(thing, otio.core.Composition) or - isinstance(thing, otio.schema.SerializableCollection)): - # simplify each child - for c, child in enumerate(thing): - _remove_gap_only_tracks(thing[c]) +def _contains_something_valuable(thing): + if isinstance(thing, otio.core.Composition): - # remove tracks with only gaps - # TODO: We're discarding metadata here, should we retain it? - for c in reversed(range(len(thing))): - child = thing[c] - if isinstance(child, otio.schema.Track): - non_gaps = filter( - lambda c: not isinstance(c, otio.schema.Gap), - child - ) - if len(non_gaps)==0: - del thing[c] - - -def _simplify_nesting(thing): - if isinstance(thing, otio.schema.Timeline): - thing.tracks = _simplify_nesting(thing.tracks) - - elif (isinstance(thing, otio.core.Composition) or - isinstance(thing, otio.schema.SerializableCollection)): - # simplify each child - for c, child in enumerate(thing): - z = _simplify_nesting(thing[c]) - if z != thing[c]: - thing[c] = z + if len(thing)==0: + # NOT valuable because it is empty + return False - # look for containers that contain just one thing - if len(thing) == 1: - # replace ourselves with our child - # TODO: We're discarding metadata here, should we merge it? - return thing[0] + for child in thing: + if _contains_something_valuable(child): + # valuable because this child is valuable + return True - return thing + # none of the children were valuable, so thing is NOT valuable + return False + + if isinstance(thing, otio.schema.Gap): + if len(thing.effects)>0 or len(thing.markers)>0: + return True + # TODO: Are there other valuable things we should look for on a Gap? + return False + + # anything else is presumed to be valuable + return True def read_from_file(filepath, simplify=True): diff --git a/contrib/adapters/tests/test_aaf_adapter.py b/contrib/adapters/tests/test_aaf_adapter.py index 08f6d7f2a8..a1202a8c4e 100644 --- a/contrib/adapters/tests/test_aaf_adapter.py +++ b/contrib/adapters/tests/test_aaf_adapter.py @@ -128,7 +128,7 @@ def test_aaf_no_simplify(self): self.assertEqual(len(timeline.tracks), 12) - video_track = timeline.tracks[0] + video_track = timeline.tracks[8][0] self.assertEqual(len(video_track), 5) From c2a59359de7375fb5e4696c93c27b65fadd2caff Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Tue, 5 Dec 2017 18:28:00 -0800 Subject: [PATCH 13/44] Lint. --- contrib/adapters/advanced_authoring_format.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index 536bb1cbf0..83f36cf498 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -318,9 +318,8 @@ def _transcribe(item, parent=None, editRate=24): def _simplify(thing): - if isinstance(thing, otio.schema.SerializableCollection): - if len(thing)==1: + if len(thing) == 1: return _simplify(thing[0]) else: for c, child in enumerate(thing): @@ -337,14 +336,14 @@ def _simplify(thing): # simplify our children for c, child in enumerate(thing): thing[c] = _simplify(child) - + # remove empty children for c in reversed(range(len(thing))): child = thing[c] if not _contains_something_valuable(child): # TODO: We're discarding metadata here, should we retain it? del thing[c] - + # skip redundant containers if len(thing) == 1: # TODO: We may be discarding metadata here, should we merge it? @@ -356,7 +355,7 @@ def _simplify(thing): def _contains_something_valuable(thing): if isinstance(thing, otio.core.Composition): - if len(thing)==0: + if len(thing) == 0: # NOT valuable because it is empty return False @@ -369,7 +368,7 @@ def _contains_something_valuable(thing): return False if isinstance(thing, otio.schema.Gap): - if len(thing.effects)>0 or len(thing.markers)>0: + if len(thing.effects) > 0 or len(thing.markers) > 0: return True # TODO: Are there other valuable things we should look for on a Gap? return False From 1d325df356fcd8a23cfb17c0f4daf40e230edd36 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Fri, 8 Dec 2017 09:30:41 -0800 Subject: [PATCH 14/44] Starting to get the timing of transitions... but not quite right yet. --- contrib/adapters/advanced_authoring_format.py | 21 ++++ .../tests/sample_data/transitions.aaf | Bin 0 -> 720896 bytes contrib/adapters/tests/test_aaf_adapter.py | 118 ++++++++++++++++++ 3 files changed, 139 insertions(+) create mode 100644 contrib/adapters/tests/sample_data/transitions.aaf diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index 83f36cf498..3b72144c53 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -317,6 +317,25 @@ def _transcribe(item, parent=None, editRate=24): return result +def _fix_transitions(thing): + if isinstance(thing, otio.schema.Timeline): + _fix_transitions(thing.tracks) + elif isinstance(thing, otio.core.Composition): + if isinstance(thing, otio.schema.Track): + for c, child in enumerate(thing): + if c>0 and isinstance(thing[c-1], otio.schema.Transition): + before = thing[c-1] + child.source_range.start_time += before.out_offset + child.source_range.duration -= before.out_offset + if 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 ePV~Tu9yrkhCwkyS51i Date: Thu, 14 Dec 2017 17:09:01 -0800 Subject: [PATCH 15/44] Pull metadata from MasterMobs into each SourceClip's media_reference. --- contrib/adapters/advanced_authoring_format.py | 41 ++++++++++++------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index 3b72144c53..fbf53dbd05 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -89,7 +89,7 @@ def _transcribe_property(prop): return str(prop) -def _transcribe(item, parent=None, editRate=24): +def _transcribe(item, parent=None, editRate=24, masterMobs=None): result = None metadata = {} @@ -124,25 +124,29 @@ def _transcribe(item, parent=None, editRate=24): elif isinstance(item, aaf.storage.ContentStorage): result = otio.schema.SerializableCollection() + # Gather all the Master Mobs, so we can find them later by MobID + # when we parse the SourceClips in the composition + if masterMobs is None: + masterMobs = {} + for mob in item.master_mobs(): + child = _transcribe(mob, parent=item) + if child is not None: + mobID = child.metadata.get("AAF",{}).get("MobID") + masterMobs[mobID] = child + for mob in item.composition_mobs(): - child = _transcribe(mob, item) + child = _transcribe(mob, parent=item, masterMobs=masterMobs) if child is not None: result.append(child) - # TODO: Do we want these mixed in with the composition? - # for mob in item.master_mobs(): - # child = _transcribe(mob, item) - # if child is not None: - # result.append(child) - # for mob in item.GetSourceMobs(): - # result.append(_transcribe(mob, item)) + # result.append(_transcribe(mob, parent=item, masterMobs=masterMobs)) elif isinstance(item, aaf.mob.Mob): result = otio.schema.Timeline() for slot in item.slots(): - child = _transcribe(slot, item) + child = _transcribe(slot, parent=item, masterMobs=masterMobs) if child is not None: result.tracks.append(child) else: @@ -222,6 +226,15 @@ def _transcribe(item, parent=None, editRate=24): otio.opentime.RationalTime(startTime, editRate), otio.opentime.RationalTime(length, editRate) ) + + mobID = metadata.get("SourceID") + if masterMobs and mobID: + masterMob = masterMobs.get(mobID) + if masterMob: + media = otio.media_reference.MissingReference() + # copy the metadata from the master into the media_reference + media.metadata["AAF"] = masterMob.metadata.get("AAF",{}) + result.media_reference = media elif isinstance(item, aaf.component.Transition): result = otio.schema.Transition() @@ -247,7 +260,7 @@ def _transcribe(item, parent=None, editRate=24): result = otio.schema.Track() for segment in item.segments(): - child = _transcribe(segment, item) + child = _transcribe(segment, parent=item, masterMobs=masterMobs) if child is not None: result.append(child) else: @@ -258,7 +271,7 @@ def _transcribe(item, parent=None, editRate=24): result = otio.schema.Track() for component in item.components(): - child = _transcribe(component, item) + child = _transcribe(component, parent=item, masterMobs=masterMobs) if child is not None: result.append(child) else: @@ -268,7 +281,7 @@ def _transcribe(item, parent=None, editRate=24): elif isinstance(item, aaf.mob.TimelineMobSlot): result = otio.schema.Track() - child = _transcribe(item.segment, item) + child = _transcribe(item.segment, parent=item, masterMobs=masterMobs) if child is not None: child.metadata["AAF"]["MediaKind"] = str(item.segment.media_kind) result.append(child) @@ -279,7 +292,7 @@ def _transcribe(item, parent=None, editRate=24): elif isinstance(item, aaf.mob.MobSlot): result = otio.schema.Track() - child = _transcribe(item.segment, item) + child = _transcribe(item.segment, parent=item, masterMobs=masterMobs) if child is not None: result.append(child) else: From 5385dcda88dbd8f0fe1feb3b40212379077b03da Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Fri, 15 Dec 2017 10:44:12 -0800 Subject: [PATCH 16/44] Added a unit test for getting AAF UserComments. --- contrib/adapters/tests/test_aaf_adapter.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/contrib/adapters/tests/test_aaf_adapter.py b/contrib/adapters/tests/test_aaf_adapter.py index 29112cd787..8065668673 100644 --- a/contrib/adapters/tests/test_aaf_adapter.py +++ b/contrib/adapters/tests/test_aaf_adapter.py @@ -250,5 +250,20 @@ def test_aaf_read_transitions(self): ] ) + def test_aaf_user_comments(self): + aaf_path = EXAMPLE_PATH + timeline = otio.adapters.read_from_file(aaf_path) + self.assertTrue(timeline is not None) + self.assertEqual(type(timeline), otio.schema.Timeline) + self.assertTrue(timeline.metadata.get("AAF") is not None) + clip = timeline.tracks[0][0] + AAFmetadata = clip.media_reference.metadata.get("AAF") + self.assertTrue(AAFmetadata is not None) + self.assertTrue(AAFmetadata.get("UserComments") is not None) + self.assertEqual( + AAFmetadata.get("UserComments").get("UNC Path"), + "/Users/joshm/Desktop/DemoClips/tech.fux (loop)-HD.mp4" + ) + if __name__ == '__main__': unittest.main() From f5626ff29c96bcf117df4a18b0879c30adeeb914 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Fri, 15 Dec 2017 18:00:53 -0800 Subject: [PATCH 17/44] Test for more custom column metadata. --- contrib/adapters/tests/sample_data/trims.aaf | Bin 0 -> 593920 bytes contrib/adapters/tests/test_aaf_adapter.py | 26 ++++++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-) create mode 100644 contrib/adapters/tests/sample_data/trims.aaf diff --git a/contrib/adapters/tests/sample_data/trims.aaf b/contrib/adapters/tests/sample_data/trims.aaf new file mode 100644 index 0000000000000000000000000000000000000000..e4953dafdfe8c5f58466de8242678fd89f0c3bee GIT binary patch literal 593920 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 Date: Mon, 18 Dec 2017 12:30:13 -0800 Subject: [PATCH 18/44] When simplifying an AAF composition, don't remove Gaps from Sequences (only remove them from Stacks). --- contrib/adapters/advanced_authoring_format.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index fbf53dbd05..c3b69182da 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -369,12 +369,13 @@ def _simplify(thing): for c, child in enumerate(thing): thing[c] = _simplify(child) - # remove empty children - for c in reversed(range(len(thing))): - child = thing[c] - if not _contains_something_valuable(child): - # TODO: We're discarding metadata here, should we retain it? - del thing[c] + # remove empty children of Stacks + if isinstance(thing, otio.schema.Stack): + for c in reversed(range(len(thing))): + child = thing[c] + if not _contains_something_valuable(child): + # TODO: We're discarding metadata here, should we retain it? + del thing[c] # skip redundant containers if len(thing) == 1: From 0c8a62311d8934d6e569363bc8b2978fd1d08965 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Mon, 18 Dec 2017 12:30:45 -0800 Subject: [PATCH 19/44] Added a test to verify that the AAF adapter handles trims and gaps correctly. --- contrib/adapters/tests/test_aaf_adapter.py | 121 +++++++++++++++++++++ 1 file changed, 121 insertions(+) diff --git a/contrib/adapters/tests/test_aaf_adapter.py b/contrib/adapters/tests/test_aaf_adapter.py index 0e2ed55c85..7aff411a30 100644 --- a/contrib/adapters/tests/test_aaf_adapter.py +++ b/contrib/adapters/tests/test_aaf_adapter.py @@ -133,6 +133,124 @@ def test_aaf_no_simplify(self): video_track = timeline.tracks[8][0] self.assertEqual(len(video_track), 5) + def test_aaf_read_trims(self): + aaf_path = EXAMPLE_PATH3 + timeline = otio.adapters.read_from_file(aaf_path) + self.assertEqual( + timeline.name, + "OTIO TEST 1.Exported.01 - trims.Exported.02" + ) + fps = timeline.duration().rate + self.assertEqual(fps, 24.0) + + self.assertEqual(len(timeline.tracks), 1) + video_track = timeline.tracks[0] + self.assertEqual(len(video_track), 6) + + self.assertEqual( + [type(item) for item in video_track], + [ + otio.schema.Clip, + otio.schema.Clip, + otio.schema.Clip, + otio.schema.Clip, + otio.schema.Gap, + otio.schema.Clip, + ] + ) + + clips = list(video_track.each_clip()) + + self.assertEqual( + [item.name for item in video_track], + [ + "tech.fux (loop)-HD.mp4", + "t-hawk (loop)-HD.mp4", + "out-b (loop)-HD.mp4", + "KOLL-HD.mp4", + "Filler", # Gap + "brokchrd (loop)-HD.mp4" + ] + ) + + self.maxDiff = None + desired_ranges = [ + otio.opentime.TimeRange( + otio.opentime.from_frames(0, fps), + otio.opentime.from_frames(720-0, fps) + ), + otio.opentime.TimeRange( + otio.opentime.from_frames(121, fps), + otio.opentime.from_frames(480-121, fps) + ), + otio.opentime.TimeRange( + otio.opentime.from_frames(123, fps), + otio.opentime.from_frames(523-123, fps) + ), + otio.opentime.TimeRange( + otio.opentime.from_frames(0, fps), + otio.opentime.from_frames(559-0, fps) + ), + otio.opentime.TimeRange( + otio.opentime.from_frames(69, fps), + otio.opentime.from_frames(720-69, fps) + ) + ] + for clip, desired in zip(clips, desired_ranges): + actual = clip.source_range + self.assertEqual( + actual, + desired, + "clip '{}' source_range should be {} not {}".format( + clip.name, + desired, + actual + ) + ) + + desired_ranges = [ + otio.opentime.TimeRange( + otio.opentime.from_timecode("00:00:00:00", fps), + otio.opentime.from_timecode("00:00:30:00", fps) + ), + otio.opentime.TimeRange( + otio.opentime.from_timecode("00:00:30:00", fps), + otio.opentime.from_timecode("00:00:14:23", fps) + ), + otio.opentime.TimeRange( + otio.opentime.from_timecode("00:00:44:23", fps), + otio.opentime.from_timecode("00:00:16:16", fps) + ), + otio.opentime.TimeRange( + otio.opentime.from_timecode("00:01:01:15", fps), + otio.opentime.from_timecode("00:00:23:07", fps) + ), + otio.opentime.TimeRange( # Gap + otio.opentime.from_timecode("00:01:24:22", fps), + otio.opentime.from_timecode("00:00:04:12", fps) + ), + otio.opentime.TimeRange( + otio.opentime.from_timecode("00:01:29:10", fps), + otio.opentime.from_timecode("00:00:27:03", fps) + ) + ] + for item, desired in zip(video_track, desired_ranges): + actual = item.trimmed_range_in_parent() + self.assertEqual( + actual, + desired, + "item '{}' trimmed_range_in_parent should be {} not {}".format( + clip.name, + desired, + actual + ) + ) + + self.assertEqual( + timeline.duration(), + otio.opentime.from_timecode("00:01:56:13", fps) + ) + def test_aaf_read_transitions(self): aaf_path = EXAMPLE_PATH2 timeline = otio.adapters.read_from_file(aaf_path) @@ -262,9 +380,12 @@ def test_aaf_user_comments(self): "testing 1 2 3", u"Eyjafjallaj\xf6kull", "'s' \"d\" `b`", + None, # Gap None ] for clip, correctWord in zip(timeline.tracks[0], correctWords): + if isinstance(clip, otio.schema.Gap): + continue AAFmetadata = clip.media_reference.metadata.get("AAF") self.assertTrue(AAFmetadata is not None) self.assertTrue(AAFmetadata.get("UserComments") is not None) From 772345bc707a990aa14ba95907d709a16e9af67b Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Mon, 18 Dec 2017 14:01:03 -0800 Subject: [PATCH 20/44] Fixed AAF Transition parsing to conform to the OTIO model for source_range and in_offset/out_offset. --- contrib/adapters/advanced_authoring_format.py | 25 ++- .../tests/sample_data/transitions.aaf | Bin 720896 -> 679936 bytes contrib/adapters/tests/test_aaf_adapter.py | 164 +++++++++++------- 3 files changed, 115 insertions(+), 74 deletions(-) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index c3b69182da..a93a8522be 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -333,18 +333,29 @@ def _transcribe(item, parent=None, editRate=24, masterMobs=None): def _fix_transitions(thing): if isinstance(thing, otio.schema.Timeline): _fix_transitions(thing.tracks) - elif isinstance(thing, otio.core.Composition): + elif ( + isinstance(thing, otio.core.Composition) or + isinstance(thing, otio.schema.SerializableCollection) + ): if isinstance(thing, otio.schema.Track): for c, child in enumerate(thing): - if c>0 and isinstance(thing[c-1], otio.schema.Transition): - before = thing[c-1] - child.source_range.start_time += before.out_offset - child.source_range.duration -= before.out_offset + + # Was the item before us a Transition? + if c>0 and isinstance( + thing[c-1], + otio.schema.Transition + ): + trans = thing[c-1] + child.source_range.start_time += trans.in_offset + child.source_range.duration -= trans.in_offset + + # Is the item after us a Transition? if c^(m}b)6m(V81*5_n1i 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 ePV~Tu9yrkhCwkyS51i Date: Mon, 18 Dec 2017 14:10:25 -0800 Subject: [PATCH 21/44] Lint. --- contrib/adapters/advanced_authoring_format.py | 16 +++++++++------- contrib/adapters/tests/test_aaf_adapter.py | 5 +++-- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index a93a8522be..6f4af0ec54 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -131,7 +131,7 @@ def _transcribe(item, parent=None, editRate=24, masterMobs=None): for mob in item.master_mobs(): child = _transcribe(mob, parent=item) if child is not None: - mobID = child.metadata.get("AAF",{}).get("MobID") + mobID = child.metadata.get("AAF", {}).get("MobID") masterMobs[mobID] = child for mob in item.composition_mobs(): @@ -140,7 +140,8 @@ def _transcribe(item, parent=None, editRate=24, masterMobs=None): result.append(child) # for mob in item.GetSourceMobs(): - # result.append(_transcribe(mob, parent=item, masterMobs=masterMobs)) + # source = _transcribe(mob, parent=item, masterMobs=masterMobs) + # result.append(source) elif isinstance(item, aaf.mob.Mob): result = otio.schema.Timeline() @@ -226,14 +227,14 @@ def _transcribe(item, parent=None, editRate=24, masterMobs=None): otio.opentime.RationalTime(startTime, editRate), otio.opentime.RationalTime(length, editRate) ) - + mobID = metadata.get("SourceID") if masterMobs and mobID: masterMob = masterMobs.get(mobID) if masterMob: media = otio.media_reference.MissingReference() # copy the metadata from the master into the media_reference - media.metadata["AAF"] = masterMob.metadata.get("AAF",{}) + media.metadata["AAF"] = masterMob.metadata.get("AAF", {}) result.media_reference = media elif isinstance(item, aaf.component.Transition): @@ -341,7 +342,7 @@ def _fix_transitions(thing): for c, child in enumerate(thing): # Was the item before us a Transition? - if c>0 and isinstance( + if c > 0 and isinstance( thing[c-1], otio.schema.Transition ): @@ -350,7 +351,7 @@ def _fix_transitions(thing): child.source_range.duration -= trans.in_offset # Is the item after us a Transition? - if c Date: Tue, 19 Dec 2017 13:27:50 -0800 Subject: [PATCH 22/44] Prep work for pulling Markers from AAF. --- contrib/adapters/advanced_authoring_format.py | 57 ++++++++++--------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index 6f4af0ec54..43583f09f4 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -89,6 +89,16 @@ def _transcribe_property(prop): return str(prop) +def _add_child(parent, child, source): + if child is None: + if debug: + print "MISSING CHILD?", source + elif isinstance(child, otio.schema.Marker): + parent.markers.append(child) + else: + parent.append(child) + + def _transcribe(item, parent=None, editRate=24, masterMobs=None): result = None metadata = {} @@ -136,8 +146,7 @@ def _transcribe(item, parent=None, editRate=24, masterMobs=None): for mob in item.composition_mobs(): child = _transcribe(mob, parent=item, masterMobs=masterMobs) - if child is not None: - result.append(child) + _add_child(result, child, mob) # for mob in item.GetSourceMobs(): # source = _transcribe(mob, parent=item, masterMobs=masterMobs) @@ -148,11 +157,7 @@ def _transcribe(item, parent=None, editRate=24, masterMobs=None): for slot in item.slots(): child = _transcribe(slot, parent=item, masterMobs=masterMobs) - if child is not None: - result.tracks.append(child) - else: - if debug: - print "NO CHILD?", slot + _add_child(result.tracks, child, slot) # elif isinstance(item, aaf.dictionary.Dictionary): # l = [] @@ -262,43 +267,28 @@ def _transcribe(item, parent=None, editRate=24, masterMobs=None): for segment in item.segments(): child = _transcribe(segment, parent=item, masterMobs=masterMobs) - if child is not None: - result.append(child) - else: - if debug: - print "NO CHILD?", segment + _add_child(result, child, segment) elif isinstance(item, aaf.component.Sequence): result = otio.schema.Track() for component in item.components(): child = _transcribe(component, parent=item, masterMobs=masterMobs) - if child is not None: - result.append(child) - else: - if debug: - print "NO CHILD?", component + _add_child(result, child, component) elif isinstance(item, aaf.mob.TimelineMobSlot): result = otio.schema.Track() child = _transcribe(item.segment, parent=item, masterMobs=masterMobs) + _add_child(result, child, item.segment) if child is not None: child.metadata["AAF"]["MediaKind"] = str(item.segment.media_kind) - result.append(child) - else: - if debug: - print "NO CHILD?", item.segment elif isinstance(item, aaf.mob.MobSlot): result = otio.schema.Track() child = _transcribe(item.segment, parent=item, masterMobs=masterMobs) - if child is not None: - result.append(child) - else: - if debug: - print "NO CHILD?", item.segment + _add_child(result, child, item.segment) elif isinstance(item, aaf.component.Timecode): pass @@ -317,6 +307,14 @@ def _transcribe(item, parent=None, editRate=24, masterMobs=None): otio.opentime.RationalTime(length, editRate) ) + elif isinstance(item, aaf.component.DescriptiveMarker): + + # TODO: We can get markers this way, but they come in on + # a separate Track. We need to consolidate them onto the + # same track(s) as the Clips. + # result = otio.schema.Marker() + pass + else: # result = otio.core.Composition() if debug: @@ -375,6 +373,7 @@ def _simplify(thing): # note that we ignore the return value of _simplify here # so that we don't ever get rid of the Timeline's Stack. _simplify(thing.tracks) + return thing elif isinstance(thing, otio.core.Composition): @@ -399,6 +398,10 @@ def _simplify(thing): def _contains_something_valuable(thing): + if isinstance(thing, otio.core.Item): + if len(thing.effects) > 0 or len(thing.markers) > 0: + return True + if isinstance(thing, otio.core.Composition): if len(thing) == 0: @@ -414,8 +417,6 @@ def _contains_something_valuable(thing): return False if isinstance(thing, otio.schema.Gap): - if len(thing.effects) > 0 or len(thing.markers) > 0: - return True # TODO: Are there other valuable things we should look for on a Gap? return False From 68181628332785f937066a0029ed6b7f22093b86 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Tue, 19 Dec 2017 17:40:27 -0800 Subject: [PATCH 23/44] Give anonymous AAF objects unique names to avoid issues with the OTIO __eq__ method. --- contrib/adapters/advanced_authoring_format.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index 43583f09f4..cf21e0164a 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -30,6 +30,7 @@ import os import sys +import re import opentimelineio as otio if os.environ["OTIO_AAF_PYTHON_LIB"] not in sys.path: @@ -43,16 +44,28 @@ import aaf.base # noqa debug = False +__names = set() +def _unique_name(name): + while name in __names: + m = re.search(r'(\d+)$', name) + if m: + num = int(m.group(1)) + name = re.sub(r'(\d+)$', str(num+1), name) + else: + name = name+" 2" + __names.add(name) + return name + def _get_name(item): if hasattr(item, 'name'): name = item.name if name: return name if isinstance(item, aaf.component.SourceClip): - return item.resolve_ref().name or "Untitled SourceClip" - return _get_class_name(item) + return item.resolve_ref().name or _unique_name("Untitled SourceClip") + return _unique_name(_get_class_name(item)) def _get_class_name(item): @@ -432,6 +445,7 @@ def read_from_file(filepath, simplify=True): storage = f.storage # topLevelMobs = list(storage.toplevel_mobs()) + __names.clear() result = _transcribe(storage) _fix_transitions(result) From c35760e9e7e7f465744de6faceeac75e4d44b941 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Tue, 19 Dec 2017 17:41:00 -0800 Subject: [PATCH 24/44] Avoid an extra level of nesting at the top of a multitrack AAF. --- contrib/adapters/advanced_authoring_format.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index cf21e0164a..427d5e60c0 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -276,7 +276,8 @@ def _transcribe(item, parent=None, editRate=24, masterMobs=None): ) elif isinstance(item, aaf.component.NestedScope): - result = otio.schema.Track() + # TODO: Is this the right class? + result = otio.schema.Stack() for segment in item.segments(): child = _transcribe(segment, parent=item, masterMobs=masterMobs) @@ -383,9 +384,13 @@ def _simplify(thing): return thing elif isinstance(thing, otio.schema.Timeline): - # note that we ignore the return value of _simplify here - # so that we don't ever get rid of the Timeline's Stack. - _simplify(thing.tracks) + result = _simplify(thing.tracks) + + # Only replace the Timeline's stack if the simplified result + # was also a Stack. Otherwise leave it (the contents will have + # been simplified in place). + if isinstance(result, otio.schema.Stack): + thing.tracks = result return thing From 129cd72b616cceb838b5d802eafd815233e6ff6a Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Tue, 19 Dec 2017 17:43:37 -0800 Subject: [PATCH 25/44] Updated test based on new unique naming. Lint. --- contrib/adapters/advanced_authoring_format.py | 3 ++- contrib/adapters/tests/test_aaf_adapter.py | 12 ++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index 427d5e60c0..7edf2d2e7b 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -58,6 +58,7 @@ def _unique_name(name): __names.add(name) return name + def _get_name(item): if hasattr(item, 'name'): name = item.name @@ -322,7 +323,7 @@ def _transcribe(item, parent=None, editRate=24, masterMobs=None): ) elif isinstance(item, aaf.component.DescriptiveMarker): - + # TODO: We can get markers this way, but they come in on # a separate Track. We need to consolidate them onto the # same track(s) as the Clips. diff --git a/contrib/adapters/tests/test_aaf_adapter.py b/contrib/adapters/tests/test_aaf_adapter.py index 5ff45f0f32..34939abf34 100644 --- a/contrib/adapters/tests/test_aaf_adapter.py +++ b/contrib/adapters/tests/test_aaf_adapter.py @@ -289,15 +289,15 @@ def test_aaf_read_transitions(self): "Filler", "Transition", "tech.fux (loop)-HD.mp4", - "Transition", + "Transition 2", "t-hawk (loop)-HD.mp4", - "Transition", - "Filler", - "Transition", + "Transition 3", + "Filler 2", + "Transition 4", "KOLL-HD.mp4", "brokchrd (loop)-HD.mp4", - "Transition", - "Filler" + "Transition 5", + "Filler 3" ] ) From e07b04c41becd1206ab5ddf6681c55ecc732e5a8 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Wed, 20 Dec 2017 10:47:08 -0800 Subject: [PATCH 26/44] Added track_trimmed_to_range in track_algo. --- opentimelineio/algorithms/__init__.py | 3 +- opentimelineio/algorithms/track_algo.py | 43 +++++- tests/test_sequence_algo.py | 178 ++++++++++++++++++++++++ 3 files changed, 220 insertions(+), 4 deletions(-) diff --git a/opentimelineio/algorithms/__init__.py b/opentimelineio/algorithms/__init__.py index ca70119dd2..102e02d2fc 100644 --- a/opentimelineio/algorithms/__init__.py +++ b/opentimelineio/algorithms/__init__.py @@ -26,5 +26,6 @@ # flake8: noqa from .track_algo import ( + track_trimmed_to_range, track_with_expanded_transitions -) +) \ No newline at end of file diff --git a/opentimelineio/algorithms/track_algo.py b/opentimelineio/algorithms/track_algo.py index 1c1d627328..0e324d6c7a 100644 --- a/opentimelineio/algorithms/track_algo.py +++ b/opentimelineio/algorithms/track_algo.py @@ -32,7 +32,44 @@ ) -def track_with_expanded_transitions(in_seq): +def track_trimmed_to_range(in_track, trim_range): + """Returns a new track that is a copy of the in_track, but with items + outside the trim_range removed and items on the ends trimmed to the + trim_range. Note that the track is never expanded, only shortened. + Please note that you could do nearly the same thing non-destructively by + just setting the Track's source_range but sometimes you want to really cut + away the stuff outside and that's what this function is meant for.""" + new_track = copy.deepcopy(in_track) + + # iterate backwards so we can delete items + for c, child in reversed(list(enumerate(new_track))): + child_range = child.range_in_parent() + if not trim_range.overlaps(child_range): + # completely outside the trim range, so we discard it + del new_track[c] + elif trim_range.contains(child_range): + # completely contained, keep the whole thing + pass + else: + # we need to clip the end(s) + child_source_range = child.trimmed_range() + + # should we trim the start? + if trim_range.start_time > child_range.start_time: + trim_amount = trim_range.start_time - child_range.start_time + child_source_range.start_time += trim_amount + child_source_range.duration -= trim_amount + + # should we trim the end? + trim_end = trim_range.end_time_exclusive() + child_end = child_range.end_time_exclusive() + if trim_end < child_end: + trim_amount = child_end - trim_end + child_source_range.duration -= trim_amount + + return new_track + +def track_with_expanded_transitions(in_track): """Expands transitions such that neighboring clips are trimmed into regions of overlap. @@ -48,14 +85,14 @@ def track_with_expanded_transitions(in_seq): result_track = [] - seq_iter = iter(in_seq) + seq_iter = iter(in_track) prev_thing = None thing = next(seq_iter, None) next_thing = next(seq_iter, None) while thing is not None: if isinstance(thing, schema.Transition): - result_track.append(_expand_transition(thing, in_seq)) + result_track.append(_expand_transition(thing, in_track)) else: # not a transition, but might be trimmed by one before or after # in the track diff --git a/tests/test_sequence_algo.py b/tests/test_sequence_algo.py index 88e28ce7c4..41aeef0651 100644 --- a/tests/test_sequence_algo.py +++ b/tests/test_sequence_algo.py @@ -235,3 +235,181 @@ def DISABLED_test_expand_track(self): seq[-1].source_range, expanded_seq[-1].source_range ) + + +class TrackTrimmingTests(unittest.TestCase): + """ test harness for track trimming function """ + + def make_sample_track(self): + return otio.adapters.read_from_string(""" + { + "OTIO_SCHEMA": "Track.1", + "children": [ + { + "OTIO_SCHEMA": "Clip.1", + "effects": [], + "markers": [], + "media_reference": null, + "metadata": {}, + "name": "A", + "source_range": { + "OTIO_SCHEMA": "TimeRange.1", + "duration": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 50 + }, + "start_time": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 0.0 + } + } + }, + { + "OTIO_SCHEMA": "Clip.1", + "effects": [], + "markers": [], + "media_reference": null, + "metadata": {}, + "name": "B", + "source_range": { + "OTIO_SCHEMA": "TimeRange.1", + "duration": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 50 + }, + "start_time": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 0.0 + } + } + }, + { + "OTIO_SCHEMA": "Clip.1", + "effects": [], + "markers": [], + "media_reference": null, + "metadata": {}, + "name": "C", + "source_range": { + "OTIO_SCHEMA": "TimeRange.1", + "duration": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 50 + }, + "start_time": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 0.0 + } + } + } + ], + "effects": [], + "kind": "Video", + "markers": [], + "metadata": {}, + "name": "Sequence1", + "source_range": null + } + """, "otio_json") + + def test_trim_to_existing_range(self): + original_track = self.make_sample_track() + self.assertEqual( + original_track.trimmed_range(), + otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(0,24), + duration=otio.opentime.RationalTime(150,24) + ) + ) + + # trim to the exact range it already has + trimmed = otio.algorithms.track_trimmed_to_range( + original_track, + otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(0,24), + duration=otio.opentime.RationalTime(150,24) + ) + ) + # it shouldn't have changed at all + self.assertEqual(original_track, trimmed) + + def test_trim_to_longer_range(self): + original_track = self.make_sample_track() + # trim to a larger range + trimmed = otio.algorithms.track_trimmed_to_range( + original_track, + otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(-10,24), + duration=otio.opentime.RationalTime(160,24) + ) + ) + # it shouldn't have changed at all + self.assertEqual(original_track, trimmed) + + def test_trim_front(self): + original_track = self.make_sample_track() + # trim off the front (clip A and part of B) + trimmed = otio.algorithms.track_trimmed_to_range( + original_track, + otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(60,24), + duration=otio.opentime.RationalTime(90,24) + ) + ) + self.assertNotEqual(original_track, trimmed) + self.assertEqual(len(trimmed), 2) + self.assertEqual( + trimmed.trimmed_range(), + otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(0,24), + duration=otio.opentime.RationalTime(90,24) + ) + ) + # did clip B get trimmed? + self.assertEqual(trimmed[0].name, "B") + self.assertEqual( + trimmed[0].trimmed_range(), + otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(10,24), + duration=otio.opentime.RationalTime(40,24) + ) + ) + # clip C should have been left alone + self.assertEqual(trimmed[1], original_track[2]) + + def test_trim_end(self): + original_track = self.make_sample_track() + # trim off the end (clip C and part of B) + trimmed = otio.algorithms.track_trimmed_to_range( + original_track, + otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(0,24), + duration=otio.opentime.RationalTime(90,24) + ) + ) + self.assertNotEqual(original_track, trimmed) + self.assertEqual(len(trimmed), 2) + self.assertEqual( + trimmed.trimmed_range(), + otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(0,24), + duration=otio.opentime.RationalTime(90,24) + ) + ) + # clip A should have been left alone + self.assertEqual(trimmed[0], original_track[0]) + # did clip B get trimmed? + self.assertEqual(trimmed[1].name, "B") + self.assertEqual( + trimmed[1].trimmed_range(), + otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(0,24), + duration=otio.opentime.RationalTime(40,24) + ) + ) From 399ece3798798ea54ec46ed22431f5b279b3c2d3 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Wed, 20 Dec 2017 10:48:46 -0800 Subject: [PATCH 27/44] Renamed test_sequence_algo to test_track_algo --- tests/{test_sequence_algo.py => test_track_algo.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tests/{test_sequence_algo.py => test_track_algo.py} (100%) diff --git a/tests/test_sequence_algo.py b/tests/test_track_algo.py similarity index 100% rename from tests/test_sequence_algo.py rename to tests/test_track_algo.py From 80c4f95f29f53de21215af25f7e749155f60f44e Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Wed, 20 Dec 2017 10:51:58 -0800 Subject: [PATCH 28/44] Lint. --- opentimelineio/algorithms/track_algo.py | 1 + tests/test_track_algo.py | 124 ++++++++++++------------ 2 files changed, 63 insertions(+), 62 deletions(-) diff --git a/opentimelineio/algorithms/track_algo.py b/opentimelineio/algorithms/track_algo.py index 0e324d6c7a..d4af787d56 100644 --- a/opentimelineio/algorithms/track_algo.py +++ b/opentimelineio/algorithms/track_algo.py @@ -69,6 +69,7 @@ def track_trimmed_to_range(in_track, trim_range): return new_track + def track_with_expanded_transitions(in_track): """Expands transitions such that neighboring clips are trimmed into regions of overlap. diff --git a/tests/test_track_algo.py b/tests/test_track_algo.py index 41aeef0651..7110e5651d 100644 --- a/tests/test_track_algo.py +++ b/tests/test_track_algo.py @@ -243,88 +243,88 @@ class TrackTrimmingTests(unittest.TestCase): def make_sample_track(self): return otio.adapters.read_from_string(""" { - "OTIO_SCHEMA": "Track.1", + "OTIO_SCHEMA": "Track.1", "children": [ { - "OTIO_SCHEMA": "Clip.1", - "effects": [], - "markers": [], - "media_reference": null, - "metadata": {}, - "name": "A", + "OTIO_SCHEMA": "Clip.1", + "effects": [], + "markers": [], + "media_reference": null, + "metadata": {}, + "name": "A", "source_range": { - "OTIO_SCHEMA": "TimeRange.1", + "OTIO_SCHEMA": "TimeRange.1", "duration": { - "OTIO_SCHEMA": "RationalTime.1", - "rate": 24, + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, "value": 50 - }, + }, "start_time": { - "OTIO_SCHEMA": "RationalTime.1", - "rate": 24, + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, "value": 0.0 } } }, { - "OTIO_SCHEMA": "Clip.1", - "effects": [], - "markers": [], - "media_reference": null, - "metadata": {}, - "name": "B", + "OTIO_SCHEMA": "Clip.1", + "effects": [], + "markers": [], + "media_reference": null, + "metadata": {}, + "name": "B", "source_range": { - "OTIO_SCHEMA": "TimeRange.1", + "OTIO_SCHEMA": "TimeRange.1", "duration": { - "OTIO_SCHEMA": "RationalTime.1", - "rate": 24, + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, "value": 50 - }, + }, "start_time": { - "OTIO_SCHEMA": "RationalTime.1", - "rate": 24, + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, "value": 0.0 } } }, { - "OTIO_SCHEMA": "Clip.1", - "effects": [], - "markers": [], - "media_reference": null, - "metadata": {}, - "name": "C", + "OTIO_SCHEMA": "Clip.1", + "effects": [], + "markers": [], + "media_reference": null, + "metadata": {}, + "name": "C", "source_range": { - "OTIO_SCHEMA": "TimeRange.1", + "OTIO_SCHEMA": "TimeRange.1", "duration": { - "OTIO_SCHEMA": "RationalTime.1", - "rate": 24, + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, "value": 50 - }, + }, "start_time": { - "OTIO_SCHEMA": "RationalTime.1", - "rate": 24, + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, "value": 0.0 } } } - ], - "effects": [], - "kind": "Video", - "markers": [], - "metadata": {}, - "name": "Sequence1", + ], + "effects": [], + "kind": "Video", + "markers": [], + "metadata": {}, + "name": "Sequence1", "source_range": null } """, "otio_json") - + def test_trim_to_existing_range(self): original_track = self.make_sample_track() self.assertEqual( original_track.trimmed_range(), otio.opentime.TimeRange( - start_time=otio.opentime.RationalTime(0,24), - duration=otio.opentime.RationalTime(150,24) + start_time=otio.opentime.RationalTime(0, 24), + duration=otio.opentime.RationalTime(150, 24) ) ) @@ -332,8 +332,8 @@ def test_trim_to_existing_range(self): trimmed = otio.algorithms.track_trimmed_to_range( original_track, otio.opentime.TimeRange( - start_time=otio.opentime.RationalTime(0,24), - duration=otio.opentime.RationalTime(150,24) + start_time=otio.opentime.RationalTime(0, 24), + duration=otio.opentime.RationalTime(150, 24) ) ) # it shouldn't have changed at all @@ -345,8 +345,8 @@ def test_trim_to_longer_range(self): trimmed = otio.algorithms.track_trimmed_to_range( original_track, otio.opentime.TimeRange( - start_time=otio.opentime.RationalTime(-10,24), - duration=otio.opentime.RationalTime(160,24) + start_time=otio.opentime.RationalTime(-10, 24), + duration=otio.opentime.RationalTime(160, 24) ) ) # it shouldn't have changed at all @@ -358,8 +358,8 @@ def test_trim_front(self): trimmed = otio.algorithms.track_trimmed_to_range( original_track, otio.opentime.TimeRange( - start_time=otio.opentime.RationalTime(60,24), - duration=otio.opentime.RationalTime(90,24) + start_time=otio.opentime.RationalTime(60, 24), + duration=otio.opentime.RationalTime(90, 24) ) ) self.assertNotEqual(original_track, trimmed) @@ -367,8 +367,8 @@ def test_trim_front(self): self.assertEqual( trimmed.trimmed_range(), otio.opentime.TimeRange( - start_time=otio.opentime.RationalTime(0,24), - duration=otio.opentime.RationalTime(90,24) + start_time=otio.opentime.RationalTime(0, 24), + duration=otio.opentime.RationalTime(90, 24) ) ) # did clip B get trimmed? @@ -376,8 +376,8 @@ def test_trim_front(self): self.assertEqual( trimmed[0].trimmed_range(), otio.opentime.TimeRange( - start_time=otio.opentime.RationalTime(10,24), - duration=otio.opentime.RationalTime(40,24) + start_time=otio.opentime.RationalTime(10, 24), + duration=otio.opentime.RationalTime(40, 24) ) ) # clip C should have been left alone @@ -389,8 +389,8 @@ def test_trim_end(self): trimmed = otio.algorithms.track_trimmed_to_range( original_track, otio.opentime.TimeRange( - start_time=otio.opentime.RationalTime(0,24), - duration=otio.opentime.RationalTime(90,24) + start_time=otio.opentime.RationalTime(0, 24), + duration=otio.opentime.RationalTime(90, 24) ) ) self.assertNotEqual(original_track, trimmed) @@ -398,8 +398,8 @@ def test_trim_end(self): self.assertEqual( trimmed.trimmed_range(), otio.opentime.TimeRange( - start_time=otio.opentime.RationalTime(0,24), - duration=otio.opentime.RationalTime(90,24) + start_time=otio.opentime.RationalTime(0, 24), + duration=otio.opentime.RationalTime(90, 24) ) ) # clip A should have been left alone @@ -409,7 +409,7 @@ def test_trim_end(self): self.assertEqual( trimmed[1].trimmed_range(), otio.opentime.TimeRange( - start_time=otio.opentime.RationalTime(0,24), - duration=otio.opentime.RationalTime(40,24) + start_time=otio.opentime.RationalTime(0, 24), + duration=otio.opentime.RationalTime(40, 24) ) ) From e815e458332b34dbb613bc6c357d2d7e4e527318 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Wed, 20 Dec 2017 14:03:19 -0800 Subject: [PATCH 29/44] Added flatten_stack to algorithms, with unit test. --- opentimelineio/algorithms/__init__.py | 4 + opentimelineio/algorithms/stack_algo.py | 68 ++++ tests/test_stack_algo.py | 396 ++++++++++++++++++++++++ 3 files changed, 468 insertions(+) create mode 100644 opentimelineio/algorithms/stack_algo.py create mode 100644 tests/test_stack_algo.py diff --git a/opentimelineio/algorithms/__init__.py b/opentimelineio/algorithms/__init__.py index 102e02d2fc..16fa21a11d 100644 --- a/opentimelineio/algorithms/__init__.py +++ b/opentimelineio/algorithms/__init__.py @@ -28,4 +28,8 @@ from .track_algo import ( track_trimmed_to_range, track_with_expanded_transitions +) + +from .stack_algo import ( + flatten_stack ) \ No newline at end of file diff --git a/opentimelineio/algorithms/stack_algo.py b/opentimelineio/algorithms/stack_algo.py new file mode 100644 index 0000000000..c3c86a9e2a --- /dev/null +++ b/opentimelineio/algorithms/stack_algo.py @@ -0,0 +1,68 @@ +# +# Copyright 2017 Pixar Animation Studios +# +# Licensed under the Apache License, Version 2.0 (the "Apache License") +# with the following modification; you may not use this file except in +# compliance with the Apache License and the following modification to it: +# Section 6. Trademarks. is deleted and replaced with: +# +# 6. Trademarks. This License does not grant permission to use the trade +# names, trademarks, service marks, or product names of the Licensor +# and its affiliates, except as required to comply with Section 4(c) of +# the License and to reproduce the content of the NOTICE file. +# +# You may obtain a copy of the Apache License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the Apache License with the above modification is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the Apache License for the specific +# language governing permissions and limitations under the Apache License. +# + +__doc__ = """ Algorithms for stack objects. """ + +import copy + +from .. import ( + exceptions, + schema +) +from . import ( + track_algo +) + +def flatten_stack(in_stack): + """ Flatten a Stack into a single Track. + """ + + if not isinstance(in_stack, schema.Stack): + raise ValueError("Input to flatten_stack must be a Stack") + + flat_track = schema.Track() + flat_track.name = "Flattened" + + def _get_next_item(in_stack, track_index=0, trim_range=None): + if track_index < len(in_stack): + track = in_stack[track_index] + if trim_range is not None: + track = track_algo.track_trimmed_to_range(track, trim_range) + for item in track: + if item.visible(): + yield item + else: + # TODO: in the range... + for more in _get_next_item( + in_stack, + track_index+1, + item.range_in_parent() + ): + yield more + + for item in _get_next_item(in_stack): + #print("ITEM: {}".format(item)) + flat_track.append(copy.deepcopy(item)) + + return flat_track \ No newline at end of file diff --git a/tests/test_stack_algo.py b/tests/test_stack_algo.py new file mode 100644 index 0000000000..f48170b8c6 --- /dev/null +++ b/tests/test_stack_algo.py @@ -0,0 +1,396 @@ +# +# Copyright 2017 Pixar Animation Studios +# +# Licensed under the Apache License, Version 2.0 (the "Apache License") +# with the following modification; you may not use this file except in +# compliance with the Apache License and the following modification to it: +# Section 6. Trademarks. is deleted and replaced with: +# +# 6. Trademarks. This License does not grant permission to use the trade +# names, trademarks, service marks, or product names of the Licensor +# and its affiliates, except as required to comply with Section 4(c) of +# the License and to reproduce the content of the NOTICE file. +# +# You may obtain a copy of the Apache License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the Apache License with the above modification is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the Apache License for the specific +# language governing permissions and limitations under the Apache License. +# + +"""Test file for the stack algorithms library.""" + +import unittest +import copy + +import opentimelineio as otio + + +class StackAlgoTests(unittest.TestCase): + """ test harness for stack algo functions """ + + def setUp(self): + self.trackZ = otio.adapters.read_from_string(""" + { + "OTIO_SCHEMA": "Track.1", + "children": [ + { + "OTIO_SCHEMA": "Clip.1", + "effects": [], + "markers": [], + "media_reference": null, + "metadata": {}, + "name": "Z", + "source_range": { + "OTIO_SCHEMA": "TimeRange.1", + "duration": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 150 + }, + "start_time": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 0.0 + } + } + } + ], + "effects": [], + "kind": "Video", + "markers": [], + "metadata": {}, + "name": "Sequence1", + "source_range": null + } + """, "otio_json") + + self.trackABC = otio.adapters.read_from_string(""" + { + "OTIO_SCHEMA": "Track.1", + "children": [ + { + "OTIO_SCHEMA": "Clip.1", + "effects": [], + "markers": [], + "media_reference": null, + "metadata": {}, + "name": "A", + "source_range": { + "OTIO_SCHEMA": "TimeRange.1", + "duration": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 50 + }, + "start_time": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 0.0 + } + } + }, + { + "OTIO_SCHEMA": "Clip.1", + "effects": [], + "markers": [], + "media_reference": null, + "metadata": {}, + "name": "B", + "source_range": { + "OTIO_SCHEMA": "TimeRange.1", + "duration": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 50 + }, + "start_time": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 0.0 + } + } + }, + { + "OTIO_SCHEMA": "Clip.1", + "effects": [], + "markers": [], + "media_reference": null, + "metadata": {}, + "name": "C", + "source_range": { + "OTIO_SCHEMA": "TimeRange.1", + "duration": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 50 + }, + "start_time": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 0.0 + } + } + } + ], + "effects": [], + "kind": "Video", + "markers": [], + "metadata": {}, + "name": "Sequence1", + "source_range": null + } + """, "otio_json") + + self.trackDgE = otio.adapters.read_from_string(""" + { + "OTIO_SCHEMA": "Track.1", + "children": [ + { + "OTIO_SCHEMA": "Clip.1", + "effects": [], + "markers": [], + "media_reference": null, + "metadata": {}, + "name": "D", + "source_range": { + "OTIO_SCHEMA": "TimeRange.1", + "duration": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 50 + }, + "start_time": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 0.0 + } + } + }, + { + "OTIO_SCHEMA": "Gap.1", + "effects": [], + "markers": [], + "media_reference": null, + "metadata": {}, + "name": "g", + "source_range": { + "OTIO_SCHEMA": "TimeRange.1", + "duration": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 50 + }, + "start_time": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 0.0 + } + } + }, + { + "OTIO_SCHEMA": "Clip.1", + "effects": [], + "markers": [], + "media_reference": null, + "metadata": {}, + "name": "E", + "source_range": { + "OTIO_SCHEMA": "TimeRange.1", + "duration": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 50 + }, + "start_time": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 0.0 + } + } + } + ], + "effects": [], + "kind": "Video", + "markers": [], + "metadata": {}, + "name": "Sequence1", + "source_range": null + } + """, "otio_json") + + self.trackgFg = otio.adapters.read_from_string(""" + { + "OTIO_SCHEMA": "Track.1", + "children": [ + { + "OTIO_SCHEMA": "Gap.1", + "effects": [], + "markers": [], + "media_reference": null, + "metadata": {}, + "name": "g1", + "source_range": { + "OTIO_SCHEMA": "TimeRange.1", + "duration": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 50 + }, + "start_time": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 0.0 + } + } + }, + { + "OTIO_SCHEMA": "Clip.1", + "effects": [], + "markers": [], + "media_reference": null, + "metadata": {}, + "name": "F", + "source_range": { + "OTIO_SCHEMA": "TimeRange.1", + "duration": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 50 + }, + "start_time": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 0.0 + } + } + }, + { + "OTIO_SCHEMA": "Gap.1", + "effects": [], + "markers": [], + "media_reference": null, + "metadata": {}, + "name": "g2", + "source_range": { + "OTIO_SCHEMA": "TimeRange.1", + "duration": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 50 + }, + "start_time": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 0.0 + } + } + } + ], + "effects": [], + "kind": "Video", + "markers": [], + "metadata": {}, + "name": "Sequence1", + "source_range": null + } + """, "otio_json") + + def test_flatten_single_track(self): + stack = otio.schema.Stack(children=[ + self.trackABC + ]) + flat_track = otio.algorithms.flatten_stack(stack) + self.assertEqual( + flat_track[:], + self.trackABC[:] + ) + + def test_flatten_obscured_track(self): + stack = otio.schema.Stack(children=[ + self.trackABC, + self.trackZ + ]) + flat_track = otio.algorithms.flatten_stack(stack) + self.assertEqual( + flat_track[:], + self.trackABC[:] + ) + + stack = otio.schema.Stack(children=[ + self.trackZ, + self.trackABC + ]) + flat_track = otio.algorithms.flatten_stack(stack) + self.assertEqual( + flat_track[:], + self.trackZ[:] + ) + + # def assertOTIOSame(self, a, b): + # def j(o): + # return otio.adapters.write_to_string(o, "otio_json") + # self.assertEqual(j(a), j(b)) + + def test_flatten_gaps(self): + stack = otio.schema.Stack(children=[ + self.trackDgE, + self.trackABC + ]) + flat_track = otio.algorithms.flatten_stack(stack) + self.assertEqual(flat_track[0], self.trackDgE[0]) + self.assertEqual(flat_track[1], self.trackABC[1]) + self.assertEqual(flat_track[2], self.trackDgE[2]) + + stack = otio.schema.Stack(children=[ + self.trackgFg, + self.trackABC + ]) + flat_track = otio.algorithms.flatten_stack(stack) + self.assertEqual(flat_track[0], self.trackABC[0]) + self.assertEqual(flat_track[1], self.trackgFg[1]) + self.assertEqual(flat_track[2], self.trackABC[2]) + + def test_flatten_gaps_with_trims(self): + stack = otio.schema.Stack(children=[ + self.trackDgE, + self.trackZ + ]) + flat_track = otio.algorithms.flatten_stack(stack) + self.assertEqual(flat_track[0], self.trackDgE[0]) + self.assertEqual(flat_track[1].name, "Z") + self.assertEqual( + flat_track[1].source_range, + otio.opentime.TimeRange( + otio.opentime.RationalTime(50, 24), + otio.opentime.RationalTime(50, 24) + ) + ) + self.assertEqual(flat_track[2], self.trackDgE[2]) + + stack = otio.schema.Stack(children=[ + self.trackgFg, + self.trackZ + ]) + flat_track = otio.algorithms.flatten_stack(stack) + self.assertEqual(flat_track[0].name, "Z") + self.assertEqual( + flat_track[0].source_range, + otio.opentime.TimeRange( + otio.opentime.RationalTime(0, 24), + otio.opentime.RationalTime(50, 24) + ) + ) + self.assertEqual(flat_track[1], self.trackgFg[1]) + self.assertEqual(flat_track[2].name, "Z") + self.assertEqual( + flat_track[2].source_range, + otio.opentime.TimeRange( + otio.opentime.RationalTime(100, 24), + otio.opentime.RationalTime(50, 24) + ) + ) From d3eb0c39520e546feba6db108eccfce6af549e06 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Thu, 21 Dec 2017 17:25:47 -0800 Subject: [PATCH 30/44] Lint. --- opentimelineio/algorithms/stack_algo.py | 5 ++--- tests/test_stack_algo.py | 4 +--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/opentimelineio/algorithms/stack_algo.py b/opentimelineio/algorithms/stack_algo.py index c3c86a9e2a..9b2a383089 100644 --- a/opentimelineio/algorithms/stack_algo.py +++ b/opentimelineio/algorithms/stack_algo.py @@ -27,13 +27,13 @@ import copy from .. import ( - exceptions, schema ) from . import ( track_algo ) + def flatten_stack(in_stack): """ Flatten a Stack into a single Track. """ @@ -62,7 +62,6 @@ def _get_next_item(in_stack, track_index=0, trim_range=None): yield more for item in _get_next_item(in_stack): - #print("ITEM: {}".format(item)) flat_track.append(copy.deepcopy(item)) - return flat_track \ No newline at end of file + return flat_track diff --git a/tests/test_stack_algo.py b/tests/test_stack_algo.py index f48170b8c6..08188d0257 100644 --- a/tests/test_stack_algo.py +++ b/tests/test_stack_algo.py @@ -25,8 +25,6 @@ """Test file for the stack algorithms library.""" import unittest -import copy - import opentimelineio as otio @@ -68,7 +66,7 @@ def setUp(self): "source_range": null } """, "otio_json") - + self.trackABC = otio.adapters.read_from_string(""" { "OTIO_SCHEMA": "Track.1", From bfdbaf9409ea21e212bf89854d46d8fffea00ed5 Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Thu, 21 Dec 2017 17:37:16 -0800 Subject: [PATCH 31/44] Lint. --- contrib/adapters/advanced_authoring_format.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/adapters/advanced_authoring_format.py b/contrib/adapters/advanced_authoring_format.py index 7edf2d2e7b..3045eaddf5 100644 --- a/contrib/adapters/advanced_authoring_format.py +++ b/contrib/adapters/advanced_authoring_format.py @@ -96,7 +96,7 @@ def _transcribe_property(prop): # result[child.name] = _transcribe(child) else: if debug: - print "???", child + print("??? {}".format(child)) return result else: @@ -106,7 +106,7 @@ def _transcribe_property(prop): def _add_child(parent, child, source): if child is None: if debug: - print "MISSING CHILD?", source + print("MISSING CHILD? {}".format(source)) elif isinstance(child, otio.schema.Marker): parent.markers.append(child) else: From e781f2c0569fabb3763a9ece86145abef9ea22f8 Mon Sep 17 00:00:00 2001 From: Mike Mahony Date: Sat, 16 Dec 2017 15:47:56 -0800 Subject: [PATCH 32/44] Make TITLE optional --- opentimelineio/adapters/cmx_3600.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/opentimelineio/adapters/cmx_3600.py b/opentimelineio/adapters/cmx_3600.py index 5557147b19..29cff37231 100644 --- a/opentimelineio/adapters/cmx_3600.py +++ b/opentimelineio/adapters/cmx_3600.py @@ -596,10 +596,12 @@ def write_to_string(input_otio, rate=None, style='avid'): lines = [] - lines.append("TITLE: {}".format(input_otio.name)) + if input_otio.name: + lines.append("TITLE: {}".format(input_otio.name)) + lines.append("") + # TODO: We should try to detect the frame rate and output an # appropriate "FCM: NON-DROP FRAME" etc here. - lines.append("") edit_number = 1 From 3c12ef438bf8e1b59743493f07e4efe880a9b01a Mon Sep 17 00:00:00 2001 From: Mike Mahony Date: Sat, 16 Dec 2017 15:49:12 -0800 Subject: [PATCH 33/44] Refactor for impending transition support --- opentimelineio/adapters/cmx_3600.py | 198 +++++++++++++++------------- 1 file changed, 105 insertions(+), 93 deletions(-) diff --git a/opentimelineio/adapters/cmx_3600.py b/opentimelineio/adapters/cmx_3600.py index 29cff37231..3b6458557e 100644 --- a/opentimelineio/adapters/cmx_3600.py +++ b/opentimelineio/adapters/cmx_3600.py @@ -603,111 +603,123 @@ def write_to_string(input_otio, rate=None, style='avid'): # TODO: We should try to detect the frame rate and output an # appropriate "FCM: NON-DROP FRAME" etc here. - edit_number = 1 + edit_number = 0 track = input_otio.tracks[0] edl_rate = rate or track.duration().rate + kind = "V" if track.kind == otio.schema.TrackKind.Video else "A" for i, clip in enumerate(track): - source_tc_in = otio.opentime.to_timecode( - clip.source_range.start_time, - edl_rate - ) - source_tc_out = otio.opentime.to_timecode( - clip.source_range.end_time_exclusive(), - edl_rate - ) + edit_number += 1 + event_line = EventLine(edit_number=edit_number, kind=kind, rate=edl_rate) + event_line.source_in = clip.source_range.start_time + event_line.source_out = clip.source_range.end_time_exclusive() range_in_track = track.range_of_child_at_index(i) - record_tc_in = otio.opentime.to_timecode( - range_in_track.start_time, - edl_rate - ) - record_tc_out = otio.opentime.to_timecode( - range_in_track.end_time_exclusive(), - edl_rate - ) + event_line.record_in = range_in_track.start_time + event_line.record_out = range_in_track.end_time_exclusive() + if clip.media_reference and isinstance(clip.media_reference, otio.schema.Gap): + event_line.reel = 'BL' - reel = "AX" - name = None - url = None - - if clip.media_reference: - if isinstance(clip.media_reference, otio.schema.Gap): - reel = "BL" - elif hasattr(clip.media_reference, 'target_url'): - url = clip.media_reference.target_url - else: - url = clip.name + lines.append(str(event_line)) + lines += generate_comment_lines(clip, style=style, edl_rate=edl_rate) + lines.append("") - name = clip.name + text = "\n".join(lines) + return text - kind = "V" if track.kind == otio.schema.TrackKind.Video else "A" - lines.append( - "{:03d} {:8} {:5} C {} {} {} {}".format( - edit_number, - reel, - kind, - source_tc_in, - source_tc_out, - record_tc_in, - record_tc_out +def generate_comment_lines(clip, style, edl_rate, from_or_to='FROM'): + lines = [] + url = None + if clip.media_reference: + if hasattr(clip.media_reference, 'target_url'): + url = clip.media_reference.target_url + else: + url = clip.name + + if from_or_to not in ['FROM', 'TO']: + raise otio.exceptions.NotSupportedError( + "The clip FROM or TO value '{}' is not supported.".format( + from_or_to ) ) - if name: - # Avid Media Composer outputs two spaces before the - # clip name so we match that. - lines.append("* FROM CLIP NAME: {}".format(name)) - if url and style == 'avid': - lines.append("* FROM CLIP: {}".format(url)) - if url and style == 'nucoda': - lines.append("* FROM FILE: {}".format(url)) - - cdl = clip.metadata.get('cdl') - if cdl: - asc_sop = cdl.get('asc_sop') - asc_sat = cdl.get('asc_sat') - if asc_sop: - lines.append( - "*ASC_SOP ({} {} {}) ({} {} {}) ({} {} {})".format( - asc_sop['slope'][0], - asc_sop['slope'][1], - asc_sop['slope'][2], - asc_sop['offset'][0], - asc_sop['offset'][1], - asc_sop['offset'][2], - asc_sop['power'][0], - asc_sop['power'][1], - asc_sop['power'][2] - )) - if asc_sat: - lines.append("*ASC_SAT {}".format( - asc_sat + if clip.name: + # Avid Media Composer outputs two spaces before the + # clip name so we match that. + lines.append("* {from_or_to} CLIP NAME: {name}".format(from_or_to=from_or_to, name=clip.name)) + if url and style == 'avid': + lines.append("* {from_or_to} CLIP: {url}".format(from_or_to=from_or_to, url=url)) + if url and style == 'nucoda': + lines.append("* {from_or_to} FILE: {url}".format(from_or_to=from_or_to, url=url)) + + cdl = clip.metadata.get('cdl') + if cdl: + asc_sop = cdl.get('asc_sop') + asc_sat = cdl.get('asc_sat') + if asc_sop: + lines.append( + "*ASC_SOP ({} {} {}) ({} {} {}) ({} {} {})".format( + asc_sop['slope'][0], + asc_sop['slope'][1], + asc_sop['slope'][2], + asc_sop['offset'][0], + asc_sop['offset'][1], + asc_sop['offset'][2], + asc_sop['power'][0], + asc_sop['power'][1], + asc_sop['power'][2] )) + if asc_sat: + lines.append("*ASC_SAT {}".format( + asc_sat + )) + + # Output any markers on this clip + for marker in clip.markers: + timecode = otio.opentime.to_timecode( + marker.marked_range.start_time, + edl_rate + ) - # Output any markers on this clip - for marker in clip.markers: - timecode = otio.opentime.to_timecode( - marker.marked_range.start_time, - edl_rate - ) - - color = marker.color - meta = marker.metadata.get("cmx_3600") - if not color and meta and meta.get("color"): - color = meta.get("color").upper() - comment = (marker.name or '').upper() - lines.append("* LOC: {} {:7} {}".format(timecode, color, comment)) - - # If we are carrying any unhandled CMX 3600 comments on this clip - # then output them blindly. - extra_comments = clip.metadata.get('cmx_3600', {}).get('comments', []) - for comment in extra_comments: - lines.append("* {}".format(comment)) - - lines.append("") - edit_number += 1 - - text = "\n".join(lines) - return text + color = marker.color + meta = marker.metadata.get("cmx_3600") + if not color and meta and meta.get("color"): + color = meta.get("color").upper() + comment = (marker.name or '').upper() + lines.append("* LOC: {} {:7} {}".format(timecode, color, comment)) + + # If we are carrying any unhandled CMX 3600 comments on this clip + # then output them blindly. + extra_comments = clip.metadata.get('cmx_3600', {}).get('comments', []) + for comment in extra_comments: + lines.append("* {}".format(comment)) + + return lines + + +class EventLine(object): + def __init__(self, edit_number=0, reel='AX', kind='V', rate=None): + self.__rate = rate + + self.edit_number = edit_number + self.reel = reel + self.kind = kind + + self.source_in = otio.opentime.RationalTime(0.0, rate=rate) + self.source_out = otio.opentime.RationalTime(0.0, rate=rate) + self.record_in = otio.opentime.RationalTime(0.0, rate=rate) + self.record_out = otio.opentime.RationalTime(0.0, rate=rate) + + def __str__(self): + ser = { + 'edit': self.edit_number, + 'reel': self.reel, + 'kind': self.kind, + 'src_in': otio.opentime.to_timecode(self.source_in, self.__rate), + 'src_out': otio.opentime.to_timecode(self.source_out, self.__rate), + 'rec_in': otio.opentime.to_timecode(self.record_in, self.__rate), + 'rec_out': otio.opentime.to_timecode(self.record_out, self.__rate), + } + + return "{edit:03d} {reel:8} {kind:5} C {src_in} {src_out} {rec_in} {rec_out}".format(**ser) From 5527dbfcc0cc7fe9085541285707b58eeebf2a63 Mon Sep 17 00:00:00 2001 From: Mike Mahony Date: Sat, 16 Dec 2017 15:57:24 -0800 Subject: [PATCH 34/44] Support EDL dissolve writes --- opentimelineio/adapters/cmx_3600.py | 99 +++++++++++++++++++++++++---- tests/test_cmx_3600_adapter.py | 58 +++++++++++++++++ 2 files changed, 143 insertions(+), 14 deletions(-) diff --git a/opentimelineio/adapters/cmx_3600.py b/opentimelineio/adapters/cmx_3600.py index 3b6458557e..18299eeccd 100644 --- a/opentimelineio/adapters/cmx_3600.py +++ b/opentimelineio/adapters/cmx_3600.py @@ -608,21 +608,69 @@ def write_to_string(input_otio, rate=None, style='avid'): track = input_otio.tracks[0] edl_rate = rate or track.duration().rate kind = "V" if track.kind == otio.schema.TrackKind.Video else "A" - for i, clip in enumerate(track): + look_ahead = lookahead_enumerate(track) + for i, clip, next_clip, next_next_clip in look_ahead: edit_number += 1 - event_line = EventLine(edit_number=edit_number, kind=kind, rate=edl_rate) - event_line.source_in = clip.source_range.start_time - event_line.source_out = clip.source_range.end_time_exclusive() - range_in_track = track.range_of_child_at_index(i) - event_line.record_in = range_in_track.start_time - event_line.record_out = range_in_track.end_time_exclusive() - if clip.media_reference and isinstance(clip.media_reference, otio.schema.Gap): - event_line.reel = 'BL' - - lines.append(str(event_line)) - lines += generate_comment_lines(clip, style=style, edl_rate=edl_rate) - lines.append("") + if isinstance(next_clip, otio.schema.Transition): + a_side, trans, b_side = clip, next_clip, next_next_clip + + # Add a line to represent this, SHORTER, event + a_side_line = EventLine(kind=kind, edit_number=edit_number, rate=edl_rate) + a_side_line.source_in = a_side.source_range.start_time + a_side_line.source_out = a_side.source_range.end_time_exclusive() - next_clip.in_offset + a_range_in_track = track.range_of_child_at_index(i) + a_side_line.record_in = a_range_in_track.start_time + a_side_line.record_out = a_range_in_track.end_time_exclusive() - next_clip.in_offset + if a_side.media_reference and isinstance(a_side.media_reference, otio.schema.Gap): + a_side_line.reel = 'BL' + + # Advance the edit number + edit_number += 1 + + b_side_line = EventLine(kind=kind, edit_number=edit_number, rate=edl_rate) + b_side_line.source_in = b_side.source_range.start_time + b_side_line.source_out = b_side.source_range.end_time_exclusive() + trans.in_offset + b_range_in_track = track.range_of_child_at_index(i + 2) + b_side_line.record_in = a_side_line.record_out + b_side_line.record_out = b_range_in_track.end_time_exclusive() + b_side_line.dissolve_length = trans.in_offset + trans.out_offset + if b_side.media_reference and isinstance(b_side.media_reference, otio.schema.Gap): + b_side_line.reel = 'BL' + + # Add a line to represent the middle cut + cut_line = EventLine(kind=kind, edit_number=edit_number, rate=edl_rate) + cut_line.reel = b_side_line.reel + cut_line.source_in = a_side_line.source_out + cut_line.source_out = a_side_line.source_out + cut_line.record_in = a_side_line.record_out + cut_line.record_out = a_side_line.record_out + + # Add the lines + lines.append(str(a_side_line)) + lines += generate_comment_lines(a_side, style=style, edl_rate=edl_rate) + lines.append(str(cut_line)) + lines.append(str(b_side_line)) + lines += generate_comment_lines(a_side, style=style, edl_rate=edl_rate) + lines += generate_comment_lines(b_side, style=style, edl_rate=edl_rate, from_or_to='TO') + + # Advance the iterater past the next 2 children (trans and clip b) + look_ahead.next() + look_ahead.next() + + else: + event_line = EventLine(edit_number=edit_number, kind=kind, rate=edl_rate) + event_line.source_in = clip.source_range.start_time + event_line.source_out = clip.source_range.end_time_exclusive() + range_in_track = track.range_of_child_at_index(i) + event_line.record_in = range_in_track.start_time + event_line.record_out = range_in_track.end_time_exclusive() + if clip.media_reference and isinstance(clip.media_reference, otio.schema.Gap): + event_line.reel = 'BL' + + lines.append(str(event_line)) + lines += generate_comment_lines(clip, style=style, edl_rate=edl_rate) + lines.append("") text = "\n".join(lines) return text @@ -698,6 +746,23 @@ def generate_comment_lines(clip, style, edl_rate, from_or_to='FROM'): return lines +def lookahead_enumerate(iterable): + iterator = iter(iterable) + i = 0 + a = iterator.next() + try: + b = iterator.next() + for c in iterator: + yield (i, a, b, c) + a, b, i = b, c, i + 1 + b, c = a, b + yield (i, b, c, None) + i += 1 + yield (i, c, None, None) + except StopIteration: + yield (i, a, None, None) + + class EventLine(object): def __init__(self, edit_number=0, reel='AX', kind='V', rate=None): self.__rate = rate @@ -711,6 +776,8 @@ def __init__(self, edit_number=0, reel='AX', kind='V', rate=None): self.record_in = otio.opentime.RationalTime(0.0, rate=rate) self.record_out = otio.opentime.RationalTime(0.0, rate=rate) + self.dissolve_length = otio.opentime.RationalTime(0.0, rate) + def __str__(self): ser = { 'edit': self.edit_number, @@ -720,6 +787,10 @@ def __str__(self): 'src_out': otio.opentime.to_timecode(self.source_out, self.__rate), 'rec_in': otio.opentime.to_timecode(self.record_in, self.__rate), 'rec_out': otio.opentime.to_timecode(self.record_out, self.__rate), + 'diss': int(otio.opentime.to_frames(self.dissolve_length, self.__rate)), } - return "{edit:03d} {reel:8} {kind:5} C {src_in} {src_out} {rec_in} {rec_out}".format(**ser) + if self.dissolve_length.value > 0: + return "{edit:03d} {reel:8} {kind:5} D {diss:03d} {src_in} {src_out} {rec_in} {rec_out}".format(**ser) + else: + return "{edit:03d} {reel:8} {kind:5} C {src_in} {src_out} {rec_in} {rec_out}".format(**ser) diff --git a/tests/test_cmx_3600_adapter.py b/tests/test_cmx_3600_adapter.py index 849f017761..f322df46f5 100755 --- a/tests/test_cmx_3600_adapter.py +++ b/tests/test_cmx_3600_adapter.py @@ -385,6 +385,64 @@ def test_nucoda_edl_write(self): '* FROM FILE: S:\\var\\tmp\\test.exr\n' ) + def test_nucoda_edl_write_with_transition(self): + track = otio.schema.Track() + tl = otio.schema.Timeline("test_nucoda_timeline", tracks=[track]) + rt = otio.opentime.RationalTime(48.0, 24.0) + mr1 = otio.media_reference.External(target_url=r"S:\var\tmp_1\test.exr") + mr2 = otio.media_reference.External(target_url=r"S:\var\tmp_2\test.exr") + mr3 = otio.media_reference.External(target_url=r"S:\var\tmp_3\test.exr") + + tr = otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(1.0, 24.0), + duration=rt + ) + cl = otio.schema.Clip( + name="test clip 1", + media_reference=mr1, + source_range=tr, + ) + trans = otio.schema.Transition(in_offset=otio.opentime.RationalTime(12.0, 24.0), + out_offset=otio.opentime.RationalTime(24.0, 24.0)) + cl2 = otio.schema.Clip( + name="test clip 2", + media_reference=mr2, + source_range=tr, + ) + cl3 = otio.schema.Clip( + name="test clip 3", + media_reference=mr3, + source_range=tr, + ) + tl.tracks[0].name = "V" + tl.tracks[0].append(cl) + tl.tracks[0].append(trans) + tl.tracks[0].append(cl2) + tl.tracks[0].append(cl3) + + result = otio.adapters.write_to_string( + tl, + adapter_name='cmx_3600', + style='nucoda' + ) + + self.assertEqual( + result, + 'TITLE: test_nucoda_timeline\n\n' + '001 AX V C 00:00:00:01 00:00:01:13 00:00:00:00 00:00:01:12\n' + '* FROM CLIP NAME: test clip 1\n' + '* FROM FILE: S:\\var\\tmp_1\\test.exr\n' + '002 AX V C 00:00:01:13 00:00:01:13 00:00:01:12 00:00:01:12\n' + '002 AX V D 036 00:00:00:01 00:00:02:13 00:00:01:12 00:00:04:00\n' + '* FROM CLIP NAME: test clip 1\n' + '* FROM FILE: S:\\var\\tmp_1\\test.exr\n' + '* TO CLIP NAME: test clip 2\n' + '* TO FILE: S:\\var\\tmp_2\\test.exr\n' + '003 AX V C 00:00:00:01 00:00:02:01 00:00:04:00 00:00:06:00\n' + '* FROM CLIP NAME: test clip 3\n' + '* FROM FILE: S:\\var\\tmp_3\\test.exr\n' + ) + def test_mixed_avid_nucoda_read_raises_exception(self): with self.assertRaises(cmx_3600.EDLParseError): otio.adapters.read_from_string( From b6c2c111825b02fb67f421ffcfffd14ba3721c3a Mon Sep 17 00:00:00 2001 From: Mike Mahony Date: Sat, 16 Dec 2017 16:18:33 -0800 Subject: [PATCH 35/44] Lint --- opentimelineio/adapters/cmx_3600.py | 99 +++++++++++++++++++++++------ tests/test_cmx_3600_adapter.py | 32 ++++++---- 2 files changed, 98 insertions(+), 33 deletions(-) diff --git a/opentimelineio/adapters/cmx_3600.py b/opentimelineio/adapters/cmx_3600.py index 18299eeccd..69e1250a46 100644 --- a/opentimelineio/adapters/cmx_3600.py +++ b/opentimelineio/adapters/cmx_3600.py @@ -616,30 +616,51 @@ def write_to_string(input_otio, rate=None, style='avid'): a_side, trans, b_side = clip, next_clip, next_next_clip # Add a line to represent this, SHORTER, event - a_side_line = EventLine(kind=kind, edit_number=edit_number, rate=edl_rate) + a_side_line = EventLine( + kind=kind, + edit_number=edit_number, + rate=edl_rate + ) a_side_line.source_in = a_side.source_range.start_time - a_side_line.source_out = a_side.source_range.end_time_exclusive() - next_clip.in_offset + a_side_line.source_out = a_side.source_range.end_time_exclusive() \ + - next_clip.in_offset a_range_in_track = track.range_of_child_at_index(i) a_side_line.record_in = a_range_in_track.start_time - a_side_line.record_out = a_range_in_track.end_time_exclusive() - next_clip.in_offset - if a_side.media_reference and isinstance(a_side.media_reference, otio.schema.Gap): + a_side_line.record_out = a_range_in_track.end_time_exclusive() \ + - next_clip.in_offset + if ( + a_side.media_reference + and isinstance(a_side.media_reference, otio.schema.Gap) + ): a_side_line.reel = 'BL' # Advance the edit number edit_number += 1 - b_side_line = EventLine(kind=kind, edit_number=edit_number, rate=edl_rate) + b_side_line = EventLine( + kind=kind, + edit_number=edit_number, + rate=edl_rate + ) b_side_line.source_in = b_side.source_range.start_time - b_side_line.source_out = b_side.source_range.end_time_exclusive() + trans.in_offset + b_side_line.source_out = b_side.source_range.end_time_exclusive() \ + + trans.in_offset b_range_in_track = track.range_of_child_at_index(i + 2) b_side_line.record_in = a_side_line.record_out b_side_line.record_out = b_range_in_track.end_time_exclusive() b_side_line.dissolve_length = trans.in_offset + trans.out_offset - if b_side.media_reference and isinstance(b_side.media_reference, otio.schema.Gap): + if ( + b_side.media_reference + and isinstance(b_side.media_reference, otio.schema.Gap) + ): b_side_line.reel = 'BL' # Add a line to represent the middle cut - cut_line = EventLine(kind=kind, edit_number=edit_number, rate=edl_rate) + cut_line = EventLine( + kind=kind, + edit_number=edit_number, + rate=edl_rate + ) cut_line.reel = b_side_line.reel cut_line.source_in = a_side_line.source_out cut_line.source_out = a_side_line.source_out @@ -648,28 +669,52 @@ def write_to_string(input_otio, rate=None, style='avid'): # Add the lines lines.append(str(a_side_line)) - lines += generate_comment_lines(a_side, style=style, edl_rate=edl_rate) + lines += generate_comment_lines( + a_side, + style=style, + edl_rate=edl_rate + ) lines.append(str(cut_line)) lines.append(str(b_side_line)) - lines += generate_comment_lines(a_side, style=style, edl_rate=edl_rate) - lines += generate_comment_lines(b_side, style=style, edl_rate=edl_rate, from_or_to='TO') + lines += generate_comment_lines( + a_side, + style=style, + edl_rate=edl_rate + ) + lines += generate_comment_lines( + b_side, + style=style, + edl_rate=edl_rate, + from_or_to='TO' + ) # Advance the iterater past the next 2 children (trans and clip b) look_ahead.next() look_ahead.next() else: - event_line = EventLine(edit_number=edit_number, kind=kind, rate=edl_rate) + event_line = EventLine( + edit_number=edit_number, + kind=kind, + rate=edl_rate + ) event_line.source_in = clip.source_range.start_time event_line.source_out = clip.source_range.end_time_exclusive() range_in_track = track.range_of_child_at_index(i) event_line.record_in = range_in_track.start_time event_line.record_out = range_in_track.end_time_exclusive() - if clip.media_reference and isinstance(clip.media_reference, otio.schema.Gap): + if ( + clip.media_reference + and isinstance(clip.media_reference, otio.schema.Gap) + ): event_line.reel = 'BL' lines.append(str(event_line)) - lines += generate_comment_lines(clip, style=style, edl_rate=edl_rate) + lines += generate_comment_lines( + clip, + style=style, + edl_rate=edl_rate + ) lines.append("") text = "\n".join(lines) @@ -695,11 +740,20 @@ def generate_comment_lines(clip, style, edl_rate, from_or_to='FROM'): if clip.name: # Avid Media Composer outputs two spaces before the # clip name so we match that. - lines.append("* {from_or_to} CLIP NAME: {name}".format(from_or_to=from_or_to, name=clip.name)) + lines.append("* {from_or_to} CLIP NAME: {name}".format( + from_or_to=from_or_to, + name=clip.name + )) if url and style == 'avid': - lines.append("* {from_or_to} CLIP: {url}".format(from_or_to=from_or_to, url=url)) + lines.append("* {from_or_to} CLIP: {url}".format( + from_or_to=from_or_to, + url=url + )) if url and style == 'nucoda': - lines.append("* {from_or_to} FILE: {url}".format(from_or_to=from_or_to, url=url)) + lines.append("* {from_or_to} FILE: {url}".format( + from_or_to=from_or_to, + url=url + )) cdl = clip.metadata.get('cdl') if cdl: @@ -787,10 +841,15 @@ def __str__(self): 'src_out': otio.opentime.to_timecode(self.source_out, self.__rate), 'rec_in': otio.opentime.to_timecode(self.record_in, self.__rate), 'rec_out': otio.opentime.to_timecode(self.record_out, self.__rate), - 'diss': int(otio.opentime.to_frames(self.dissolve_length, self.__rate)), + 'diss': int(otio.opentime.to_frames( + self.dissolve_length, + self.__rate + )), } if self.dissolve_length.value > 0: - return "{edit:03d} {reel:8} {kind:5} D {diss:03d} {src_in} {src_out} {rec_in} {rec_out}".format(**ser) + return "{edit:03d} {reel:8} {kind:5} D {diss:03d} " \ + "{src_in} {src_out} {rec_in} {rec_out}".format(**ser) else: - return "{edit:03d} {reel:8} {kind:5} C {src_in} {src_out} {rec_in} {rec_out}".format(**ser) + return "{edit:03d} {reel:8} {kind:5} C " \ + "{src_in} {src_out} {rec_in} {rec_out}".format(**ser) diff --git a/tests/test_cmx_3600_adapter.py b/tests/test_cmx_3600_adapter.py index f322df46f5..f323cd38ef 100755 --- a/tests/test_cmx_3600_adapter.py +++ b/tests/test_cmx_3600_adapter.py @@ -389,9 +389,9 @@ def test_nucoda_edl_write_with_transition(self): track = otio.schema.Track() tl = otio.schema.Timeline("test_nucoda_timeline", tracks=[track]) rt = otio.opentime.RationalTime(48.0, 24.0) - mr1 = otio.media_reference.External(target_url=r"S:\var\tmp_1\test.exr") - mr2 = otio.media_reference.External(target_url=r"S:\var\tmp_2\test.exr") - mr3 = otio.media_reference.External(target_url=r"S:\var\tmp_3\test.exr") + mr1 = otio.media_reference.External(target_url=r"S:\tmp_1\test.exr") + mr2 = otio.media_reference.External(target_url=r"S:\tmp_2\test.exr") + mr3 = otio.media_reference.External(target_url=r"S:\tmp_3\test.exr") tr = otio.opentime.TimeRange( start_time=otio.opentime.RationalTime(1.0, 24.0), @@ -402,8 +402,10 @@ def test_nucoda_edl_write_with_transition(self): media_reference=mr1, source_range=tr, ) - trans = otio.schema.Transition(in_offset=otio.opentime.RationalTime(12.0, 24.0), - out_offset=otio.opentime.RationalTime(24.0, 24.0)) + trans = otio.schema.Transition( + in_offset=otio.opentime.RationalTime(12.0, 24.0), + out_offset=otio.opentime.RationalTime(24.0, 24.0) + ) cl2 = otio.schema.Clip( name="test clip 2", media_reference=mr2, @@ -429,18 +431,22 @@ def test_nucoda_edl_write_with_transition(self): self.assertEqual( result, 'TITLE: test_nucoda_timeline\n\n' - '001 AX V C 00:00:00:01 00:00:01:13 00:00:00:00 00:00:01:12\n' + '001 AX V C ' + '00:00:00:01 00:00:01:13 00:00:00:00 00:00:01:12\n' '* FROM CLIP NAME: test clip 1\n' - '* FROM FILE: S:\\var\\tmp_1\\test.exr\n' - '002 AX V C 00:00:01:13 00:00:01:13 00:00:01:12 00:00:01:12\n' - '002 AX V D 036 00:00:00:01 00:00:02:13 00:00:01:12 00:00:04:00\n' + '* FROM FILE: S:\\tmp_1\\test.exr\n' + '002 AX V C ' + '00:00:01:13 00:00:01:13 00:00:01:12 00:00:01:12\n' + '002 AX V D 036 ' + '00:00:00:01 00:00:02:13 00:00:01:12 00:00:04:00\n' '* FROM CLIP NAME: test clip 1\n' - '* FROM FILE: S:\\var\\tmp_1\\test.exr\n' + '* FROM FILE: S:\\tmp_1\\test.exr\n' '* TO CLIP NAME: test clip 2\n' - '* TO FILE: S:\\var\\tmp_2\\test.exr\n' - '003 AX V C 00:00:00:01 00:00:02:01 00:00:04:00 00:00:06:00\n' + '* TO FILE: S:\\tmp_2\\test.exr\n' + '003 AX V C ' + '00:00:00:01 00:00:02:01 00:00:04:00 00:00:06:00\n' '* FROM CLIP NAME: test clip 3\n' - '* FROM FILE: S:\\var\\tmp_3\\test.exr\n' + '* FROM FILE: S:\\tmp_3\\test.exr\n' ) def test_mixed_avid_nucoda_read_raises_exception(self): From 8f651128a6b45c9fa323ca46e6cea35e03b65a81 Mon Sep 17 00:00:00 2001 From: Mike Mahony Date: Sun, 17 Dec 2017 01:02:43 -0800 Subject: [PATCH 36/44] WIP: Fix dissolve timing --- opentimelineio/adapters/cmx_3600.py | 10 +++--- tests/test_cmx_3600_adapter.py | 56 +++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 4 deletions(-) diff --git a/opentimelineio/adapters/cmx_3600.py b/opentimelineio/adapters/cmx_3600.py index 69e1250a46..87899962cc 100644 --- a/opentimelineio/adapters/cmx_3600.py +++ b/opentimelineio/adapters/cmx_3600.py @@ -642,12 +642,14 @@ def write_to_string(input_otio, rate=None, style='avid'): edit_number=edit_number, rate=edl_rate ) - b_side_line.source_in = b_side.source_range.start_time - b_side_line.source_out = b_side.source_range.end_time_exclusive() \ - + trans.in_offset + b_side_line.source_in = b_side.source_range.start_time \ + - trans.out_offset \ + - trans.in_offset + b_side_line.source_out = b_side.source_range.end_time_exclusive() b_range_in_track = track.range_of_child_at_index(i + 2) b_side_line.record_in = a_side_line.record_out - b_side_line.record_out = b_range_in_track.end_time_exclusive() + b_side_line.record_out = b_range_in_track.end_time_exclusive() \ + + trans.out_offset b_side_line.dissolve_length = trans.in_offset + trans.out_offset if ( b_side.media_reference diff --git a/tests/test_cmx_3600_adapter.py b/tests/test_cmx_3600_adapter.py index f323cd38ef..5f557e47fc 100755 --- a/tests/test_cmx_3600_adapter.py +++ b/tests/test_cmx_3600_adapter.py @@ -449,6 +449,62 @@ def test_nucoda_edl_write_with_transition(self): '* FROM FILE: S:\\tmp_3\\test.exr\n' ) + def test_nucoda_edl_write_with_transition_2(self): + track = otio.schema.Track() + tl = otio.schema.Timeline(tracks=[track]) + + # 001 v330_21f V C 131 276 + # 002 v330_23e V C 223 423 + + cl = otio.schema.Clip( + source_range=otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(131.0, 24.0), + duration=otio.opentime.RationalTime(145.0, 24.0) + ) + ) + trans = otio.schema.Transition( + in_offset=otio.opentime.RationalTime(50.0, 24.0), + out_offset=otio.opentime.RationalTime(50.0, 24.0) + ) + cl2 = otio.schema.Clip( + source_range=otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(223.0, 24.0), + duration=otio.opentime.RationalTime(200.0, 24.0) + ) + ) + cl3 = otio.schema.Clip( + source_range=otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(0.0, 24.0), + duration=otio.opentime.RationalTime(24.0, 24.0) + ) + ) + tl.tracks[0].append(cl) + tl.tracks[0].append(trans) + tl.tracks[0].append(cl2) + tl.tracks[0].append(cl3) + + result = otio.adapters.write_to_string( + tl, + adapter_name='cmx_3600', + style='nucoda' + ) + + expected = '001 AX V C 00:00:05:11 00:00:09:10 00:00:00:00 00:00:03:23\n' \ + '002 AX V C 00:00:09:10 00:00:09:10 00:00:03:23 00:00:03:23\n' \ + '002 AX V D 100 00:00:05:03 00:00:17:15 00:00:03:23 00:00:16:11\n' \ + '003 AX V C 00:00:00:00 00:00:01:00 00:00:16:11 00:00:17:11\n' + + print + print("EXPECTED:") + print(expected) + print + + print("ACTUAL:") + print(result) + print + + self.assertEqual(result, expected) + def test_mixed_avid_nucoda_read_raises_exception(self): with self.assertRaises(cmx_3600.EDLParseError): otio.adapters.read_from_string( From c473f2ca4bc4902431fed2b5a529c898e92c98d0 Mon Sep 17 00:00:00 2001 From: Mike Mahony Date: Sun, 17 Dec 2017 01:26:01 -0800 Subject: [PATCH 37/44] WIP: Fix dissolve timing pt2 --- opentimelineio/adapters/cmx_3600.py | 9 +++++---- tests/test_cmx_3600_adapter.py | 21 +++++---------------- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/opentimelineio/adapters/cmx_3600.py b/opentimelineio/adapters/cmx_3600.py index 87899962cc..0454309a2d 100644 --- a/opentimelineio/adapters/cmx_3600.py +++ b/opentimelineio/adapters/cmx_3600.py @@ -623,11 +623,13 @@ def write_to_string(input_otio, rate=None, style='avid'): ) a_side_line.source_in = a_side.source_range.start_time a_side_line.source_out = a_side.source_range.end_time_exclusive() \ - - next_clip.in_offset + - next_clip.in_offset \ + - next_clip.out_offset a_range_in_track = track.range_of_child_at_index(i) a_side_line.record_in = a_range_in_track.start_time a_side_line.record_out = a_range_in_track.end_time_exclusive() \ - - next_clip.in_offset + - next_clip.in_offset \ + - next_clip.out_offset if ( a_side.media_reference and isinstance(a_side.media_reference, otio.schema.Gap) @@ -648,8 +650,7 @@ def write_to_string(input_otio, rate=None, style='avid'): b_side_line.source_out = b_side.source_range.end_time_exclusive() b_range_in_track = track.range_of_child_at_index(i + 2) b_side_line.record_in = a_side_line.record_out - b_side_line.record_out = b_range_in_track.end_time_exclusive() \ - + trans.out_offset + b_side_line.record_out = b_range_in_track.end_time_exclusive() b_side_line.dissolve_length = trans.in_offset + trans.out_offset if ( b_side.media_reference diff --git a/tests/test_cmx_3600_adapter.py b/tests/test_cmx_3600_adapter.py index 5f557e47fc..2a7c2daa4e 100755 --- a/tests/test_cmx_3600_adapter.py +++ b/tests/test_cmx_3600_adapter.py @@ -453,9 +453,6 @@ def test_nucoda_edl_write_with_transition_2(self): track = otio.schema.Track() tl = otio.schema.Timeline(tracks=[track]) - # 001 v330_21f V C 131 276 - # 002 v330_23e V C 223 423 - cl = otio.schema.Clip( source_range=otio.opentime.TimeRange( start_time=otio.opentime.RationalTime(131.0, 24.0), @@ -489,19 +486,11 @@ def test_nucoda_edl_write_with_transition_2(self): style='nucoda' ) - expected = '001 AX V C 00:00:05:11 00:00:09:10 00:00:00:00 00:00:03:23\n' \ - '002 AX V C 00:00:09:10 00:00:09:10 00:00:03:23 00:00:03:23\n' \ - '002 AX V D 100 00:00:05:03 00:00:17:15 00:00:03:23 00:00:16:11\n' \ - '003 AX V C 00:00:00:00 00:00:01:00 00:00:16:11 00:00:17:11\n' - - print - print("EXPECTED:") - print(expected) - print - - print("ACTUAL:") - print(result) - print + expected = \ + '001 AX V C 00:00:05:11 00:00:07:08 00:00:00:00 00:00:01:21\n' \ + '002 AX V C 00:00:07:08 00:00:07:08 00:00:01:21 00:00:01:21\n' \ + '002 AX V D 100 00:00:05:03 00:00:17:15 00:00:01:21 00:00:14:09\n' \ + '003 AX V C 00:00:00:00 00:00:01:00 00:00:14:09 00:00:15:09\n' self.assertEqual(result, expected) From 294da4b5291be3bde9a5c145e939bd52a7d61dd9 Mon Sep 17 00:00:00 2001 From: Mike Mahony Date: Sun, 17 Dec 2017 23:12:55 -0800 Subject: [PATCH 38/44] WIP: Fix dissolve timing pt3 --- opentimelineio/adapters/cmx_3600.py | 4 +- tests/test_cmx_3600_adapter.py | 80 ++++++++++++++--------------- 2 files changed, 40 insertions(+), 44 deletions(-) diff --git a/opentimelineio/adapters/cmx_3600.py b/opentimelineio/adapters/cmx_3600.py index 0454309a2d..a32e4fe6ec 100644 --- a/opentimelineio/adapters/cmx_3600.py +++ b/opentimelineio/adapters/cmx_3600.py @@ -644,9 +644,7 @@ def write_to_string(input_otio, rate=None, style='avid'): edit_number=edit_number, rate=edl_rate ) - b_side_line.source_in = b_side.source_range.start_time \ - - trans.out_offset \ - - trans.in_offset + b_side_line.source_in = b_side.source_range.start_time b_side_line.source_out = b_side.source_range.end_time_exclusive() b_range_in_track = track.range_of_child_at_index(i + 2) b_side_line.record_in = a_side_line.record_out diff --git a/tests/test_cmx_3600_adapter.py b/tests/test_cmx_3600_adapter.py index 2a7c2daa4e..419bbb3344 100755 --- a/tests/test_cmx_3600_adapter.py +++ b/tests/test_cmx_3600_adapter.py @@ -387,36 +387,33 @@ def test_nucoda_edl_write(self): def test_nucoda_edl_write_with_transition(self): track = otio.schema.Track() - tl = otio.schema.Timeline("test_nucoda_timeline", tracks=[track]) - rt = otio.opentime.RationalTime(48.0, 24.0) - mr1 = otio.media_reference.External(target_url=r"S:\tmp_1\test.exr") - mr2 = otio.media_reference.External(target_url=r"S:\tmp_2\test.exr") - mr3 = otio.media_reference.External(target_url=r"S:\tmp_3\test.exr") - - tr = otio.opentime.TimeRange( - start_time=otio.opentime.RationalTime(1.0, 24.0), - duration=rt + tl = otio.schema.Timeline( + "CrossDissolve_Day-Night_Long_1 from CZuber", + tracks=[track] ) + cl = otio.schema.Clip( - name="test clip 1", - media_reference=mr1, - source_range=tr, + source_range=otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(131.0, 24.0), + duration=otio.opentime.RationalTime(145.0, 24.0) + ) ) trans = otio.schema.Transition( - in_offset=otio.opentime.RationalTime(12.0, 24.0), - out_offset=otio.opentime.RationalTime(24.0, 24.0) + in_offset=otio.opentime.RationalTime(57.0, 24.0), + out_offset=otio.opentime.RationalTime(43.0, 24.0) ) cl2 = otio.schema.Clip( - name="test clip 2", - media_reference=mr2, - source_range=tr, + source_range=otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(223.0, 24.0), + duration=otio.opentime.RationalTime(200.0, 24.0) + ) ) cl3 = otio.schema.Clip( - name="test clip 3", - media_reference=mr3, - source_range=tr, + source_range=otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(0.0, 24.0), + duration=otio.opentime.RationalTime(24.0, 24.0) + ) ) - tl.tracks[0].name = "V" tl.tracks[0].append(cl) tl.tracks[0].append(trans) tl.tracks[0].append(cl2) @@ -428,26 +425,27 @@ def test_nucoda_edl_write_with_transition(self): style='nucoda' ) - self.assertEqual( - result, - 'TITLE: test_nucoda_timeline\n\n' - '001 AX V C ' - '00:00:00:01 00:00:01:13 00:00:00:00 00:00:01:12\n' - '* FROM CLIP NAME: test clip 1\n' - '* FROM FILE: S:\\tmp_1\\test.exr\n' - '002 AX V C ' - '00:00:01:13 00:00:01:13 00:00:01:12 00:00:01:12\n' - '002 AX V D 036 ' - '00:00:00:01 00:00:02:13 00:00:01:12 00:00:04:00\n' - '* FROM CLIP NAME: test clip 1\n' - '* FROM FILE: S:\\tmp_1\\test.exr\n' - '* TO CLIP NAME: test clip 2\n' - '* TO FILE: S:\\tmp_2\\test.exr\n' - '003 AX V C ' - '00:00:00:01 00:00:02:01 00:00:04:00 00:00:06:00\n' - '* FROM CLIP NAME: test clip 3\n' - '* FROM FILE: S:\\tmp_3\\test.exr\n' - ) + expected = \ + 'TITLE: CrossDissolve_Day-Night_Long_1 from CZuber\n\n' \ + '001 AX V C 00:00:05:11 00:00:07:08 ' \ + '00:00:00:00 00:00:01:21\n' \ + '002 AX V C 00:00:07:08 00:00:07:08 ' \ + '00:00:01:21 00:00:01:21\n' \ + '002 AX V D 100 00:00:09:07 00:00:17:15 ' \ + '00:00:01:21 00:00:10:05\n' \ + '003 AX V C 00:00:00:00 00:00:01:00 ' \ + '00:00:10:05 00:00:11:05\n' + + print + print('expected') + print(expected) + + print + print('actual') + print(result) + print + + self.assertEqual(result, expected) def test_nucoda_edl_write_with_transition_2(self): track = otio.schema.Track() From e4ebbd5ca4cdccc9ea71152fcb4625c775144537 Mon Sep 17 00:00:00 2001 From: Mike Mahony Date: Mon, 18 Dec 2017 16:13:41 -0800 Subject: [PATCH 39/44] Fix EDL dissolve write --- opentimelineio/adapters/cmx_3600.py | 9 ++--- tests/test_cmx_3600_adapter.py | 60 ++--------------------------- 2 files changed, 7 insertions(+), 62 deletions(-) diff --git a/opentimelineio/adapters/cmx_3600.py b/opentimelineio/adapters/cmx_3600.py index a32e4fe6ec..e4dd0fb1fe 100644 --- a/opentimelineio/adapters/cmx_3600.py +++ b/opentimelineio/adapters/cmx_3600.py @@ -623,13 +623,11 @@ def write_to_string(input_otio, rate=None, style='avid'): ) a_side_line.source_in = a_side.source_range.start_time a_side_line.source_out = a_side.source_range.end_time_exclusive() \ - - next_clip.in_offset \ - - next_clip.out_offset + - trans.in_offset a_range_in_track = track.range_of_child_at_index(i) a_side_line.record_in = a_range_in_track.start_time a_side_line.record_out = a_range_in_track.end_time_exclusive() \ - - next_clip.in_offset \ - - next_clip.out_offset + - trans.in_offset if ( a_side.media_reference and isinstance(a_side.media_reference, otio.schema.Gap) @@ -644,7 +642,8 @@ def write_to_string(input_otio, rate=None, style='avid'): edit_number=edit_number, rate=edl_rate ) - b_side_line.source_in = b_side.source_range.start_time + b_side_line.source_in = b_side.source_range.start_time \ + - trans.in_offset b_side_line.source_out = b_side.source_range.end_time_exclusive() b_range_in_track = track.range_of_child_at_index(i + 2) b_side_line.record_in = a_side_line.record_out diff --git a/tests/test_cmx_3600_adapter.py b/tests/test_cmx_3600_adapter.py index 419bbb3344..bb25f2b850 100755 --- a/tests/test_cmx_3600_adapter.py +++ b/tests/test_cmx_3600_adapter.py @@ -395,7 +395,7 @@ def test_nucoda_edl_write_with_transition(self): cl = otio.schema.Clip( source_range=otio.opentime.TimeRange( start_time=otio.opentime.RationalTime(131.0, 24.0), - duration=otio.opentime.RationalTime(145.0, 24.0) + duration=otio.opentime.RationalTime(102.0, 24.0) ) ) trans = otio.schema.Transition( @@ -404,8 +404,8 @@ def test_nucoda_edl_write_with_transition(self): ) cl2 = otio.schema.Clip( source_range=otio.opentime.TimeRange( - start_time=otio.opentime.RationalTime(223.0, 24.0), - duration=otio.opentime.RationalTime(200.0, 24.0) + start_time=otio.opentime.RationalTime(280.0, 24.0), + duration=otio.opentime.RationalTime(143.0, 24.0) ) ) cl3 = otio.schema.Clip( @@ -436,60 +436,6 @@ def test_nucoda_edl_write_with_transition(self): '003 AX V C 00:00:00:00 00:00:01:00 ' \ '00:00:10:05 00:00:11:05\n' - print - print('expected') - print(expected) - - print - print('actual') - print(result) - print - - self.assertEqual(result, expected) - - def test_nucoda_edl_write_with_transition_2(self): - track = otio.schema.Track() - tl = otio.schema.Timeline(tracks=[track]) - - cl = otio.schema.Clip( - source_range=otio.opentime.TimeRange( - start_time=otio.opentime.RationalTime(131.0, 24.0), - duration=otio.opentime.RationalTime(145.0, 24.0) - ) - ) - trans = otio.schema.Transition( - in_offset=otio.opentime.RationalTime(50.0, 24.0), - out_offset=otio.opentime.RationalTime(50.0, 24.0) - ) - cl2 = otio.schema.Clip( - source_range=otio.opentime.TimeRange( - start_time=otio.opentime.RationalTime(223.0, 24.0), - duration=otio.opentime.RationalTime(200.0, 24.0) - ) - ) - cl3 = otio.schema.Clip( - source_range=otio.opentime.TimeRange( - start_time=otio.opentime.RationalTime(0.0, 24.0), - duration=otio.opentime.RationalTime(24.0, 24.0) - ) - ) - tl.tracks[0].append(cl) - tl.tracks[0].append(trans) - tl.tracks[0].append(cl2) - tl.tracks[0].append(cl3) - - result = otio.adapters.write_to_string( - tl, - adapter_name='cmx_3600', - style='nucoda' - ) - - expected = \ - '001 AX V C 00:00:05:11 00:00:07:08 00:00:00:00 00:00:01:21\n' \ - '002 AX V C 00:00:07:08 00:00:07:08 00:00:01:21 00:00:01:21\n' \ - '002 AX V D 100 00:00:05:03 00:00:17:15 00:00:01:21 00:00:14:09\n' \ - '003 AX V C 00:00:00:00 00:00:01:00 00:00:14:09 00:00:15:09\n' - self.assertEqual(result, expected) def test_mixed_avid_nucoda_read_raises_exception(self): From 0247f0418e5c3ad69bcefc9ee26f78669c7e961b Mon Sep 17 00:00:00 2001 From: Mike Mahony Date: Mon, 18 Dec 2017 16:18:10 -0800 Subject: [PATCH 40/44] Use range_in_parent instead of range_of_child_at_index --- opentimelineio/adapters/cmx_3600.py | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/opentimelineio/adapters/cmx_3600.py b/opentimelineio/adapters/cmx_3600.py index e4dd0fb1fe..3f99a97643 100644 --- a/opentimelineio/adapters/cmx_3600.py +++ b/opentimelineio/adapters/cmx_3600.py @@ -609,7 +609,7 @@ def write_to_string(input_otio, rate=None, style='avid'): edl_rate = rate or track.duration().rate kind = "V" if track.kind == otio.schema.TrackKind.Video else "A" look_ahead = lookahead_enumerate(track) - for i, clip, next_clip, next_next_clip in look_ahead: + for clip, next_clip, next_next_clip in look_ahead: edit_number += 1 if isinstance(next_clip, otio.schema.Transition): @@ -624,7 +624,7 @@ def write_to_string(input_otio, rate=None, style='avid'): a_side_line.source_in = a_side.source_range.start_time a_side_line.source_out = a_side.source_range.end_time_exclusive() \ - trans.in_offset - a_range_in_track = track.range_of_child_at_index(i) + a_range_in_track = a_side.range_in_parent() a_side_line.record_in = a_range_in_track.start_time a_side_line.record_out = a_range_in_track.end_time_exclusive() \ - trans.in_offset @@ -645,7 +645,7 @@ def write_to_string(input_otio, rate=None, style='avid'): b_side_line.source_in = b_side.source_range.start_time \ - trans.in_offset b_side_line.source_out = b_side.source_range.end_time_exclusive() - b_range_in_track = track.range_of_child_at_index(i + 2) + b_range_in_track = b_side.range_in_parent() b_side_line.record_in = a_side_line.record_out b_side_line.record_out = b_range_in_track.end_time_exclusive() b_side_line.dissolve_length = trans.in_offset + trans.out_offset @@ -700,7 +700,7 @@ def write_to_string(input_otio, rate=None, style='avid'): ) event_line.source_in = clip.source_range.start_time event_line.source_out = clip.source_range.end_time_exclusive() - range_in_track = track.range_of_child_at_index(i) + range_in_track = clip.range_in_parent() event_line.record_in = range_in_track.start_time event_line.record_out = range_in_track.end_time_exclusive() if ( @@ -802,19 +802,17 @@ def generate_comment_lines(clip, style, edl_rate, from_or_to='FROM'): def lookahead_enumerate(iterable): iterator = iter(iterable) - i = 0 a = iterator.next() try: b = iterator.next() for c in iterator: - yield (i, a, b, c) - a, b, i = b, c, i + 1 + yield (a, b, c) + a, b = b, c b, c = a, b - yield (i, b, c, None) - i += 1 - yield (i, c, None, None) + yield (b, c, None) + yield (c, None, None) except StopIteration: - yield (i, a, None, None) + yield (a, None, None) class EventLine(object): From c12d43d2a45b6e9f9720f332213adeed4ab64420 Mon Sep 17 00:00:00 2001 From: Mike Mahony Date: Mon, 18 Dec 2017 16:26:20 -0800 Subject: [PATCH 41/44] Improve comments --- opentimelineio/adapters/cmx_3600.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/opentimelineio/adapters/cmx_3600.py b/opentimelineio/adapters/cmx_3600.py index 3f99a97643..6dab878cc4 100644 --- a/opentimelineio/adapters/cmx_3600.py +++ b/opentimelineio/adapters/cmx_3600.py @@ -615,7 +615,21 @@ def write_to_string(input_otio, rate=None, style='avid'): if isinstance(next_clip, otio.schema.Transition): a_side, trans, b_side = clip, next_clip, next_next_clip - # Add a line to represent this, SHORTER, event + # Transitions in EDLs are unconventionally represented. + # + # Where a trasition might normally be visualized like: + # A |---------------------|\--| + # B |----\|-------------------| + # |-----|---| + # 57 43 + # + # In an EDL it can be thought of more like this: + # A |---------------|xxxxxxxxx| + # B |\------------------------| + # |---------| + # 100 + + # Event line to represent this "shorted" A side a_side_line = EventLine( kind=kind, edit_number=edit_number, @@ -637,6 +651,7 @@ def write_to_string(input_otio, rate=None, style='avid'): # Advance the edit number edit_number += 1 + # Event line to represent the "longer" B side b_side_line = EventLine( kind=kind, edit_number=edit_number, @@ -655,7 +670,7 @@ def write_to_string(input_otio, rate=None, style='avid'): ): b_side_line.reel = 'BL' - # Add a line to represent the middle cut + # Event line to represent the middle cut cut_line = EventLine( kind=kind, edit_number=edit_number, From 1c29e0a697cc9b49fb776f7925f07e7cc025f3a8 Mon Sep 17 00:00:00 2001 From: Mike Mahony Date: Sun, 17 Dec 2017 00:09:13 -0800 Subject: [PATCH 42/44] Can name reels via clip.metadata['cmx_3600'] --- opentimelineio/adapters/cmx_3600.py | 6 ++++++ tests/test_cmx_3600_adapter.py | 27 +++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/opentimelineio/adapters/cmx_3600.py b/opentimelineio/adapters/cmx_3600.py index 6dab878cc4..01a6a6aacb 100644 --- a/opentimelineio/adapters/cmx_3600.py +++ b/opentimelineio/adapters/cmx_3600.py @@ -647,6 +647,8 @@ def write_to_string(input_otio, rate=None, style='avid'): and isinstance(a_side.media_reference, otio.schema.Gap) ): a_side_line.reel = 'BL' + elif a_side.metadata.get('cmx_3600', {}).get('reel'): + a_side_line.reel = a_side.metadata.get('cmx_3600').get('reel') # Advance the edit number edit_number += 1 @@ -669,6 +671,8 @@ def write_to_string(input_otio, rate=None, style='avid'): and isinstance(b_side.media_reference, otio.schema.Gap) ): b_side_line.reel = 'BL' + elif b_side.metadata.get('cmx_3600', {}).get('reel'): + b_side_line.reel = b_side.metadata.get('cmx_3600').get('reel') # Event line to represent the middle cut cut_line = EventLine( @@ -723,6 +727,8 @@ def write_to_string(input_otio, rate=None, style='avid'): and isinstance(clip.media_reference, otio.schema.Gap) ): event_line.reel = 'BL' + elif clip.metadata.get('cmx_3600', {}).get('reel'): + event_line.reel = clip.metadata.get('cmx_3600').get('reel') lines.append(str(event_line)) lines += generate_comment_lines( diff --git a/tests/test_cmx_3600_adapter.py b/tests/test_cmx_3600_adapter.py index bb25f2b850..73ebf3a840 100755 --- a/tests/test_cmx_3600_adapter.py +++ b/tests/test_cmx_3600_adapter.py @@ -438,6 +438,33 @@ def test_nucoda_edl_write_with_transition(self): self.assertEqual(result, expected) + def test_custom_reel_names(self): + track = otio.schema.Track() + tl = otio.schema.Timeline(tracks=[track]) + tr = otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(1.0, 24.0), + duration=otio.opentime.RationalTime(24.0, 24.0) + ) + cl = otio.schema.Clip( + source_range=tr + ) + cl.metadata['cmx_3600'] = { + 'reel': 'v330_21f' + } + tl.tracks[0].append(cl) + + result = otio.adapters.write_to_string( + tl, + adapter_name='cmx_3600', + style='nucoda' + ) + + self.assertEqual( + result, + '001 v330_21f V C ' + '00:00:00:01 00:00:01:01 00:00:00:00 00:00:01:00\n' + ) + def test_mixed_avid_nucoda_read_raises_exception(self): with self.assertRaises(cmx_3600.EDLParseError): otio.adapters.read_from_string( From 1dc8f6482a7212471279062bf3d898d5bc2e587d Mon Sep 17 00:00:00 2001 From: Mike Mahony Date: Tue, 2 Jan 2018 14:46:58 -0800 Subject: [PATCH 43/44] Bug fix: EDL transition cut event references A side --- opentimelineio/adapters/cmx_3600.py | 4 ++-- tests/test_cmx_3600_adapter.py | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/opentimelineio/adapters/cmx_3600.py b/opentimelineio/adapters/cmx_3600.py index 01a6a6aacb..9a7811885e 100644 --- a/opentimelineio/adapters/cmx_3600.py +++ b/opentimelineio/adapters/cmx_3600.py @@ -629,7 +629,7 @@ def write_to_string(input_otio, rate=None, style='avid'): # |---------| # 100 - # Event line to represent this "shorted" A side + # Event line to represent this "shorter" A side a_side_line = EventLine( kind=kind, edit_number=edit_number, @@ -680,7 +680,7 @@ def write_to_string(input_otio, rate=None, style='avid'): edit_number=edit_number, rate=edl_rate ) - cut_line.reel = b_side_line.reel + cut_line.reel = a_side_line.reel cut_line.source_in = a_side_line.source_out cut_line.source_out = a_side_line.source_out cut_line.record_in = a_side_line.record_out diff --git a/tests/test_cmx_3600_adapter.py b/tests/test_cmx_3600_adapter.py index 73ebf3a840..f594f8a15e 100755 --- a/tests/test_cmx_3600_adapter.py +++ b/tests/test_cmx_3600_adapter.py @@ -393,6 +393,7 @@ def test_nucoda_edl_write_with_transition(self): ) cl = otio.schema.Clip( + metadata={'cmx_3600': {'reel': 'Reel1'}}, source_range=otio.opentime.TimeRange( start_time=otio.opentime.RationalTime(131.0, 24.0), duration=otio.opentime.RationalTime(102.0, 24.0) @@ -403,21 +404,20 @@ def test_nucoda_edl_write_with_transition(self): out_offset=otio.opentime.RationalTime(43.0, 24.0) ) cl2 = otio.schema.Clip( + metadata={'cmx_3600': {'reel': 'Reel2'}}, source_range=otio.opentime.TimeRange( start_time=otio.opentime.RationalTime(280.0, 24.0), duration=otio.opentime.RationalTime(143.0, 24.0) ) ) cl3 = otio.schema.Clip( + metadata={'cmx_3600': {'reel': 'Reel3'}}, source_range=otio.opentime.TimeRange( start_time=otio.opentime.RationalTime(0.0, 24.0), duration=otio.opentime.RationalTime(24.0, 24.0) ) ) - tl.tracks[0].append(cl) - tl.tracks[0].append(trans) - tl.tracks[0].append(cl2) - tl.tracks[0].append(cl3) + tl.tracks[0].extend([cl, trans, cl2, cl3]) result = otio.adapters.write_to_string( tl, @@ -427,13 +427,13 @@ def test_nucoda_edl_write_with_transition(self): expected = \ 'TITLE: CrossDissolve_Day-Night_Long_1 from CZuber\n\n' \ - '001 AX V C 00:00:05:11 00:00:07:08 ' \ + '001 Reel1 V C 00:00:05:11 00:00:07:08 ' \ '00:00:00:00 00:00:01:21\n' \ - '002 AX V C 00:00:07:08 00:00:07:08 ' \ + '002 Reel1 V C 00:00:07:08 00:00:07:08 ' \ '00:00:01:21 00:00:01:21\n' \ - '002 AX V D 100 00:00:09:07 00:00:17:15 ' \ + '002 Reel2 V D 100 00:00:09:07 00:00:17:15 ' \ '00:00:01:21 00:00:10:05\n' \ - '003 AX V C 00:00:00:00 00:00:01:00 ' \ + '003 Reel3 V C 00:00:00:00 00:00:01:00 ' \ '00:00:10:05 00:00:11:05\n' self.assertEqual(result, expected) From 492fbd179a26f97cec7db657e3226713df53c33c Mon Sep 17 00:00:00 2001 From: Mike Mahony Date: Thu, 4 Jan 2018 09:18:33 -0800 Subject: [PATCH 44/44] Support double transitions --- opentimelineio/adapters/cmx_3600.py | 217 +++++++++++----------------- tests/test_cmx_3600_adapter.py | 95 ++++++++++-- 2 files changed, 168 insertions(+), 144 deletions(-) diff --git a/opentimelineio/adapters/cmx_3600.py b/opentimelineio/adapters/cmx_3600.py index 9a7811885e..1cda2e312e 100644 --- a/opentimelineio/adapters/cmx_3600.py +++ b/opentimelineio/adapters/cmx_3600.py @@ -594,151 +594,96 @@ def write_to_string(input_otio, rate=None, style='avid'): # "No audio tracks are currently supported." # ) - lines = [] - - if input_otio.name: - lines.append("TITLE: {}".format(input_otio.name)) - lines.append("") - # TODO: We should try to detect the frame rate and output an # appropriate "FCM: NON-DROP FRAME" etc here. - edit_number = 0 - track = input_otio.tracks[0] edl_rate = rate or track.duration().rate kind = "V" if track.kind == otio.schema.TrackKind.Video else "A" - look_ahead = lookahead_enumerate(track) - for clip, next_clip, next_next_clip in look_ahead: - edit_number += 1 - if isinstance(next_clip, otio.schema.Transition): - a_side, trans, b_side = clip, next_clip, next_next_clip - - # Transitions in EDLs are unconventionally represented. - # - # Where a trasition might normally be visualized like: - # A |---------------------|\--| - # B |----\|-------------------| - # |-----|---| - # 57 43 - # - # In an EDL it can be thought of more like this: - # A |---------------|xxxxxxxxx| - # B |\------------------------| - # |---------| - # 100 - - # Event line to represent this "shorter" A side - a_side_line = EventLine( - kind=kind, - edit_number=edit_number, - rate=edl_rate - ) - a_side_line.source_in = a_side.source_range.start_time - a_side_line.source_out = a_side.source_range.end_time_exclusive() \ - - trans.in_offset - a_range_in_track = a_side.range_in_parent() - a_side_line.record_in = a_range_in_track.start_time - a_side_line.record_out = a_range_in_track.end_time_exclusive() \ - - trans.in_offset - if ( - a_side.media_reference - and isinstance(a_side.media_reference, otio.schema.Gap) - ): - a_side_line.reel = 'BL' - elif a_side.metadata.get('cmx_3600', {}).get('reel'): - a_side_line.reel = a_side.metadata.get('cmx_3600').get('reel') + # Transitions in EDLs are unconventionally represented. + # + # Where a trasition might normally be visualized like: + # A |---------------------|\--| + # B |----\|-------------------| + # |-----|---| + # 57 43 + # + # In an EDL it can be thought of more like this: + # A |---------------|xxxxxxxxx| + # B |\------------------------| + # |---------| + # 100 - # Advance the edit number - edit_number += 1 + edit_number = 0 + clips_and_events = [] + for prev_child, child, next_child in lookahead_and_behind_enumerate(track): + if isinstance(child, otio.schema.Transition): + continue - # Event line to represent the "longer" B side - b_side_line = EventLine( - kind=kind, - edit_number=edit_number, - rate=edl_rate - ) - b_side_line.source_in = b_side.source_range.start_time \ - - trans.in_offset - b_side_line.source_out = b_side.source_range.end_time_exclusive() - b_range_in_track = b_side.range_in_parent() - b_side_line.record_in = a_side_line.record_out - b_side_line.record_out = b_range_in_track.end_time_exclusive() - b_side_line.dissolve_length = trans.in_offset + trans.out_offset - if ( - b_side.media_reference - and isinstance(b_side.media_reference, otio.schema.Gap) - ): - b_side_line.reel = 'BL' - elif b_side.metadata.get('cmx_3600', {}).get('reel'): - b_side_line.reel = b_side.metadata.get('cmx_3600').get('reel') + edit_number += 1 - # Event line to represent the middle cut + event = EventLine( + kind=kind, + edit_number=edit_number, + rate=edl_rate + ) + event.source_in = child.source_range.start_time + event.source_out = child.source_range.end_time_exclusive() + range_in_track = child.range_in_parent() + event.record_in = range_in_track.start_time + event.record_out = range_in_track.end_time_exclusive() + + if isinstance(next_child, otio.schema.Transition): + trans = next_child + a_side_event = event + + # Shorten this, the A-side + a_side_event.source_out -= trans.in_offset + a_side_event.record_out -= trans.in_offset + + if isinstance(prev_child, otio.schema.Transition): + a_side, a_side_event = clips_and_events[-1] + b_side, b_side_event = child, event + trans = prev_child + + # Add A-side cut cut_line = EventLine( kind=kind, edit_number=edit_number, rate=edl_rate ) - cut_line.reel = a_side_line.reel - cut_line.source_in = a_side_line.source_out - cut_line.source_out = a_side_line.source_out - cut_line.record_in = a_side_line.record_out - cut_line.record_out = a_side_line.record_out - - # Add the lines - lines.append(str(a_side_line)) - lines += generate_comment_lines( - a_side, - style=style, - edl_rate=edl_rate - ) - lines.append(str(cut_line)) - lines.append(str(b_side_line)) - lines += generate_comment_lines( - a_side, - style=style, - edl_rate=edl_rate - ) - lines += generate_comment_lines( - b_side, - style=style, - edl_rate=edl_rate, - from_or_to='TO' - ) + cut_line.reel = a_side_event.reel + cut_line.source_in = a_side_event.source_out + cut_line.source_out = a_side_event.source_out + cut_line.record_in = a_side_event.record_out + cut_line.record_out = a_side_event.record_out + clips_and_events += [(None, cut_line)] - # Advance the iterater past the next 2 children (trans and clip b) - look_ahead.next() - look_ahead.next() + # Lengthen B-side, adding dissolve + b_side_event.source_in -= trans.in_offset + b_side_event.record_in = a_side_event.record_out + b_side_event.dissolve_length = trans.in_offset + trans.out_offset - else: - event_line = EventLine( - edit_number=edit_number, - kind=kind, - rate=edl_rate - ) - event_line.source_in = clip.source_range.start_time - event_line.source_out = clip.source_range.end_time_exclusive() - range_in_track = clip.range_in_parent() - event_line.record_in = range_in_track.start_time - event_line.record_out = range_in_track.end_time_exclusive() - if ( - clip.media_reference - and isinstance(clip.media_reference, otio.schema.Gap) - ): - event_line.reel = 'BL' - elif clip.metadata.get('cmx_3600', {}).get('reel'): - event_line.reel = clip.metadata.get('cmx_3600').get('reel') + event.reel = reel_from_clip(child) + + clips_and_events += [(child, event)] + + lines = [] + + if input_otio.name: + lines += ["TITLE: {}".format(input_otio.name), ""] - lines.append(str(event_line)) + for clip, event in clips_and_events: + lines += [str(event)] + if clip: lines += generate_comment_lines( clip, style=style, edl_rate=edl_rate ) - lines.append("") - text = "\n".join(lines) + text = "\n".join(lines) + "\n" return text @@ -821,19 +766,25 @@ def generate_comment_lines(clip, style, edl_rate, from_or_to='FROM'): return lines -def lookahead_enumerate(iterable): +def lookahead_and_behind_enumerate(iterable): + prv = None iterator = iter(iterable) - a = iterator.next() - try: - b = iterator.next() - for c in iterator: - yield (a, b, c) - a, b = b, c - b, c = a, b - yield (b, c, None) - yield (c, None, None) - except StopIteration: - yield (a, None, None) + cur = next(iterator) + for nxt in iterator: + yield (prv, cur, nxt) + prv, cur = cur, nxt + yield (prv, cur, None) + + +def reel_from_clip(clip): + if ( + clip.media_reference + and isinstance(clip.media_reference, otio.schema.Gap) + ): + return 'BL' + elif clip.metadata.get('cmx_3600', {}).get('reel'): + return clip.metadata.get('cmx_3600').get('reel') + return 'AX' class EventLine(object): diff --git a/tests/test_cmx_3600_adapter.py b/tests/test_cmx_3600_adapter.py index f594f8a15e..36e2a85596 100755 --- a/tests/test_cmx_3600_adapter.py +++ b/tests/test_cmx_3600_adapter.py @@ -372,18 +372,19 @@ def test_nucoda_edl_write(self): adapter_name='cmx_3600', style='nucoda' ) - self.assertEqual( - result, - 'TITLE: test_nucoda_timeline\n\n' - '001 AX V C ' - '00:00:00:00 00:00:00:05 00:00:00:00 00:00:00:05\n' - '* FROM CLIP NAME: test clip1\n' - '* FROM FILE: S:\\var\\tmp\\test.exr\n\n' - '002 AX V C ' - '00:00:00:00 00:00:00:05 00:00:00:05 00:00:00:10\n' - '* FROM CLIP NAME: test clip2\n' + + expected = \ + 'TITLE: test_nucoda_timeline\n\n' \ + '001 AX V C ' \ + '00:00:00:00 00:00:00:05 00:00:00:00 00:00:00:05\n' \ + '* FROM CLIP NAME: test clip1\n' \ + '* FROM FILE: S:\\var\\tmp\\test.exr\n' \ + '002 AX V C ' \ + '00:00:00:00 00:00:00:05 00:00:00:05 00:00:00:10\n' \ + '* FROM CLIP NAME: test clip2\n' \ '* FROM FILE: S:\\var\\tmp\\test.exr\n' - ) + + self.assertEqual(result, expected) def test_nucoda_edl_write_with_transition(self): track = otio.schema.Track() @@ -438,6 +439,61 @@ def test_nucoda_edl_write_with_transition(self): self.assertEqual(result, expected) + def test_nucoda_edl_write_with_double_transition(self): + track = otio.schema.Track() + tl = otio.schema.Timeline(tracks=[track]) + + cl = otio.schema.Clip( + metadata={'cmx_3600': {'reel': 'Reel1'}}, + source_range=otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(24.0, 24.0), + duration=otio.opentime.RationalTime(24.0, 24.0) + ) + ) + trans = otio.schema.Transition( + in_offset=otio.opentime.RationalTime(6.0, 24.0), + out_offset=otio.opentime.RationalTime(6.0, 24.0) + ) + cl2 = otio.schema.Clip( + metadata={'cmx_3600': {'reel': 'Reel2'}}, + source_range=otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(24.0, 24.0), + duration=otio.opentime.RationalTime(24.0, 24.0) + ) + ) + trans2 = otio.schema.Transition( + in_offset=otio.opentime.RationalTime(6.0, 24.0), + out_offset=otio.opentime.RationalTime(6.0, 24.0) + ) + cl3 = otio.schema.Clip( + metadata={'cmx_3600': {'reel': 'Reel3'}}, + source_range=otio.opentime.TimeRange( + start_time=otio.opentime.RationalTime(24.0, 24.0), + duration=otio.opentime.RationalTime(24.0, 24.0) + ) + ) + tl.tracks[0].extend([cl, trans, cl2, trans2, cl3]) + + result = otio.adapters.write_to_string( + tl, + adapter_name='cmx_3600', + style='nucoda' + ) + + expected = \ + '001 Reel1 V C ' \ + '00:00:01:00 00:00:01:18 00:00:00:00 00:00:00:18\n' \ + '002 Reel1 V C ' \ + '00:00:01:18 00:00:01:18 00:00:00:18 00:00:00:18\n' \ + '002 Reel2 V D 012 ' \ + '00:00:00:18 00:00:01:18 00:00:00:18 00:00:01:18\n' \ + '003 Reel2 V C ' \ + '00:00:01:18 00:00:01:18 00:00:01:18 00:00:01:18\n' \ + '003 Reel3 V D 012 ' \ + '00:00:00:18 00:00:02:00 00:00:01:18 00:00:03:00\n' + + self.assertEqual(result, expected) + def test_custom_reel_names(self): track = otio.schema.Track() tl = otio.schema.Timeline(tracks=[track]) @@ -489,5 +545,22 @@ def test_invalid_edl_style_raises_exception(self): ) +class UtilsTest(unittest.TestCase): + + def test_lookahead_and_behind_enumerate(self): + result = [] + for window in cmx_3600.lookahead_and_behind_enumerate(range(0,6)): + result.append(window) + + expected = [(None, 0, 1), + (0, 1, 2), + (1, 2, 3), + (2, 3, 4), + (3, 4, 5), + (4, 5, None)] + + self.assertEqual(result, expected) + + if __name__ == '__main__': unittest.main()