AcademySoftwareFoundation / AcademySoftwareFoundation/OpenTimelineIO

Avid Media Composer AAF fails when reading group clips

Open
#827 3 comments 0 reactions 0 assignees View on GitHub
bug help wanted
Dominant language
C++
Stars
2k
Forks
351
Avg merge
1d 12h
Merged PRs (30d)
1

Description

I'm experimenting with OTIO for AAF roundtrips in Avid and doing some programmatic reordering of clips. Pretty simple stuff, let's say sorting the clips alphabetically.

I am running into problems with group clips. Sometimes they work, sometimes they don't. It's unclear when there is a problem.

Are AAF Group Clips from Avid supported in the current adapter set? Any guidance in getting this working? Or maybe some hints as to where to look?

ISSUE 1

```
Traceback (most recent call last):
File "Python/opentimelinio-testing/controller.py", line 3, in
timeline = otio.adapters.read_from_file("/Users/russellanderson/Desktop/thetest.aaf")
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/opentimelineio/adapters/__init__.py", line 140, in read_from_file
return adapter.read_from_file(
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/opentimelineio/adapters/adapter.py", line 137, in read_from_file
result = self._execute_function(
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/opentimelineio/plugins/python_plugin.py", line 174, in _execute_function
return (getattr(self.module(), func_name)(**kwargs))
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.py", line 1147, in read_from_file
result = _transcribe(top, parents=list(), edit_rate=None)
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.py", line 562, in _transcribe
result.append(_transcribe(child, parents + [item], edit_rate, indent + 2))
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.py", line 247, in _transcribe
track = _transcribe(slot, parents + [item], edit_rate, indent + 2)
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.py", line 448, in _transcribe
child = _transcribe(item.segment, parents + [item], edit_rate, indent + 2)
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.py", line 434, in _transcribe
child = _transcribe(component, parents + [item], edit_rate, indent + 2)
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.py", line 497, in _transcribe
alternates = [
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.py", line 498, in
_transcribe(alt, parents + [item], edit_rate, indent + 2)
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.py", line 262, in _transcribe
mobs = _find_timecode_mobs(item)
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.py", line 130, in _find_timecode_mobs
for c in item.walk():
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/aaf2/components.py", line 204, in walk
raise NotImplementedError("Sequence returned {} not "
NotImplementedError: Sequence returned not implemented
```

ISSUE 2
```
Untitled SourceClip_MUTED
Untitled SourceClip
Untitled SourceClip
Untitled SourceClip_MUTED
Untitled SourceClip
Untitled SourceClip
Traceback (most recent call last):
File "Python/opentimelinio-testing/controller.py", line 11, in
anything = otio.adapters.write_to_file(timeline, "/Users/russellanderson/Desktop/mydemo.aaf")
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/opentimelineio/adapters/__init__.py", line 191, in write_to_file
return adapter.write_to_file(
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/opentimelineio/adapters/adapter.py", line 194, in write_to_file
result = self._execute_function(
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/opentimelineio/plugins/python_plugin.py", line 174, in _execute_function
return (getattr(self.module(), func_name)(**kwargs))
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/opentimelineio_contrib/adapters/advanced_authoring_format.py", line 1174, in write_to_file
aaf_writer.validate_metadata(timeline)
File "Python/opentimelinio-testing/venv/lib/python3.9/site-packages/opentimelineio_contrib/adapters/aaf_adapter/aaf_writer.py", line 200, in validate_metadata
raise AAFValidationError("\n" + "\n".join(
opentimelineio_contrib.adapters.aaf_adapter.aaf_writer.AAFValidationError:
Untitled SourceClip_MUTED Clip.media_reference.available_range.duration.rate does not exist, 'NoneType' object has no attribute 'duration'
Untitled SourceClip_MUTED Clip.media_reference.available_range.start_time.rate does not exist, 'NoneType' object has no attribute 'start_time'
Untitled SourceClip Clip.media_reference.available_range.duration.rate does not exist, 'NoneType' object has no attribute 'duration'
Untitled SourceClip Clip.media_reference.available_range.start_time.rate does not exist, 'NoneType' object has no attribute 'start_time'
Untitled SourceClip Clip.media_reference.available_range.duration.rate does not exist, 'NoneType' object has no attribute 'duration'
Untitled SourceClip Clip.media_reference.available_range.start_time.rate does not exist, 'NoneType' object has no attribute 'start_time'
Untitled SourceClip_MUTED Clip.media_reference.available_range.duration.rate does not exist, 'NoneType' object has no attribute 'duration'
Untitled SourceClip_MUTED Clip.media_reference.available_range.start_time.rate does not exist, 'NoneType' object has no attribute 'start_time'
Untitled SourceClip Clip.media_reference.available_range.duration.rate does not exist, 'NoneType' object has no attribute 'duration'
Untitled SourceClip Clip.media_reference.available_range.start_time.rate does not exist, 'NoneType' object has no attribute 'start_time'
Untitled SourceClip Clip.media_reference.available_range.duration.rate does not exist, 'NoneType' object has no attribute 'duration'
Untitled SourceClip Clip.media_reference.available_range.start_time.rate does not exist, 'NoneType' object has no attribute 'start_time'
```

Contributor guide

Open the contributing guide

Research direction

Start with opentimelineio_contrib/adapters/advanced_authoring_format.py, especially _transcribe and _find_timecode_mobs, then inspect aaf_writer.py's validate_metadata. Reproduce the two AAF cases described in the traceback and trace group-clip reading and writing. Done means the reported group clips can be read and written without these exceptions.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.