Source code for cgl.plugins.otio.tools.aaf.image_to_aaf


import os
import argparse
import pathlib
from urllib import parse

import aaf2

from cgl.plugins.otio.tools.aaf import aaf_embedded_media_tool


[docs] def update_still_length(f, mob_id, still_length = 720*2): master_mob = f.content.mobs.get(mob_id, None) assert master_mob for master_slot in master_mob.slots: master_slot.segment.length = still_length file_mob = master_slot.segment.mob for file_slot in file_mob.slots: file_slot.segment.length = still_length
[docs] def add_unc_path(f, mob_id, path): master_mob = f.content.mobs.get(mob_id, None) assert master_mob path = path.replace("/", '\\') master_mob.comments['UNC Path'] = path
[docs] def update_import_descriptor(f, image_path): for mob in f.content.sourcemobs(): if not isinstance(mob.descriptor, (aaf2.essence.TapeDescriptor, aaf2.essence.ImportDescriptor)): continue d = f.create.ImportDescriptor() loc = f.create.NetworkLocator() image_path = os.path.abspath(image_path).replace("\\", '/').lstrip('/') loc['URLString'].value = f"file:///{parse.quote(image_path)}" d["Locator"].append(loc) mob.descriptor = d break
[docs] def add_network_locators(aaf_path, media_path, mob_id): with aaf2.open(aaf_path, 'rw') as f: add_unc_path(f, mob_id, media_path) update_import_descriptor(f, media_path)
[docs] def image_to_aaf(image_path, aaf_path, width = 1920, height = 1080, dnxhd_media=None): basename = os.path.basename(image_path) mob_name = basename video_profile_name = "dnx_1080p_36_23.97" mob_id = aaf_embedded_media_tool.create_aaf_file([dnxhd_media or image_path], aaf_path, mob_name, mob_name, width=width, height=height, frame_rate=24, ignore_alpha = True, copy_dnxhd_streams=True, video_profile_name = video_profile_name, ) if mob_id: with aaf2.open(aaf_path, 'rw') as f: update_still_length(f, mob_id) add_unc_path(f, mob_id, image_path) update_import_descriptor(f, image_path) return mob_id
[docs] def run_cli(): parser = argparse.ArgumentParser( prog="convert a psd to a AAF", ) parser.add_argument("image_path", type=pathlib.Path) parser.add_argument("out_aaf_path", type=pathlib.Path, nargs='?', default=None) args = parser.parse_args() if not args.out_aaf_path: out_aaf_path = str(args.image_path) + ".aaf" else: out_aaf_path = str(args.out_aaf_path) image_to_aaf(str(args.image_path), out_aaf_path)
if __name__ == "__main__": run_cli()