Encoding media

Media such as images and video can be encoded by the ftrack server to allow playing it in the ftrack web interface. Media can be encoded using ftrack_api.session.Session.encode_media() which accepts a path to a file or an existing component in the ftrack.server location.

Here is an example of how to encode a video and read the output:

job = session.encode_media('/PATH/TO/MEDIA')
job_data = json.loads(job['data'])

print('Source component id {}'.format(job_data['source_component_id']))
print('Keeping original component'.format(job_data['keep_original']))
for output in job_data['output']:
    print('Output component - id: {0}, format: {1}'.format(
        output['component_id'], output['format']
    ))

You can also call the corresponding helper method on an asset version, to have the encoded components automatically associated with the version:

job = asset_version.encode_media('/PATH/TO/MEDIA')

It is also possible to get the URL to an encoded component once the job has finished:

job = session.encode_media('/PATH/TO/MEDIA')

# Wait for job to finish.

location = session.query('Location where name is "ftrack.server"').one()
for component in job['job_components']:
    print(location.get_url(component))

Media can also be an existing component in another location. Before encoding it, the component needs to be added to the ftrack.server location:

location = session.query('Location where name is "ftrack.server"').one()
location.add_component(component)
session.commit()

job = session.encode_media(component)