Skip to main content

Job Types & Descriptions

A Job Description is the JSON document that instructs Closed Caption Converter what to do with a caption file. It is passed as the config field in API requests, used by the CLI as a configuration file, and generated automatically by the web application when you configure and run a job. Every job — from a simple format conversion to a multi-step transcription and delivery workflow — is expressed as a Job Description.

Job description form

The web application's Job Description modal (accessible from the toolbar) shows you the exact JSON that will be sent to the API for any job you configure. You can copy it directly, download it as a file, or export it as a Postman collection.

Job Description Structure

Every Job Description is a JSON object. The following table describes the top-level fields:

FieldTypeDefaultDescription
job_typestring"convert"The type of job to perform. See Job Types below.
source_profilestring"SubRip Video Subtitle Script"The profile name used to decode the source file. Must match a supported source profile name exactly.
target_profilestring"SubRip Video Subtitle Script"The profile name used to encode the output file. Must match a supported target profile name exactly.
default_frameRatenumber29.97The frame rate used when the source format does not carry frame rate metadata.
default_dropFramebooleantrueThe drop-frame flag used alongside default_frameRate.
source_frameRatestring or number"auto"The frame rate to use when reading source timecodes. Set to "auto" to read from the file.
target_frameRatestring or number"auto"The frame rate to write to the output file. Set to "auto" to match the source.
offsetstring"00:00:00:00"SMPTE timecode offset applied to all events.
offset_typestring"add"Whether to "add" or "subtract" the offset value.
incodestring"00:00:00:00"Programme start timecode. All events are normalised relative to this value. Set to "auto" to use the first event's in-time.
encoding_optionsarray[]Format-specific encode options. Each element is an object with name and selected properties matching a target profile's available options.
decoding_optionsarray[]Format-specific decode options. Each element is an object with name and selected properties.
auto_format_optionsobjectsee belowConfiguration for the Auto Format filter.
auto_correct_timing_optionsobjectsee belowConfiguration for the Automatic Reading Speed filter.
event_gap_optionsobjectsee belowConfiguration for the Event Gap filter.
remove_forced_subsobjectsee belowConfiguration for the Remove Forced Subtitles filter.
searchesarray[]Array of Search & Replace rules.
segmentsarray[]Array of Segmentation & Conform segment definitions.
qcobjectsee belowAutomatic QC configuration.
media_pathstring""URL of the audio/video file for transcription or alignment jobs.
webhookstring""A URL that receives a POST callback when the job completes.
delivery_optionsobjectsee belowOutput delivery configuration for storage and platform providers.
transcribe_optionsobjectsee belowTranscription configuration including provider ID and language.
translate_optionsobjectsee belowTranslation configuration including provider ID, source, and target languages.

Job Types

The job_type field determines which processing path the job follows. The five supported job types are described below.

convert

The standard job type for all format conversion and conform workflows. The source file is decoded using the specified source profile, any configured filters are applied in order, and the result is encoded using the target profile.

{
"job_type": "convert",
"source_profile": "Scenarist V1.0",
"target_profile": "EBU STL",
"default_frameRate": 29.97,
"default_dropFrame": true,
"encoding_options": [
{ "name": "Language Code", "selected": "English" },
{ "name": "Country of Origin", "selected": "Canada" }
]
}

transcribe

Sends the audio or video at media_path to a configured transcription Access Provider, receives the transcript, converts it into the CCPRJ format, applies any configured filters, and encodes the result to the target profile. Requires a transcription provider to be configured in transcribe_options.

{
"job_type": "transcribe",
"target_profile": "SubRip Video Subtitle Script",
"media_path": "https://presigned-url-to/media.mp4",
"transcribe_options": {
"source_language": "en",
"provider_id": "your-transcription-provider-id",
"provider_options": {
"model": "nova-2",
"punctuate": true,
"diarize": false,
"utterances": true,
"utt_split": 0.8
}
}
}

The provider_options object is passed directly to the transcription service. Refer to your provider's documentation for supported parameters.

align

Aligns an existing caption or transcript file to audio/video content using a transcription provider's forced alignment capability. Like the transcribe job type, this requires a media_path and a configured transcription provider. The source caption file provides the text and the transcription engine provides the precise timing.

{
"job_type": "align",
"source_profile": "SubRip Video Subtitle Script",
"target_profile": "WebVTT",
"media_path": "https://presigned-url-to/media.mp4",
"transcribe_options": {
"source_language": "en",
"provider_id": "your-transcription-provider-id",
"provider_options": {
"model": "nova-2",
"punctuate": true
}
}
}

translate

Translates the text of the source caption file into a target language using a configured translation Access Provider. Timing and formatting are preserved throughout the translation process. Closed Caption Converter handles caption-aware batching to preserve sentence context across event boundaries.

{
"job_type": "translate",
"source_profile": "SubRip Video Subtitle Script",
"target_profile": "SubRip Video Subtitle Script",
"translate_options": {
"provider_id": "your-translation-provider-id",
"source_language": "en",
"target_language": "fr"
}
}

Language codes are passed directly to the translation service. Refer to your provider's documentation for supported language codes and dialects.

deliver

When delivery_options are included in a Job Description alongside another job type (such as convert or transcribe), the output file is automatically delivered to the specified storage or platform provider after processing is complete. The response still contains the output file in the standard JSON response, and additionally the file is written to the destination.

{
"job_type": "convert",
"source_profile": "SubRip Video Subtitle Script",
"target_profile": "WebVTT",
"delivery_options": {
"provider_id": "your-s3-provider-id",
"provider_options": {
"bucket": "your-bucket-name",
"region": "us-east-1",
"key": "output/captions/episode01.vtt"
}
}
}

Filter Configuration

Filters are configured as nested objects within the Job Description. Each filter has an enable flag that must be set to true to activate it, along with its specific settings.

Auto Format

"auto_format_options": {
"enable": true,
"max_lines": 2,
"max_characters": 32,
"min_duration": 1,
"allow_orphan_words": false,
"selective": true
}

Automatic Reading Speed

"auto_correct_timing_options": {
"enable": true,
"max_cps": 25,
"min_duration": 1,
"max_duration": 12,
"min_frame_gap": 2
}

Event Gap

"event_gap_options": {
"enable": true,
"frames": 2,
"min_gap": 0,
"max_gap": 6,
"shot_change_aware": false,
"shot_changes": []
}

Search & Replace

The searches array contains one or more replacement rules:

"searches": [
{
"find": "colour",
"replace": "color",
"regex": false,
"caseSensitive": false
}
]

Segmentation & Conform

The segments array defines the regions to extract:

"segments": [
{
"incode": "01:00:00:00",
"outcode": "01:15:00:00",
"tcFormat": "smpte"
}
]

Remove Forced Subtitles

"remove_forced_subs": {
"enable": true,
"remove": true
}

Set remove to true to remove forced events, or false to keep only forced events and remove all others.

Automatic QC

"qc": {
"content": {
"enabled": true,
"maxChars": 84,
"maxLines": 2,
"maxCps": 25,
"maxWpm": 250,
"minEventGapFrames": 2,
"overlap": true,
"illegalChars608": false,
"illegalCharsNetflix": false
},
"technical": {
"enabled": false
}
}