Auto Caption Burner - Viral Subtitles Burned In
Pricing
from $38.50 / 1,000 caption block (30s)s
Auto Caption Burner - Viral Subtitles Burned In
Burn word-by-word animated captions into a video you host, in one of five styles. You get the captioned MP4, an SRT, the full transcript and every word's timing. Runs on your own OpenAI key. $40.00 per 1,000 caption blocks of 30 seconds ($0.08 per minute of video).
Pricing
from $38.50 / 1,000 caption block (30s)s
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Burn word-by-word animated captions into your video: send a direct link to a video you host and get back an MP4 with the captions burned into the picture in one of five styles, plus an SRT file and every word's timing as JSON.
Transcription runs on your own OpenAI key, which you paste into the input. That matters before you start: the captions cost what is listed below, and the transcription is billed to you by OpenAI separately. Leave the key out and the run writes a free sample row instead of doing any work.
| Input | A direct link to a video you host, plus your OpenAI key |
| Output | A captioned MP4 in the key-value store, with an SRT, the word timings and one row describing them |
| Ceiling | One video per run, up to around 13 minutes of audio, where transcription stops accepting the file |
| Account needed | Your own OpenAI key |
| Price | $40.00 per 1,000 caption blocks, a block being 30 seconds of video, so $0.08 a minute on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 125 blocks, roughly an hour of video |
🔍 What Auto Caption Burner does
It downloads your file, pulls the audio out, gets the timing of every spoken word, then builds karaoke-style captions and re-encodes the video with them burned in. Burned in means the words are part of the picture, so they survive every upload and every repost. Nothing is watermarked.
Five presets, and they are real style differences rather than colour swaps: hormozi (white with a yellow pop on the spoken word), beast (white with green), tiktok (Bebas with red), clean (subtle) and karaoke (yellow and cyan). You can override the font size, both colours, the position, how many words sit on screen and how far from the edge they sit, all without leaving the preset.
Captions are built at your source dimensions, so a 1080x1920 vertical comes back 1080x1920. Nothing is cropped, letterboxed or reframed.
The SRT and the word-timing JSON are the part people underestimate. The JSON has every word with its start and end, for recutting later or for feeding into another tool.
📋 What data you get from each captioned video
| What you get | Field |
|---|---|
| The captioned MP4 in the run's key-value store, and a link to it | output.mp4Key, output.mp4Url |
| The subtitle file, five words to a cue, and a link to it | output.srtKey, output.srtUrl |
| Every word with its start and end, as a JSON file in the same store | output.wordsKey |
| The whole spoken text as one string | transcript |
| How many words were heard | wordCount |
| The source length in seconds, which the caption blocks are counted from | durationSeconds |
| The video's own width and height, which the output keeps | sourceDimensions |
| The preset used, and how long the run took | preset, processingSeconds |
▶️ How to burn captions into a video
- Open Auto Caption Burner and click Try for free.
- Paste a direct link to your video into Video URL. It has to be a file link, not a page.
- Paste your key into OpenAI API key (BYO). It is stored as a secret.
- Pick a Caption style preset, and set ALL CAPS or Words per line if you want them.
- Click Start, then open the Storage tab and download the
captioned-*.mp4.
Start it with no key and you get the free sample row instead.
💰 How much does it cost to caption a video?
$0.04 per 30 seconds of video on the Free plan, which is $0.08 a minute, a little less on paid plans. A 45-second short is two blocks and a three-minute video is six. On the free plan, the $5 Apify gives you each month covers about 125 blocks.
The count comes from the source duration, so a video is priced by its length, not by how many words it happens to contain. The free sample row is not charged, and a run that fails before the video is finished produces no caption blocks. If the maximum cost you set on the run cannot cover the whole video, nothing is captioned and nothing is charged for it.
The transcription is billed to you by OpenAI on your own key and does not appear here.
📥 What you give it
{"videoUrl": "https://cdn.example.com/my-short.mp4","openaiApiKey": "sk-...","preset": "hormozi","language": "en","allCaps": true,"wordsPerGroup": 3}
| Field | Default | What it is |
|---|---|---|
videoUrl | none | A public direct link to your own .mp4, .mov or .webm: S3, a CDN or a direct Drive link. Nothing is scraped. The form starts with a placeholder address in it. |
openaiApiKey | none | Your OpenAI key, stored as a secret. Without it the run returns a sample row and stops. |
preset | hormozi | hormozi, beast, tiktok, clean or karaoke. |
language | auto | An ISO-639-1 code like en, es, fr. auto lets the transcription work it out. |
allCaps | the preset's | true forces uppercase, false turns it off. Every preset except clean is uppercase already. |
fontSize | the preset's | 24 to 200 px, measured at 1080 width. |
primaryColor, highlightColor | the preset's | Hex, like #FFFFFF and #FFE000. The highlight is the word being spoken. |
position | the preset's | top, center or bottom. |
wordsPerGroup | the preset's | 1 to 8 words on screen at once. |
marginV | the preset's | Distance from the chosen edge in pixels, measured at 1920 height. |
crf | 18 | Output quality. 18 is visually lossless and large, 23 is smaller. |
transcriptionBaseUrl | none | An OpenAI-compatible endpoint of your own, if you use one. Empty means OpenAI's own. |
transcriptionModel | whisper-1 | The transcription model name. |
📤 What you get back
One dataset row per run, and the files themselves in the run's key-value store.
No run on record has captioned a video with a customer's key, so this is the real row a run with no
key wrote, which is the free sample the actor writes instead of working. On a delivered video there
is no _sample, _notice or reason, the output keys are filled in, and transcript holds your
own text:
{"ok": true,"_sample": true,"_notice": "SAMPLE OUTPUT - provide a public \"videoUrl\" and \"openaiApiKey\" for a real captioned video.","reason": "missing_api_key","videoUrl": "https://example.com/my-short.mp4","preset": "hormozi","sourceDimensions": { "width": 1080, "height": 1920 },"durationSeconds": 12,"wordCount": 18,"transcript": "This sample row shows the output shape for automated checks and preview runs.","output": { "mp4Key": null, "srtKey": null, "wordsKey": null, "mp4Url": null, "srtUrl": null },"processingSeconds": 0}
| Field | How to read it |
|---|---|
output.mp4Key | The captioned video's name in the store, captioned-<timestamp>.mp4. |
output.srtKey | The subtitle file, captions-<timestamp>.srt. |
output.wordsKey | words-<timestamp>.json. There is no link to it on the row, so read it from the key-value store by that key. |
wordCount | Zero words fails the run rather than handing you a silent video. |
durationSeconds | The source duration, rounded. This is what the caption blocks are counted from. |
🧾 Reading the output
Three kinds of row can land in your dataset.
| Row | How to spot it | Charged |
|---|---|---|
| A finished video | no _sample key, and output.mp4Key filled in | yes |
| The sample row | _sample: true and a reason | no |
| A stop at your cost limit | ok: false, _diagnostic: true, errorCode: "MAX_COST_TOO_LOW" | no |
| Value | What it means |
|---|---|
reason: "missing_video_url" | Sample row: no Video URL was given. |
reason: "missing_api_key" | Sample row: no OpenAI key was given. |
errorCode: "MAX_COST_TOO_LOW" | The maximum cost set on the run could not cover the whole video. blocksNeeded and blocksCovered say by how much. Raise it and run again. |
The sample is written before anything is downloaded, so it does no work and costs no blocks. It also
says ok: true, so filter on _sample rather than on ok.
Anything that genuinely breaks fails the run rather than handing you a half-captioned file, and no caption blocks are charged for it. The captioned video is written to the store and the row pushed before billing, so if billing ever has a problem you still keep the video.
💡 What people use it for
- Captioning shorts and reels so they still read with the sound off, which is most of the feed.
- Putting burned captions on ads, where an SRT sidecar file is not an option.
- Turning podcast and interview clips into social cuts, with the word timings kept for recutting.
- Running the same clip through two presets to see which holds attention better.
- Getting an SRT out of a video that never had one, as a side effect of captioning it.
From a script to a captioned slideshow, in three runs:
- Voice your script with AI Text to Speech Voiceover
and copy
audioUrlfrom its row. - Give Storyboard Video Generator your
images and that link as Audio URL, and copy
videoUrlfrom its row. - Paste that
videoUrlinto Video URL here, and the voiceover's words come back burned in.
🚧 What it does not do
- It does not fetch videos from social platforms. You give it a direct link to a file you host.
- Long videos fail. Transcription sends the whole audio track in one request and stops accepting it somewhere around 13 minutes. Cut longer material into pieces first.
- No translation. Captions come out in the language that was spoken. Translate the SRT afterwards if you need another language.
- No speaker labels. It is one stream of words.
- No reframing, no cropping, no resizing. The output keeps your source dimensions.
- No editing of the transcript before burning. What the transcription heard is what gets burned in.
- Re-encoding takes real time on a long video, because the whole file is encoded, not just the part with captions.
- It is not an official tool of any platform or company named on this page. Dami's Studio is independent and is not affiliated with or endorsed by any of them.
🧭 Which video tool do you need?
| If you want | Use |
|---|---|
| Captions burned into the picture | This one |
| Just the transcript and the timings, no video | Video & Audio Transcriber |
| An existing subtitle file translated | Subtitle Translator |
| A long video cut into short clips, captions included | AI Viral Clip Cutter |
| Images and a voiceover turned into a video to caption | Storyboard Video Generator |
| A thumbnail for the finished video | AI Thumbnail Generator |
❓ Questions people ask
Why do I need my own OpenAI key for captions?
Transcription is what makes word-by-word captions possible, and it runs on your key so the usage and the cost stay yours.
Are the captions burned on the video or in a separate file?
Both. Burned into the MP4, and an SRT beside it if you want to edit the wording later.
Can I change the caption font?
You can change size, colours, position, distance from the edge and words per line. The typefaces are the ones each preset ships with.
What happens with a silent video?
The transcription returns no words and the run fails rather than handing you an unchanged file. No caption blocks are charged.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made code
for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/auto-caption-burner. Either way the
run happens on your Apify account at the same price, and OpenAI bills your key as usual.
🆘 If something breaks
Open the Issues tab on the actor page. Send the run ID and the video URL if it is one you can share. The log names the step that failed: download, probe, transcribe or burn.