Skip to main content
Live. Production-ready, available on all plans.
Burn subtitles permanently into a video. Provide an SRT, VTT, or ASS file as the subtitles input, or omit it to auto-transcribe the audio. Style the text with web-hex colors, an outline, a background box, and a position. This is the static counterpart to captions.animate, which renders per-word animated captions.
Timeout: 600 s max (plan-capped) · Accepts: video

Request

curl -X POST https://api.rendobar.com/jobs \
  -H "Authorization: Bearer rb_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "caption.burn",
    "inputs": {
      "source": "https://cdn.rendobar.com/assets/examples/sample.mp4",
      "subtitles": "https://cdn.rendobar.com/assets/examples/sample.srt"
    },
    "params": { "fontFamily": "Inter", "fontSize": 48, "boxEnabled": true }
  }'
Omit subtitles to auto-transcribe. The spoken language is detected by default (language: "auto"); pass an ISO-639-1 code to skip detection.

Inputs

source
string
required
URL of the source video to caption.
subtitles
string
URL of an SRT, VTT, or ASS subtitle file. A provided ASS file is burned as-is, preserving its own styling. Omit to auto-transcribe the audio.

Parameters

language
enum
default:"auto"
Spoken language for the auto-transcribe path, as an ISO-639-1 code (e.g. en, es, ja) or auto to detect. English uses a faster model; everything else routes to multilingual transcription. Ignored when a subtitle file is provided.
fontFamily
string
default:"Inter"
Font family. Must resolve to a font available to the renderer.
fontSize
integer
default:"48"
Font size in output pixels. Range 8–400.
fontColor
string
default:"#FFFFFF"
Text fill color as web hex (#RRGGBB or #AARRGGBB, alpha first).
bold
boolean
default:"true"
Render the text bold.
italic
boolean
default:"false"
Render the text italic.
outlineColor
string
default:"#000000"
Outline (stroke) color as web hex.
outlineWidth
number
default:"2"
Outline thickness in pixels. Range 0–20.
shadow
number
default:"1"
Drop-shadow depth in pixels. Range 0–20. 0 disables the shadow.
boxEnabled
boolean
default:"false"
Draw a filled background box behind the text (the accessibility “subtitle bar”).
boxColor
string
default:"#000000"
Background box color as web hex. Applies when boxEnabled is true.
boxOpacity
number
default:"0.6"
Background box opacity, 0 (transparent) to 1 (opaque).
position
enum
default:"bottom"
Vertical placement. One of bottom, center, top.
alignment
enum
default:"center"
Horizontal alignment. One of left, center, right.
marginV
integer
default:"60"
Vertical margin in pixels. Range 0–2000.
marginH
integer
default:"40"
Horizontal margin in pixels. Range 0–2000. Also bounds the line-wrap width.
maxCharsPerLine
integer
Maximum characters per line on the auto-transcribe path. Range 10–80.

Response

{ "data": { "id": "job_abc123", "status": "dispatched" } }
Poll GET /jobs/{id} until status: "complete", then read output.file.url (signed, 1-hour TTL). The burned video is a single file, so output.files lists that one file.

See also