2 July 2026

Subtitle translation

New translate option translates subtitles from one language to another.

<?xml version="1.0"?>
<query>
    <userid>[UserID]</userid> <!-- required -->
    <userkey>[UserKey]</userkey> <!-- required -->
    <action>[Action]</action> <!-- required -->
    <source>[SourceFile]</source> <!-- required -->
    <format>
        <output>closed_captions</output> <!-- required-->
        <translate>
            <source_language>[LanguageCode]</source_language>
            <target_language>[LanguageCode]</target_language>
        </translate>
    </format>
</query>
{
  "query": {
    "userid": "[UserID]", // required
    "userkey": "[UserKey]", // required
    "action": "[Action]", // required
    "source": "[SourceFile]", // required
    "format": {
      "output": "closed_captions",
      "translate": {
        "source_language": "[LanguageCode]",
        "target_language": "[LanguageCode]"
      }
    }
  }
}
ParameterDescriptionAllowed ValuesDefault Value
source_languageSource language2 or 3 characters language codenone
target_languageTarget language2 or 3 characters language codenone

STT non-verbal and music cue normalization

The stt option group now controls how non-verbal and music cues are formatted in the generated captions.

  • normalize_non_verbal changed from a yes/no toggle to an enum: Default, Remove, Parentheses, SquareBrackets (default Default).
  • normalize_music changed from a yes/no toggle to a free-text value — the text/symbol used to denote music cues (case-preserved).
<?xml version="1.0"?>
<query>
    <userid>[UserID]</userid> <!-- required -->
    <userkey>[UserKey]</userkey> <!-- required -->
    <action>[Action]</action> <!-- required -->
    <source>[SourceFile]</source> <!-- required -->
    <format>
        <output>closed_captions</output> <!-- required-->
        <stt>
            <model>[base|tiny|small|medium|largev2|largev3]</model>
            <language>[LanguageCode]</language>
            <prompt></prompt>
            <refine_timing>[yes|no]</refine_timing>
            <normalize_non_verbal>[Default|Remove|Parentheses|SquareBrackets]</normalize_non_verbal>
            <normalize_music>[MusicCueText]</normalize_music>
            <audio_stream>
                [AudioStreamDefinition]
            </audio_stream>
        </stt>
    </format>
</query>
{
  "query": {
    "userid": "[UserID]", // required
    "userkey": "[UserKey]", // required
    "action": "[Action]", // required
    "source": "[SourceFile]", // required
    "format": {
      "output": "closed_captions",
      "stt": {
        "model": "[base|tiny|small|medium|largev2|largev3]",
        "language": "[LanguageCode]",
        "prompt": "",
        "refine_timing": "[yes|no]",
        "normalize_non_verbal": "[Default|Remove|Parentheses|SquareBrackets]",
        "normalize_music": "[MusicCueText]",
        "audio_stream": {
          [AudioStreamDefinition]
        }
      }
    }
  }
}
ParameterDescriptionAllowed ValuesDefault Value
normalize_non_verbalHow non-verbal cues (e.g. sound effects) are formatted. Default: keep as produced by the model; Remove: strip them; Parentheses: wrap in ( ); SquareBrackets: wrap in [ ]Default, Remove, Parentheses, SquareBracketsDefault
normalize_musicText/symbol used to denote music cues (case-preserved)Textnone

New Preset Options

  • preset_mode controls how an output_preset is applied in AddMedia request. The default behavior (default, or when the parameter is omitted) is unchanged: the preset only fills in top-level <format> fields that the request did not specify. With recursive, the preset and the request are merged recursively, so the request can override any preset value at any nesting level (individual streams, audio streams, codec parameters, etc.). Array elements such as <stream> are matched by position.

  • include_defaults in SavePreset API request controls whether system/encoding defaults are baked into a preset. The default (yes, or when omitted) is unchanged. Set it to no to store a preset that contains only the values that were explicitly specified.

Applying a preset with recursive merge

<?xml version="1.0"?>
<query>
    <userid>[UserID]</userid> <!-- required -->
    <userkey>[UserKey]</userkey> <!-- required -->
    <action>AddMedia</action> <!-- required -->
    <source>[SourceFile]</source> <!-- required -->
    <format>
        <output_preset>[PresetName]</output_preset> <!-- required -->
        <preset_mode>recursive</preset_mode>
        <destination>[Destination]</destination>
        <stream>
            <bitrate>6000k</bitrate> <!-- overrides only this value of the preset's first stream -->
        </stream>
    </format>
</query>
{
  "query": {
    "userid": "[UserID]",
    "userkey": "[UserKey]",
    "action": "AddMedia",
    "source": "[SourceFile]",
    "format": {
      "output_preset": "[PresetName]",
      "preset_mode": "recursive",
      "destination": "[Destination]",
      "stream": [
        {
          "bitrate": "6000k"
        }
      ]
    }
  }
}

Saving a lean preset (without defaults)

<?xml version="1.0"?>
<query>
    <userid>[UserID]</userid> <!-- required -->
    <userkey>[UserKey]</userkey> <!-- required -->
    <action>SavePreset</action> <!-- required -->
    <name>[PresetName]</name>
    <include_defaults>no</include_defaults>
    <format>
        <output>[output]</output> <!-- required -->
        [FormatParams]
    </format>
</query>
{
  "query": {
    "userid": "[UserID]",
    "userkey": "[UserKey]",
    "action": "SavePreset",
    "name": "[PresetName]",
    "include_defaults": "no",
    "format": {
      "output": "[output]"
    }
  }
}
ParameterDescriptionAllowed ValuesDefault Value
preset_modeFor AddMedia action: how an output_preset is merged into the request. default fills only missing top-level <format> fields; recursive merges preset and request recursively, with request values overriding the preset at any level.default, recursivedefault
include_defaultsFor SavePreset action: whether system/encoding defaults are baked into the saved preset. no stores only the explicitly specified values.yes, noyes