OpenTimelineIO icon indicating copy to clipboard operation
OpenTimelineIO copied to clipboard

Sequence returned <class 'aaf2.components.Sequence'> not implemented

Open emcodem opened this issue 4 years ago • 3 comments

Feature Request

  • [x] New Feature
  • [ ] Change Existing Behavior

Description

This sequence from Avid MCP seems to contain something that the aaf parser currently is not prepared for: SEQUENCE 2.zip

Context

To reproduce the issue, just try to open the sequence in otioview, it should fail after some seconds. otioview "E:\Downloads\COMPLEX SEQUENCE 2.aaf"

  File "c:\users\emcodem\appdata\local\programs\python\python38\lib\site-packages\opentimelineio_contrib\adapters\advanced_authoring_format.py", line 130, in _find_timecode_mobs
  File "c:\users\emcodem\appdata\local\programs\python\python38\lib\site-packages\aaf2\components.py", line 204, in walk
NotImplementedError: Sequence returned <class 'aaf2.components.Sequence'> not implemented

emcodem avatar Sep 30 '20 12:09 emcodem

Hi all, I'm having the same issue here, with a different file (I'll check if I can share it and I'll update the comment eventually). I don't think it's coming from OTIO, it seems to be caused by the aaf2 module.

Here's the full traceback, for reference:

NotImplementedError                       Traceback (most recent call last)
<ipython-input-4-e11a35ebd11b> in <module>()
----> 1 timeline = otio.adapters.read_from_file(file_path)

/Users/vvzen/miniconda2/envs/otio/lib/python2.7/site-packages/opentimelineio/adapters/__init__.pyc in read_from_file(filepath, adapter_name, media_linker_name, media_linker_argument_map, **adapter_argument_map)
    142         media_linker_name=media_linker_name,
    143         media_linker_argument_map=media_linker_argument_map,
--> 144         **adapter_argument_map
    145     )
    146 

/Users/vvzen/miniconda2/envs/otio/lib/python2.7/site-packages/opentimelineio/adapters/adapter.pyc in read_from_file(self, filepath, media_linker_name, media_linker_argument_map, hook_function_argument_map, **adapter_argument_map)
    145                 "read_from_file",
    146                 filepath=filepath,
--> 147                 **adapter_argument_map
    148             )
    149 

/Users/vvzen/miniconda2/envs/otio/lib/python2.7/site-packages/opentimelineio/plugins/python_plugin.pyc in _execute_function(self, func_name, **kwargs)
    172                 "Sorry, {} doesn't support {}.".format(self.name, func_name)
    173             )
--> 174         return (getattr(self.module(), func_name)(**kwargs))

/Users/vvzen/miniconda2/envs/otio/lib/python2.7/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.pyc in read_from_file(filepath, simplify, transcribe_log)
   1149 
   1150         # Transcribe just the top-level mobs
-> 1151         result = _transcribe(top, parents=list(), edit_rate=None)
   1152 
   1153     # AAF is typically more deeply nested than OTIO.

/Users/vvzen/miniconda2/envs/otio/lib/python2.7/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.pyc in _transcribe(item, parents, edit_rate, indent)
    564         result = otio.schema.SerializableCollection()
    565         for child in item:
--> 566             result.append(_transcribe(child, parents + [item], edit_rate, indent + 2))
    567     else:
    568         # For everything else, we just ignore it.

/Users/vvzen/miniconda2/envs/otio/lib/python2.7/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.pyc in _transcribe(item, parents, edit_rate, indent)
    249 
    250         for slot in item.slots:
--> 251             track = _transcribe(slot, parents + [item], edit_rate, indent + 2)
    252             _add_child(result.tracks, track, slot)
    253 

/Users/vvzen/miniconda2/envs/otio/lib/python2.7/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.pyc in _transcribe(item, parents, edit_rate, indent)
    450         result = otio.schema.Track()
    451 
--> 452         child = _transcribe(item.segment, parents + [item], edit_rate, indent + 2)
    453 
    454         _add_child(result, child, item.segment)

