Long-to-Short Highlights (Pro / Auto-Finished)

Turn one long piece of content (podcast / roundtable / talk show / interview / livestream replay) into multiple ready-to-publish highlight clips in one shot — no editor required. It shares the "semantic selection + jump-cut + word-level cut points" core with the rough cut and adds finishing-grade polish:

  • Blurred-background canvas fit: landscape or portrait input; on aspect conversion the frame is padded with a blurred background (premium look, no black bars);
  • Restrained camera moves: slow push-in / pull-out on selected segments (sub-pixel smooth, random yet reproducible, frequency-capped) — lively but never distracting;
  • Global speed-up: optionally speed up the whole clip while preserving pitch (no chipmunk voice);
  • Smart subtitles: auto-generated and burned in (punctuation stripped, split into screen-width short lines), optional bilingual translation; can remove source burned-in subtitles first;
  • Optional split-screen: two-people-on-screen segments composed into a vertical multi-panel (speaker on top / facing each other, white border).

Positioned as the Pro / volume path: it outputs only rendered mp4 clips (one per highlight), no timeline / project files — use the rough cut if you need to keep editing in an NLE.

Create Task

Basics

ItemValue
MethodPOST
Path/task/video_long2short_pro
Content-Typeapplication/json
AuthAuthorization header (raw API Key)
Billingby input video duration (minutes)

Request Body

FieldTypeRequiredDefaultDescription
file_idstringYesLong video file ID (from File Upload)
languagestringYesContent language, see list below; out-of-list returns unsupported-language error
output_languagestringNofollows languageOutput language for title / summary metadata
sttobjectNoPre-transcription; see the “stt object” in Long Video to Shorts (must include both word-level word_tc_list and sentence-level sentence_tc_list; missing either yields no sentences → empty selection); skips internal recognition. Manual scripts not accepted
main_topicstringNoMain topic hint for selection
output_sizestringNo9:16Canvas: 9:16 / 16:9 / 1:1 or custom like 1080x1920. Any input orientation, fitted with a blurred background
jump_cutbooleanNotrueJump-cut (intra-topic semantic compression)
durationobjectNo{}pref (auto/short/medium/long hint), max_clip_sec (per-clip cap sec, 5–1800). Semantic, no hard duration
split_screenobjectNo{enable:false}enable, orientation (auto / lr / tb). Only two-people segments are composed
camera_moveobjectNo{enable:true}Camera moves (see below)
speedobjectNo{factor:1.0}Global speed: factor (0.5–2.0), pitch-preserving
seamobjectNo{crossfade_ms:30}crossfade_ms (0–500) audio crossfade to smooth hard cuts
subtitleobjectNo{enable:true}Subtitles (see below)

camera_move object

FieldTypeDefaultDescription
enablebooleantrueEnable camera moves
probabilitynumber0.35Per-segment trigger probability (0–1)
amplitudenumber0.08Push/pull amount (0–0.5)
max_rationumber0.5Cap on the share of segments with moves (0–1)
blur_sigmanumber40Background blur strength (0–100)

subtitle object

FieldTypeDefaultDescription
enablebooleantrueBurn in subtitles
translate_languagestringTranslation language (same list); yields bilingual (source + translation)
purify_sourcebooleanfalseRemove source burned-in subtitles first (avoid ghosting); keep off for raw footage

Supported languages: zh-CN, zh-CHS, zh-CHT, en-US, ja-JP, ko-KR, fr-FR, es-ES, pt-PT, ru-RU, vi-VN.

Request Example

curl -X POST https://api.ai-mcn.tv:10000/task/video_long2short_pro \
  -H "Authorization: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "file_id": "81005495682916358",
    "language": "zh-CN",
    "output_size": "9:16",
    "camera_move": {"enable": true, "amplitude": 0.08},
    "speed": {"factor": 1.15},
    "subtitle": {"enable": true, "purify_source": true},
    "split_screen": {"enable": true}
  }'

Success Response

{
  "code": 200,
  "msg": "success",
  "data": {
    "task_id": "537489015178401",
    "task_type": "video_long2short_pro",
    "status": "queued"
  }
}

Query Task Result

Basics

ItemValue
MethodGET
Path/task/video_long2short_pro/{task_id}
AuthAuthorization header (raw API Key)

Response (output_result)

FieldTypeDescription
clipsarrayFinished highlights, each with publish metadata + the rendered file (below)
reportobjectSelection report (unit/clip counts, jump_cut, etc.) plus degradation status: degraded (bool — selection degraded or any polish step degraded; equivalent to errors being non-empty) and degraded_items (e.g. {"clip1": ["split_screen"]}, which clip degraded on which steps; {} when nothing degraded)
errorsobjectPer-polish (camera / speed / seam / split / subtitle) failures; core clip unaffected

clips[] element

FieldTypeDescription
title / summary / tagsstring / string / arrayTitle, summary, tags
score / score_reasonnumber / stringVirality score (0–10) and reason
highlight_wordsarrayHighlight words with word-level timing {text, begin_time, end_time}
genres / moods / themesarrayBGM style / mood / theme keywords
fileobjectThe rendered clip: {type:"video", format:"mp4", file_id, download_url, filename}

Error Codes

CodeHTTPMeaningFix
6013400file_id / language missingProvide required params
6004404File not foundCheck file_id
6014400File type mismatch (video required)Upload a video file
6016400Invalid params (camera_move/speed/seam/subtitle/output_size/duration out of range, or outputs/source_path passed)Fix per response
6017400Unsupported languageUse a supported language
6502401Auth failedCheck Authorization header
6201402Quota insufficientBuy a quota pack or top up
6202402Balance insufficientTop up in dashboard

Limits

  • Pro positioning: outputs only finished mp4; does not accept outputs / source_path (use the rough cut for project files).
  • Semantic, not duration-locked: clip count and length follow the content; duration is hint + per-clip cap only.
  • Restrained moves: push/pull triggered by probability with a frequency cap, limited amplitude, reproducible.
  • Pitch-preserving speed: global speed-up without pitch shift; factor 0.5–2.0.
  • Subtitles: punctuation stripped, split into short lines; enable subtitle.purify_source when the source has burned-in subtitles.
  • Billed by input duration: charged by input video minutes, regardless of clip count.
  • Core guarantee: the task fails only if selection / jump-cut fails (auto refund); camera / speed / seam / split / subtitle are degradable polish — single failures are recorded in errors without blocking output. Check report.degraded to know whether anything degraded and report.degraded_items for what — no need to parse errors yourself.