Snippets

Lucas Correia API Example - Create media in encoding state

You are viewing an old version of this snippet. View the current version.
Revised by Lucas Correia fe4c037

Create test project for encoding media

Instructions

  1. Clone this repository
  2. Activate a python virtual environment with ftrack-python-api installed.
  3. Ensure you have credentials in environment for the demo docker (e.g. source ~/dev/ftrack-spark-dev-backend/api_credentials.sh)
  4. Run the script python create_test_encoding_media.py
# :coding: utf-8
# # :copyright: Copyright (c) 2020 ftrack
import os.path
import json
import logging

import ftrack_api

logger = logging.getLogger('create_test_media')


PROJECT_NAME = 'Encoding test project'
MEDIA_DIRECTORY = os.path.dirname(__file__)
THUMBNAIL_FILE = os.path.join(MEDIA_DIRECTORY, 'thumbnail.jpg')
MEDIA_720 = os.path.join(MEDIA_DIRECTORY, 'ftrackreview-mp4.mp4')
MEDIA_1080 = os.path.join(MEDIA_DIRECTORY, 'ftrackreview-mp4-1080.mp4')
MEDIA_2160 = os.path.join(MEDIA_DIRECTORY, 'ftrackreview-mp4-2160.mp4')


def upload_media(session, asset_version, file_path, name='ftrackreview-mp4'):
    server_location = session.get('Location', ftrack_api.symbol.SERVER_LOCATION_ID)
    component = asset_version.create_component(
        path=file_path,
        data={'name': name},
        location=server_location
    )
    return component


def create_asset(session, parent, name, asset_type=None):
    if asset_type is None:
        asset_type = session.query('AssetType where name is "Upload"').one()

    asset = session.create('Asset', {
        'name': name,
        'type': asset_type,
        'parent': parent
    })
    session.commit()
    asset_version = session.create('AssetVersion', {
        'asset': asset
    })
    session.commit()
    return asset_version


def clean_up(session, project):
    previous_assets = session.query('Asset where name like "Test %" and context_id is "{}"'.format(project['id']))
    for asset in previous_assets:
        session.delete(asset)
    session.commit()


def set_component_meta(component, width, height):
    component['metadata']['ftr_meta'] = json.dumps({
        'frameIn': 0,
        'frameOut': 150,
        'frameRate': 25,
        'width': width,
        'height': height,
    })


def main(session):
    logger.info('Creating or cleaning up project "{}"'.format(PROJECT_NAME))
    project = session.ensure('Project', {
        'name': PROJECT_NAME
    })
    clean_up(session, project)

    logger.info('Creating asset 1')
    asset_version = create_asset(session, project, 'Test 1 (Encoding)')
    component = upload_media(session, asset_version, MEDIA_720)
    component['metadata']['ftr_meta'] = 'encoding'
    session.commit()

    logger.info('Creating asset 2')
    asset_version = create_asset(session, project, 'Test 2 (Processing additional resolutions)')
    asset_version.create_thumbnail(THUMBNAIL_FILE)
    component_1 = upload_media(session, asset_version, MEDIA_720)
    set_component_meta(component_1, 1280, 720)

    component_2 = session.create('FileComponent', {
        'version_id': asset_version['id'],
        'name': 'ftrackreview-mp4-1080',
        'file_type': '.mp4',
    })
    component_2['metadata']['ftr_meta'] = 'encoding'
    session.commit()

    logger.info('Creating asset 3')
    asset_version = create_asset(session, project, 'Test 3 (Complete)')
    asset_version.create_thumbnail(THUMBNAIL_FILE)
    component_1 = upload_media(session, asset_version, MEDIA_720)
    set_component_meta(component_1, 1280, 720)

    component_2 = upload_media(session, asset_version, MEDIA_1080, 'ftrackreview-mp4-1080')
    set_component_meta(component_2, 1920, 1080)

    session.commit()

    logger.info('Creating asset 4')
    asset_version = create_asset(session, project, 'Test 4 (No components)')
    session.commit()

    logger.info('Creating asset 5')
    asset_version = create_asset(session, project, 'Test 5 (is_published = False)')
    asset_version['is_published'] = False
    component_1 = upload_media(session, asset_version, MEDIA_720)
    set_component_meta(component_1, 1280, 720)
    session.commit()

    logger.info('Creating asset 6')
    asset_type = session.query('AssetType where name is "Upload"').one()
    asset = session.create('Asset', {
        'name': 'Test 6 (No versions)',
        'type': asset_type,
        'parent': project
    })
    session.commit()

    logger.info('Completed successfully')


if __name__ == '__main__':
    logging.basicConfig(level=logging.INFO)
    session = ftrack_api.Session(auto_connect_event_hub=True)
    main(session)
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.