/Users/vvzen/miniconda2/envs/otio/lib/python2.7/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.pyc in _transcribe(item, parents, edit_rate, indent)
    427 
    428         for slot in item.slots:
--> 429             child = _transcribe(slot, parents + [item], edit_rate, indent + 2)
    430             _add_child(result, child, slot)
    431 

/Users/vvzen/miniconda2/envs/otio/lib/python2.7/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.pyc in _transcribe(item, parents, edit_rate, indent)
    436 
    437         for component in item.components:
--> 438             child = _transcribe(component, parents + [item], edit_rate, indent + 2)
    439             _add_child(result, child, component)
    440 

/Users/vvzen/miniconda2/envs/otio/lib/python2.7/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.pyc in _transcribe(item, parents, edit_rate, indent)
    443         _transcribe_log(msg, indent)
    444         result = _transcribe_operation_group(item, parents, metadata,
--> 445                                              edit_rate, indent + 2)
    446 
    447     elif isinstance(item, aaf2.mobslots.TimelineMobSlot):

/Users/vvzen/miniconda2/envs/otio/lib/python2.7/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.pyc in _transcribe_operation_group(item, parents, metadata, edit_rate, indent)
    891 
    892     for segment in item.getvalue("InputSegments"):
--> 893         child = _transcribe(segment, parents + [item], edit_rate, indent)
    894         if child:
    895             _add_child(result, child, segment)

/Users/vvzen/miniconda2/envs/otio/lib/python2.7/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.pyc in _transcribe(item, parents, edit_rate, indent)
    264 
    265         # Evidently the last mob is the one with the timecode
--> 266         mobs = _find_timecode_mobs(item)
    267 
    268         # Get the Timecode start and length values

/Users/vvzen/miniconda2/envs/otio/lib/python2.7/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.pyc in _find_timecode_mobs(item)
    132     mobs = [item.mob]
    133 
--> 134     for c in item.walk():
    135         if isinstance(c, aaf2.components.SourceClip):
    136             mob = c.mob

/Users/vvzen/miniconda2/envs/otio/lib/python2.7/site-packages/aaf2/components.pyc in walk(self)
    188         if isinstance(segment, SourceClip):
    189             yield segment
--> 190             for item in segment.walk():
    191                 yield item
    192 

/Users/vvzen/miniconda2/envs/otio/lib/python2.7/site-packages/aaf2/components.pyc in walk(self)
    188         if isinstance(segment, SourceClip):
    189             yield segment
--> 190             for item in segment.walk():
    191                 yield item
    192 

/Users/vvzen/miniconda2/envs/otio/lib/python2.7/site-packages/aaf2/components.pyc in walk(self)
    188         if isinstance(segment, SourceClip):
    189             yield segment
--> 190             for item in segment.walk():
    191                 yield item
    192 

/Users/vvzen/miniconda2/envs/otio/lib/python2.7/site-packages/aaf2/components.pyc in walk(self)
    204                     raise NotImplementedError("Sequence returned {} not "
    205                                               "implemented".format(
--> 206                                                   type(segment)))
    207 
    208         elif isinstance(segment, EssenceGroup):

NotImplementedError: Sequence returned <class 'aaf2.components.Sequence'> not implemented

vvzen avatar Jan 20 '21 15:01 vvzen

Any headway made with this?

I'm on a macOS 10.14.6, python 3.10.9, otio 0.15.0 and pyaf2 1.6.0. Having the same issue.

I'm exporting test AAFs from Avid 2018.12.15. I've tried with/without edit protocol and with/without ProTools compatibility on AAF export. I've tried flattening multicams, minimizing as far down as one clip in one track. Tried both audio and video.

russellaugust avatar Mar 07 '23 16:03 russellaugust

Referring this over to https://github.com/OpenTimelineIO/otio-aaf-adapter - all new development on the AAF adapter is being done there.

reinecke avatar Feb 15 '24 18:02 reinecke