Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

Commit

Permalink
Merge pull request #1545 from pypeclub/feature/1377-hiero-publish-wit…
Browse files Browse the repository at this point in the history
…h-retiming
  • Loading branch information
mkolar authored Jun 2, 2021
2 parents aced7fe + 2bb4733 commit f0d03eb
Show file tree
Hide file tree
Showing 25 changed files with 522 additions and 1,431 deletions.
83 changes: 81 additions & 2 deletions openpype/hosts/hiero/otio/hiero_export.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,76 @@ def _get_metadata(item):
return {}


def create_time_effects(otio_clip, track_item):
# get all subtrack items
subTrackItems = flatten(track_item.parent().subTrackItems())
speed = track_item.playbackSpeed()

otio_effect = None
# retime on track item
if speed != 1.:
# make effect
otio_effect = otio.schema.LinearTimeWarp()
otio_effect.name = "Speed"
otio_effect.time_scalar = speed
otio_effect.metadata = {}

# freeze frame effect
if speed == 0.:
otio_effect = otio.schema.FreezeFrame()
otio_effect.name = "FreezeFrame"
otio_effect.metadata = {}

if otio_effect:
# add otio effect to clip effects
otio_clip.effects.append(otio_effect)

# loop trought and get all Timewarps
for effect in subTrackItems:
if ((track_item not in effect.linkedItems())
and (len(effect.linkedItems()) > 0)):
continue
# avoid all effect which are not TimeWarp and disabled
if "TimeWarp" not in effect.name():
continue

if not effect.isEnabled():
continue

node = effect.node()
name = node["name"].value()

# solve effect class as effect name
_name = effect.name()
if "_" in _name:
effect_name = re.sub(r"(?:_)[_0-9]+", "", _name) # more numbers
else:
effect_name = re.sub(r"\d+", "", _name) # one number

metadata = {}
# add knob to metadata
for knob in ["lookup", "length"]:
value = node[knob].value()
animated = node[knob].isAnimated()
if animated:
value = [
((node[knob].getValueAt(i)) - i)
for i in range(
track_item.timelineIn(), track_item.timelineOut() + 1)
]

metadata[knob] = value

# make effect
otio_effect = otio.schema.TimeEffect()
otio_effect.name = name
otio_effect.effect_name = effect_name
otio_effect.metadata = metadata

# add otio effect to clip effects
otio_clip.effects.append(otio_effect)


def create_otio_reference(clip):
metadata = _get_metadata(clip)
media_source = clip.mediaSource()
Expand Down Expand Up @@ -197,8 +267,12 @@ def create_otio_markers(otio_item, item):

def create_otio_clip(track_item):
clip = track_item.source()
source_in = track_item.sourceIn()
duration = track_item.sourceDuration()
speed = track_item.playbackSpeed()
# flip if speed is in minus
source_in = track_item.sourceIn() if speed > 0 else track_item.sourceOut()

duration = int(track_item.duration())

fps = utils.get_rate(track_item) or self.project_fps
name = track_item.name()

Expand All @@ -220,6 +294,11 @@ def create_otio_clip(track_item):
create_otio_markers(otio_clip, track_item)
create_otio_markers(otio_clip, track_item.source())

# only if video
if not clip.mediaSource().hasAudio():
# Add effects to clips
create_time_effects(otio_clip, track_item)

return otio_clip


Expand Down
121 changes: 0 additions & 121 deletions openpype/hosts/hiero/plugins/_publish/collect_calculate_retime.py

This file was deleted.

23 changes: 0 additions & 23 deletions openpype/hosts/hiero/plugins/_publish/collect_framerate.py

This file was deleted.

30 changes: 0 additions & 30 deletions openpype/hosts/hiero/plugins/_publish/collect_metadata.py

This file was deleted.

90 changes: 0 additions & 90 deletions openpype/hosts/hiero/plugins/_publish/collect_timecodes.py

This file was deleted.

Loading

0 comments on commit f0d03eb

Please sign in to comment.