Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AAF Export from otioconvert crashes / hangs Media Composer #1701

Closed
vade opened this issue Feb 15, 2024 · 9 comments
Closed

AAF Export from otioconvert crashes / hangs Media Composer #1701

vade opened this issue Feb 15, 2024 · 9 comments
Labels
bug A problem, flaw, or broken functionality.

Comments

@vade
Copy link
Contributor

vade commented Feb 15, 2024

Bug Report

Hello

I have a native macOS application which is using OTIO (via the OTIO Swift Bindings package) to create a Timeline object

This timeline saved to disk as a raw .otio file (not .otiod or .otioz, and then converted via otioconvert to an AAF.

The resulting AAF is being imported into Avid Media Composer 23.12.0 which results in a beachball / hang.

This OTIO converts to FCPX and FCP7 XML without issue, and loads in FCPX / Premiere just fine.

I'm honestly unsure if this is an issue on my end, or on the adaptor end. Any ideas welcome, and apologies if this is in the wrong repo, just LMK!

To Reproduce

Mclane.json

see attached simple OTIO file (rename to .otio - was named json to attach to the issue)

run otioconvert -i ~/Downloads/Mclane.otio -o ~/Downloads/Mclane.aaf -O 'AAF' -A use_empty_mob_ids="True"

Open AAF in Media Composer.

  1. Operating System
  • macOS 13.4.1
  • OTIO Swift Package as of master
  • Which links to [OpenTimelineIO @ 7302ff1](https://github.com/PixarAnimationStudios/OpenTimelineIO/tree/7302ff1547e6dc24c375cb79f403c18c77346b7b)
  1. Python version
  • Python 3.10.0
  1. OpenTimelineIO release version or commit hash
  • OTIO python package installed as
otioconvert --version                                                                                 
OpenTimelineIO version: 0.15.0
  1. Compiler information:
    Xcode 14.3.1 and 15.1

Expected Behavior

An AAF that opens correctly.

@vade vade added the bug A problem, flaw, or broken functionality. label Feb 15, 2024
@vade
Copy link
Contributor Author

vade commented Feb 15, 2024

I have the same issue with 0.17.0-dev1 Feedback from Slack from @markreidvfx

In a new venv
pip install opentimelineio==v0.17.0.dev1
pip install opentimelineio-plugins==0.17.0.dev1

results in an error from Avid when opening the AAF

image

@apetrynet
Copy link
Contributor

I noticed the rate for global start time and clips is set to 1.0. Is that intentional?

@vade
Copy link
Contributor Author

vade commented Feb 15, 2024

Yea, I noticed that as well. It might be a hiccup with our internal timeline -> OTIO converter. Is that something that would cause an AAF to fail?

@apetrynet
Copy link
Contributor

I'm sorry, I don't have much experience with AAF.

@vade
Copy link
Contributor Author

vade commented Feb 15, 2024

No apologies necessary! Im in the same boat haha.

@vade
Copy link
Contributor Author

vade commented Feb 16, 2024

Some more info:

In a clean venv installing OTIO like so:

pip install opentimelineio==v0.17.0.dev1
pip install opentimelineio-plugins==0.17.0.dev1

And then attempting to convert the OTIO sample of https://dpel.aswf.io/aws-picchu-edit/ OpenTImelineIO download

results in:

otioconvert -i ~/Downloads/aws-picchu-edit-4096x2048.otioz -o ~/Downloads/aws-picchu-edit-4096x2048.aaf -O 'AAF' -A use_empty_mob_ids="True"

Traceback (most recent call last):
  File "/Users/vade/miniconda3/envs/otio/bin/otioconvert", line 8, in <module>
    sys.exit(main())
  File "/Users/vade/miniconda3/envs/otio/lib/python3.10/site-packages/opentimelineio/console/otioconvert.py", line 278, in main
    otio.adapters.write_to_file(
  File "/Users/vade/miniconda3/envs/otio/lib/python3.10/site-packages/opentimelineio/adapters/__init__.py", line 192, in write_to_file
    return adapter.write_to_file(
  File "/Users/vade/miniconda3/envs/otio/lib/python3.10/site-packages/opentimelineio/adapters/adapter.py", line 189, in write_to_file
    result = self._execute_function(
  File "/Users/vade/miniconda3/envs/otio/lib/python3.10/site-packages/opentimelineio/plugins/python_plugin.py", line 142, in _execute_function
    return (getattr(self.module(), func_name)(**kwargs))
  File "/Users/vade/miniconda3/envs/otio/lib/python3.10/site-packages/otio_aaf_adapter/adapters/advanced_authoring_format.py", line 1604, in write_to_file
    aaf_writer.validate_metadata(timeline)
  File "/Users/vade/miniconda3/envs/otio/lib/python3.10/site-packages/otio_aaf_adapter/adapters/aaf_adapter/aaf_writer.py", line 179, in validate_metadata
    raise AAFValidationError("\n" + "\n".join(
otio_aaf_adapter.adapters.aaf_adapter.aaf_writer.AAFValidationError: 
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['PointList'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['DataDefinition']['Name'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['Description'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['Name'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['CutPoint'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['PointList'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['DataDefinition']['Name'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['Description'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['Name'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['CutPoint'] does not exist, 'AAF'
Carolina_Galarza_11 years old.mov<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.duration.rate not equal to 24.0 (expected) != 59.94005994005994 (actual)
Carolina_Galarza_11 years old.mov<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.start_time.rate not equal to 24.0 (expected) != 59.94005994005994 (actual)
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['PointList'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['DataDefinition']['Name'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['Description'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['Name'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['CutPoint'] does not exist, 'AAF'
250376-Pigs_shriek_and_squeals_chewing_and_rumble_sheep_bells.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.duration.rate not equal to 24.0 (expected) != 30.0 (actual)
250376-Pigs_shriek_and_squeals_chewing_and_rumble_sheep_bells.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.start_time.rate not equal to 24.0 (expected) != 30.0 (actual)
250376-Pigs_shriek_and_squeals_chewing_and_rumble_sheep_bells.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.duration.rate not equal to 24.0 (expected) != 30.0 (actual)
250376-Pigs_shriek_and_squeals_chewing_and_rumble_sheep_bells.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.start_time.rate not equal to 24.0 (expected) != 30.0 (actual)
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['PointList'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['DataDefinition']['Name'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['Description'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['Name'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['CutPoint'] does not exist, 'AAF'
519291-139337-felix-blume-wind-is-blowing-in-the-grass-of-a-patagonian-plain-wind-is-blowing-in-the-trees-in-background-tier.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.duration.rate not equal to 24.0 (expected) != 25.0 (actual)
519291-139337-felix-blume-wind-is-blowing-in-the-grass-of-a-patagonian-plain-wind-is-blowing-in-the-trees-in-background-tier.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.start_time.rate not equal to 24.0 (expected) != 25.0 (actual)
519291-139337-felix-blume-wind-is-blowing-in-the-grass-of-a-patagonian-plain-wind-is-blowing-in-the-trees-in-background-tier.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.duration.rate not equal to 24.0 (expected) != 25.0 (actual)
519291-139337-felix-blume-wind-is-blowing-in-the-grass-of-a-patagonian-plain-wind-is-blowing-in-the-trees-in-background-tier.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.start_time.rate not equal to 24.0 (expected) != 25.0 (actual)
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['PointList'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['DataDefinition']['Name'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['Description'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['Name'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['CutPoint'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['PointList'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['DataDefinition']['Name'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['Description'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['Name'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['CutPoint'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['PointList'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['DataDefinition']['Name'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['Description'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['OperationGroup']['Operation']['Name'] does not exist, 'AAF'
Cross Fade 0 dB<class 'opentimelineio._otio.Transition'> Transition.metadata['AAF']['CutPoint'] does not exist, 'AAF'
250376-Pigs_shriek_and_squeals_chewing_and_rumble_sheep_bells.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.duration.rate not equal to 24.0 (expected) != 30.0 (actual)
250376-Pigs_shriek_and_squeals_chewing_and_rumble_sheep_bells.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.start_time.rate not equal to 24.0 (expected) != 30.0 (actual)

Which renders out the following AAF:

And MC reports

image

aws-picchu-edit-4096x2048.aaf.zip

@vade
Copy link
Contributor Author

vade commented Feb 16, 2024

Using otiotool to remove transitions did not help, im getting the errors with rate which im assuming is some sort of either slow down or conform in the timeline (speed ramp or just treating 30 as 24fps for an over cranked look?

(otio) vade@Attitude-Adjuster ~ % otioconvert -i ~/Downloads/aws-picchu-edit-4096x2048/content-no-transition.otio -o ~/Downloads/aws-picchu-edit-4096x2048/content-no-transition.aaf -O 'AAF'
Traceback (most recent call last):
  File "/Users/vade/miniconda3/envs/otio/bin/otioconvert", line 8, in <module>
    sys.exit(main())
  File "/Users/vade/miniconda3/envs/otio/lib/python3.10/site-packages/opentimelineio/console/otioconvert.py", line 278, in main
    otio.adapters.write_to_file(
  File "/Users/vade/miniconda3/envs/otio/lib/python3.10/site-packages/opentimelineio/adapters/__init__.py", line 192, in write_to_file
    return adapter.write_to_file(
  File "/Users/vade/miniconda3/envs/otio/lib/python3.10/site-packages/opentimelineio/adapters/adapter.py", line 189, in write_to_file
    result = self._execute_function(
  File "/Users/vade/miniconda3/envs/otio/lib/python3.10/site-packages/opentimelineio/plugins/python_plugin.py", line 142, in _execute_function
    return (getattr(self.module(), func_name)(**kwargs))
  File "/Users/vade/miniconda3/envs/otio/lib/python3.10/site-packages/otio_aaf_adapter/adapters/advanced_authoring_format.py", line 1604, in write_to_file
    aaf_writer.validate_metadata(timeline)
  File "/Users/vade/miniconda3/envs/otio/lib/python3.10/site-packages/otio_aaf_adapter/adapters/aaf_adapter/aaf_writer.py", line 179, in validate_metadata
    raise AAFValidationError("\n" + "\n".join(
otio_aaf_adapter.adapters.aaf_adapter.aaf_writer.AAFValidationError: 
Carolina_Galarza_11 years old.mov<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.duration.rate not equal to 24.0 (expected) != 59.94005994005994 (actual)
Carolina_Galarza_11 years old.mov<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.start_time.rate not equal to 24.0 (expected) != 59.94005994005994 (actual)
250376-Pigs_shriek_and_squeals_chewing_and_rumble_sheep_bells.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.duration.rate not equal to 24.0 (expected) != 30.0 (actual)
250376-Pigs_shriek_and_squeals_chewing_and_rumble_sheep_bells.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.start_time.rate not equal to 24.0 (expected) != 30.0 (actual)
250376-Pigs_shriek_and_squeals_chewing_and_rumble_sheep_bells.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.duration.rate not equal to 24.0 (expected) != 30.0 (actual)
250376-Pigs_shriek_and_squeals_chewing_and_rumble_sheep_bells.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.start_time.rate not equal to 24.0 (expected) != 30.0 (actual)
519291-139337-felix-blume-wind-is-blowing-in-the-grass-of-a-patagonian-plain-wind-is-blowing-in-the-trees-in-background-tier.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.duration.rate not equal to 24.0 (expected) != 25.0 (actual)
519291-139337-felix-blume-wind-is-blowing-in-the-grass-of-a-patagonian-plain-wind-is-blowing-in-the-trees-in-background-tier.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.start_time.rate not equal to 24.0 (expected) != 25.0 (actual)
519291-139337-felix-blume-wind-is-blowing-in-the-grass-of-a-patagonian-plain-wind-is-blowing-in-the-trees-in-background-tier.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.duration.rate not equal to 24.0 (expected) != 25.0 (actual)
519291-139337-felix-blume-wind-is-blowing-in-the-grass-of-a-patagonian-plain-wind-is-blowing-in-the-trees-in-background-tier.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.start_time.rate not equal to 24.0 (expected) != 25.0 (actual)
250376-Pigs_shriek_and_squeals_chewing_and_rumble_sheep_bells.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.duration.rate not equal to 24.0 (expected) != 30.0 (actual)
250376-Pigs_shriek_and_squeals_chewing_and_rumble_sheep_bells.wav<class 'opentimelineio._otio.Clip'> Clip.media_reference.available_range.start_time.rate not equal to 24.0 (expected) != 30.0 (actual)

@vade
Copy link
Contributor Author

vade commented Feb 16, 2024

And otiostat has one validation on the sample otio file:

otiostat ~/Downloads/aws-picchu-edit-4096x2048/content.otio
parsed: True
top level object: Timeline.1
number of tracks: 26
There was a system error: track 5 is not the same duration as the other tracks. Track RationalTime(10547, 24) duration, vs: RationalTime(10588, 24)
deepest nesting: 4
number of clips: 508
total duration: RationalTime(10588, 24)
total duration in timecode: 00:07:21:04
top level rate: 24.0
clips with cdl data: 0
Tracks with non standard types: 0

@vade
Copy link
Contributor Author

vade commented Feb 16, 2024

Moved this to : OpenTimelineIO/otio-aaf-adapter#42

@vade vade closed this as completed Feb 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug A problem, flaw, or broken functionality.
Projects
None yet
Development

No branches or pull requests

2 participants