Snippets
Created by
Lucas Correia
last modified
Create test project for encoding media
Instructions
- Clone this repository
- Activate a python virtual environment with ftrack-python-api installed.
- Ensure you have credentials in environment for the demo docker (e.g.
source ~/dev/ftrack-spark-dev-backend/api_credentials.sh
) - Run the script
python create_test_encoding_media.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | # :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')
TEST_VIDEO_URL = os.environ.get('TEST_VIDEO_URL')
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)
previous_folders = session.query('TypedContext where name is "Folder" and project_id is "{}"'.format(project['id']))
for folder in previous_folders:
session.delete(folder)
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('Creating asset 7')
folder = session.create('Folder', { 'name': 'Folder', 'parent': project })
subfolder = session.create('Folder', { 'name': 'Subfolder', 'parent': folder })
asset_version = create_asset(session, subfolder, 'Test 7 (In subfolder)')
asset_version.create_thumbnail(THUMBNAIL_FILE)
component_1 = upload_media(session, asset_version, MEDIA_720)
set_component_meta(component_1, 1280, 720)
session.commit()
if TEST_VIDEO_URL:
logger.info('Creating asset 8 - ftrack.review')
asset_version = create_asset(session, subfolder, 'Test 8 (ftrack.review location)')
asset_version.create_thumbnail(THUMBNAIL_FILE)
review_location = session.query('Location where name is "ftrack.review"').one()
component_1 = asset_version.create_component(
path=TEST_VIDEO_URL,
data={'name': 'ftrackreview-mp4'},
location=review_location
)
set_component_meta(component_1, 1280, 720)
session.commit()
else:
logger.info('TEST_VIDEO_URL not set, skipping ftrack.review asset')
logger.info('Completed successfully')
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO)
session = ftrack_api.Session(auto_connect_event_hub=True)
main(session)
|
Comments (0)
You can clone a snippet to your computer for local editing. Learn more.