Snippets
Revised by
Lucas Correia
fe4c037
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 | # :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)
|
You can clone a snippet to your computer for local editing. Learn more.