CQTAI
FFmpeg Media · FFmpeg

Concat with TransitionsNEW

📌 What is thisJoin clips in order with optional crossfade or dip-to-black transitions at chosen seams, plus head fade-in and tail fade-out.
💡 When to useUse when you want smooth transitions between clips instead of a hard cut at every seam. Specify the transition per seam; if all are "none" with no head/tail fade it matches concat's zero-re-encode fast path.

Endpoints

UsageMethodPath
Submit taskPOST/v1/ffmpeg/concat_transition
Query ResultGET/v1/ffmpeg/info?id={taskId}
Recommended polling intervalPoll every 3-5s (response includes progress 0-100) until status = succeeded / failed. status = queued means the task is enqueued and waiting to start (not charged yet) — just keep polling. Single-task timeout is 300s with auto-refund.

Request Parameters

ParamTypeRequiredDescription
inputUrlsstring[]RequiredVideo URL array, 2-500, in play order
transitionsobject[]RequiredPer-seam transitions, length exactly inputUrls − 1; each { index: 0..N-2 ascending, kind: none / crossfade / dip, durationMs: ms (0 for none) }. crossfade shortens total length via overlap; dip is dip-to-black and keeps total length
headFadeInMsintegerHead fade-in from black (ms), default 0; does not change total length
tailFadeOutMsintegerTail fade-out to black (ms), default 0; does not change total length
webhookUrlstringCompletion webhook URL (optional)

Request Example

curl -X POST https://api.cqtai.com/v1/ffmpeg/concat_transition \
  -H 'Authorization: Bearer <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{ "inputUrls": ["https://cdn.novapi.ai/veo31/1788164205419_de868f9d69d445baaf577d42e87a236f.mp4", "https://cdn.novapi.ai/veo31/1788164205419_de868f9d69d445baaf577d42e87a236f.mp4", "https://cdn.novapi.ai/veo31/1788164205419_de868f9d69d445baaf577d42e87a236f.mp4"], "transitions": [{ "index": 0, "kind": "crossfade", "durationMs": 300 }, { "index": 1, "kind": "none", "durationMs": 0 }], "headFadeInMs": 500, "tailFadeOutMs": 500 }'
# -> { "code":200, "data":"<taskId>" }

Response Example

{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "<taskId>",
    "operation": "transcode",
    "status": "succeeded",
    "progress": 100,
    "resultUrl": "https://cdn.novapi.ai/ffmpeg/xxx.mp4",
    "costPoints": 3,
    "errorMsg": null
  }
}

Billing & Credits

Factor 1.0, billed by total input length (same as concat) (x your user rate). Auto-refunded on failure.