Hybrik Source Provider tasks
A Hybrik job must always start from a source
task, but what if you want to bring additional files into a Hybrik job later in the workflow? Perhaps you want to use an output from a previous task, or maybe you want to pass just a single file to a subsequent task.
The source_provider
task functions like a source
task, except that any previous source tasks or outputs from any previous tasks are ignored. It is a way to wipe the slate clean and start with a new source in the middle of a Hybrik job.
source_provider
’s can be asset_url
or asset_complex
.
Example
Let’s say that you have a JPEG 2000 master video and a separate stereo audio track. You want to first combine them in a ProRes mezzanine. From that mezzanine, you then want to burn-in subtitles into a low-bitrate proxy. In your initial source task, you would just pass in audio and video files in an asset_complex
, but not the subtitle source. You would need to supply the subtitles to the secondary transcode task where the proxy is created.
Our connections_array
, which defines the flow for the job, would look like this:
"connections": [
{
"from": [
{
"element": "sources"
}
],
"to": {
"success": [
{
"element": "transcode_task_mezzanine"
}
]
}
},
{
"from": [
{
"element": "transcode_task_mezzanine"
}
],
"to": {
"success": [
{
"element": "insert_burn_in_sources"
}
]
}
},
{
"from": [
{
"element": "insert_burn_in_sources"
}
],
"to": {
"success": [
{
"element": "proxy_burn_transcode"
}
]
}
}
]
Here is the source_provider
task (with uid
insert_burn_in_sources) that we would use after the “transcode_task_mezzanine” task. Note that we are providing both the mezzanine prores file and the subtitle source because a source provider ignores any previous inputs. In this case it is ignoring the mezzanine prores that was created by the “transcode_task_mezzanine” task.
{
"uid": "insert_burn_in_sources",
"kind": "source_provider",
"payload": {
"kind": "asset_complex",
"payload": {
"kind": "sequence",
"asset_versions": [
{
"version_uid": "video_audio",
"asset_components": [
{
"kind": "name",
"name": "{{file_pattern}}.mov",
"location": {
"storage_provider": "s3",
"path": "{{destination_path}}"
},
"contents": [
{
"kind": "video"
},
{
"kind": "audio"
}
]
},
{
"kind": "name",
"component_uid": "subtitle",
"name": "{{subtitle_source}}",
"location": {
"storage_provider": "s3",
"path": "{{source_path}}"
},
"contents": [
{
"kind": "subtitle",
"payload": {
"format": "auto"
}
}
]
}
]
}
]
}
}
}
See the full example to see each piece of the job flow.
Examples: