Snippets

Lucas Correia API Example - Create media in encoding state

Updated by Lucas Correia

File README.md Added

  • Ignore whitespace
  • Hide word diff
+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`

File create_test_encoding_media.py Modified

  • Ignore whitespace
  • Hide word diff
 # # :copyright: Copyright (c) 2020 ftrack
 import os.path
 import json
+import logging
 
 import ftrack_api
-session = ftrack_api.Session()
+
+logger = logging.getLogger('create_test_media')
+
 
 PROJECT_NAME = 'Encoding test project'
 MEDIA_DIRECTORY = os.path.dirname(__file__)
 MEDIA_2160 = os.path.join(MEDIA_DIRECTORY, 'ftrackreview-mp4-2160.mp4')
 
 
-def upload_media(asset_version, file_path, name='ftrackreview-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,
     return component
 
 
-def create_asset(parent, name, asset_type=None):
+def create_asset(session, parent, name, asset_type=None):
     if asset_type is None:
         asset_type = session.query('AssetType where name is "Upload"').one()
 
     return asset_version
 
 
-def clean_up(project):
+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 main():
+def main(session):
+    logger.info('Creating or cleaning up project "{}"'.format(PROJECT_NAME))
     project = session.ensure('Project', {
         'name': PROJECT_NAME
     })
-    clean_up(project)
+    clean_up(session, project)
 
-    asset_version = create_asset(project, 'Test 1 (Encoding)')
-    component = upload_media(asset_version, MEDIA_720)
+    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()
 
-    asset_version = create_asset(project, 'Test 2 (Processing additional resolutions)')
+    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(asset_version, MEDIA_720)
+    component_1 = upload_media(session, asset_version, MEDIA_720)
     component_1['metadata']['ftr_meta'] = json.dumps({
         'frameIn': 0,
         'frameOut': 150,
     component_2['metadata']['ftr_meta'] = 'encoding'
     session.commit()
 
-    asset_version = create_asset(project, 'Test 3 (Complete)')
+    logger.info('Creating asset 3')
+    asset_version = create_asset(session, project, 'Test 3 (Complete)')
     asset_version.create_thumbnail(THUMBNAIL_FILE)
-    component_1 = upload_media(asset_version, MEDIA_720)
+    component_1 = upload_media(session, asset_version, MEDIA_720)
     component_1['metadata']['ftr_meta'] = json.dumps({
         'frameIn': 0,
         'frameOut': 150,
         'width': 1280,
         'height': 720,
     })
-    component_2 = upload_media(asset_version, MEDIA_1080, 'ftrackreview-mp4-1080')
+    component_2 = upload_media(session, asset_version, MEDIA_1080, 'ftrackreview-mp4-1080')
     component_2['metadata']['ftr_meta'] = json.dumps({
         'frameIn': 0,
         'frameOut': 150,
         'height': 1080,
     })
     session.commit()
+    
+    logger.info('Completed successfully')
 
 
 if __name__ == '__main__':
-    main()
+    logging.basicConfig(level=logging.INFO)
+    session = ftrack_api.Session(auto_connect_event_hub=True)
+    main(session)
Updated by Lucas Correia

File create_test_encoding_media.py Modified

  • Ignore whitespace
  • Hide word diff
 # :coding: utf-8
 # # :copyright: Copyright (c) 2020 ftrack
+import os.path
 import json
 
 import ftrack_api
 session = ftrack_api.Session()
 
-PROJECT_NAME = 'foo'
-PATH_TO_MEDIA = '/Users/lucas/Downloads/Test media/test-file-01.mp4'
+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(asset_version, file_path, name='ftrackreview-mp4'):
 
 
 def main():
-    project = session.query('Project where name is "{}"'.format(PROJECT_NAME)).one()
+    project = session.ensure('Project', {
+        'name': PROJECT_NAME
+    })
     clean_up(project)
 
     asset_version = create_asset(project, 'Test 1 (Encoding)')
-    component = upload_media(asset_version, PATH_TO_MEDIA)
+    component = upload_media(asset_version, MEDIA_720)
     component['metadata']['ftr_meta'] = 'encoding'
     session.commit()
 
     asset_version = create_asset(project, 'Test 2 (Processing additional resolutions)')
-    component_1 = upload_media(asset_version, PATH_TO_MEDIA)
+    asset_version.create_thumbnail(THUMBNAIL_FILE)
+    component_1 = upload_media(asset_version, MEDIA_720)
     component_1['metadata']['ftr_meta'] = json.dumps({
         'frameIn': 0,
         'frameOut': 150,
     session.commit()
 
     asset_version = create_asset(project, 'Test 3 (Complete)')
-    component_1 = upload_media(asset_version, PATH_TO_MEDIA)
+    asset_version.create_thumbnail(THUMBNAIL_FILE)
+    component_1 = upload_media(asset_version, MEDIA_720)
     component_1['metadata']['ftr_meta'] = json.dumps({
         'frameIn': 0,
         'frameOut': 150,
         'width': 1280,
         'height': 720,
     })
-    component_2 = upload_media(asset_version, PATH_TO_MEDIA, 'ftrackreview-mp4-1080')
+    component_2 = upload_media(asset_version, MEDIA_1080, 'ftrackreview-mp4-1080')
     component_2['metadata']['ftr_meta'] = json.dumps({
         'frameIn': 0,
         'frameOut': 150,

File ftrackreview-mp4-1080.mp4 Added

  • Ignore whitespace
  • Hide word diff
Binary file added.

File ftrackreview-mp4-2160.mp4 Added

  • Ignore whitespace
  • Hide word diff
Binary file added.

File ftrackreview-mp4.mp4 Added

  • Ignore whitespace
  • Hide word diff
Binary file added.

File thumbnail.jpg Added

  • Ignore whitespace
  • Hide word diff
Created by Lucas Correia

File create_test_encoding_media.py Added

  • Ignore whitespace
  • Hide word diff
+# :coding: utf-8
+# # :copyright: Copyright (c) 2020 ftrack
+import json
+
+import ftrack_api
+session = ftrack_api.Session()
+
+PROJECT_NAME = 'foo'
+PATH_TO_MEDIA = '/Users/lucas/Downloads/Test media/test-file-01.mp4'
+
+
+def upload_media(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(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(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 main():
+    project = session.query('Project where name is "{}"'.format(PROJECT_NAME)).one()
+    clean_up(project)
+
+    asset_version = create_asset(project, 'Test 1 (Encoding)')
+    component = upload_media(asset_version, PATH_TO_MEDIA)
+    component['metadata']['ftr_meta'] = 'encoding'
+    session.commit()
+
+    asset_version = create_asset(project, 'Test 2 (Processing additional resolutions)')
+    component_1 = upload_media(asset_version, PATH_TO_MEDIA)
+    component_1['metadata']['ftr_meta'] = json.dumps({
+        'frameIn': 0,
+        'frameOut': 150,
+        'frameRate': 25,
+        'width': 1280,
+        'height': 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()
+
+    asset_version = create_asset(project, 'Test 3 (Complete)')
+    component_1 = upload_media(asset_version, PATH_TO_MEDIA)
+    component_1['metadata']['ftr_meta'] = json.dumps({
+        'frameIn': 0,
+        'frameOut': 150,
+        'frameRate': 25,
+        'width': 1280,
+        'height': 720,
+    })
+    component_2 = upload_media(asset_version, PATH_TO_MEDIA, 'ftrackreview-mp4-1080')
+    component_2['metadata']['ftr_meta'] = json.dumps({
+        'frameIn': 0,
+        'frameOut': 150,
+        'frameRate': 25,
+        'width': 1920,
+        'height': 1080,
+    })
+    session.commit()
+
+
+if __name__ == '__main__':
+    main()
  1. 1
  2. 2
HTTPS SSH

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