Video to Shorts Captions
Renders long-form video into vertical 9:16 clips with burned-in animated captions ready for Instagram Reels.
Provides an Apify app integration for Make, using 'Run an Actor' plus the 'Watch Actor Runs' trigger and 'Get Dataset Items' to render shorts asynchronously.
Works with the @apify/n8n-nodes-apify node so workflows can run the Actor, fetch dataset items and push the resulting videoUrl to schedulers or storage.
Produces ready-to-post vertical 9:16 MP4 shorts with captions for TikTok (note: TikTok page URLs are not accepted as input, only direct video file links).
Creates shorts intended for YouTube's Shorts feed; YouTube watch-page links are not accepted as input, only direct video file URLs.
Generates vertical 9:16 shorts with word-by-word captions, thumbnails and SRT files suited for publishing to YouTube Shorts.
Supports Zapier via the Apify app, with 'Run Actor and Fetch Results' for single shorts and 'Run Actor' + 'Finished Actor Run' + 'Fetch Dataset Items' for batches.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Video to Shorts CaptionsTurn https://example.com/podcast.mp4 from 2:15 to 2:45 into a captioned vertical short."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Video to Shorts - Vertical 9:16 Clips with AI Captions
The Video to Shorts API from ENT-E turns a long video URL into vertical 9:16 clips for TikTok, Instagram Reels and YouTube Shorts, with burned-in animated captions. One call per short, with no editor, no timeline and no manual subtitles.
Video to shorts API: long video in, vertical 9:16 short with captions out
Tell it where the highlight starts and ends. The Actor then:
reframes the clip to 9:16 (
blur,croporpad),transcribes the speech with Whisper,
burns in word-by-word captions with the current word highlighted,
returns a ready-to-post 30 fps H.264/AAC MP4, plus a JPEG thumbnail and an
.srtof the captions.
The Actor doesn't pick highlights for you. You (or your agent, from a transcript) choose startSeconds and endSeconds; it does the editing work.
Related MCP server: clipspeed-mcp
What you get
Vertical video 9:16 at 1080×1920 (default) or 720×1280.
Three reframe modes:
blur(default): the full frame sits over a blurred copy of itself, so nothing is cut off. Good for slides, gameplay and two-person shots.crop: fills the screen. Aim it withcropPositionfrom 0 (left) to 1 (right).pad: the full frame with solid bars inpadColor.
Burned-in captions included in the price. Pick a preset
captionStyle(bold,pop,boxedorminimal), then fine-tunefont,fontSize, colors, outline, box, uppercase, words per caption, karaoke highlighting and position. WithcaptionPosition: "auto", captions sit in the free area under the video in blur/pad mode, so they don't cover faces.Six bundled fonts:
poppins,anton,bebas,luckiest,archivoanddejavu.Up to 180 s per short (
maxClipSeconds, default 60).Batch with
clips: many highlights from one long video in one run, each with its own settings.Failed clips are free.
Use cases
Long video to TikTok, Reels and YouTube Shorts
{
"url": "https://example.com/webinars/q3-product-update.mp4",
"startSeconds": 754,
"endSeconds": 812
}Defaults: blur reframe, 1080×1920, bold captions, auto language.
Repurpose podcast clips into shorts (batch)
Cut several highlights from one episode in one run. Top-level settings apply to every clip, and each clip can override them.
{
"mode": "crop",
"captionStyle": "pop",
"language": "en",
"clips": [
{ "url": "https://example.com/podcast/ep-88.mp4", "startSeconds": 312, "endSeconds": 355 },
{ "url": "https://example.com/podcast/ep-88.mp4", "startSeconds": 1490, "endSeconds": 1548, "cropPosition": 0.7 },
{ "url": "https://example.com/podcast/ep-88.mp4", "startSeconds": 2710, "endSeconds": 2766, "cropPosition": 0.3 }
]
}Use cropPosition to keep each speaker in frame when they sit left or right of center.
Burned-in captions with your brand style
{
"url": "https://example.com/videos/tutorial-12.mp4",
"startSeconds": 60,
"endSeconds": 105,
"captionStyle": "bold",
"font": "anton",
"textColor": "#FFFFFF",
"highlightColor": "#3DFF5A",
"wordsPerCaption": 2,
"captionPosition": "center"
}Vertical video 9:16 without captions (reframe and trim only)
{
"url": "https://example.com/footage/b-roll-wide.mov",
"startSeconds": 10,
"endSeconds": 25,
"mode": "pad",
"padColor": "#FFFFFF",
"captions": false
}Agent workflow: transcript, then pick moments, then render shorts
Get a timed transcript of the long video with Video to Captions (or any Whisper-based transcription tool).
Let your LLM choose 3–5 moments with start and end times.
Send them here as
clips.
Pricing (pay per event)
Event | Price |
Short created (per successful short; includes captions, thumbnail and SRT) | $0.08 |
Clip minute (per started minute of output video) | $0.12 |
Actor start (per run, one event per GB of memory, minimum one; default 4 GB = 4 events) | $0.00005 per event |
There are no platform usage fees on top. Captions cost the same with every model. Failed clips are free. You pay for the short you get, not for the length of the source video.
Worked example: one podcast episode, five shorts
Each short is 30–60 s, which is 1 started minute: $0.08 + $0.12 = $0.20 per short.
Five shorts: $1.00, plus $0.0002 actor start for the batch run.
Ten 60-second shorts: $2.00.
Longer shorts:
A 61–120 s short: $0.08 + 2 × $0.12 = $0.32.
A full 180 s short: $0.08 + 3 × $0.12 = $0.44.
Billing rounds up to the next started minute of output, ignoring up to 0.5 s of encoder padding, so a 60 s short (even if it renders at 60.03 s) is 1 minute and a 61 s short is 2.
Input reference
Field | Type | Default | Notes |
| string | (none) | Direct link to one video file, up to 4 GB (not a YouTube/TikTok page) |
| array | (none) | Batch. Items are |
| number |
| Start of the short in the source (decimals allowed) |
| number | (none) | End of the short. If empty, the clip runs to the end of the source or to |
| integer |
| Hard cap on output length, 5–180 |
| string |
|
|
| number |
|
|
| integer |
|
|
| string |
|
|
| string |
|
|
| string |
|
|
| boolean |
| Burn in captions and return an SRT |
| string |
|
|
| string |
| ISO 639-1 code or |
| string |
|
|
| string | from style |
|
| integer | from style | 20–200 px at 1080 width |
| string | from style | Hex colors |
| number | from style | 0–20 |
| boolean | from style | Semi-transparent box behind the text |
| boolean | from style | |
| integer | from style | 1–12 words on screen |
| boolean | from style | Karaoke-style current-word highlight |
| string | from style |
|
You must provide either url or clips.
Output reference
Each short produces one dataset row. Here is a real 60 s test render (URLs and transcript shortened):
{
"sourceUrl": "https://example.com/webinars/q3-product-update.mp4",
"startSeconds": 60,
"mode": "blur",
"resolution": "1080x1920",
"videoUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/4e353b7c87de.mp4?signature=<sig>",
"thumbnailUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/4e353b7c87de.jpg?signature=<sig>",
"captionsSrtUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/4e353b7c87de.srt?signature=<sig>",
"status": "ok",
"durationSeconds": 60.03,
"endSeconds": 120,
"width": 1080,
"height": 1920,
"sizeBytes": 37856647,
"captioned": true,
"captionStyle": "bold",
"language": "en",
"captionCount": 47,
"transcript": "…",
"sourceDurationSeconds": 580.174,
"billedMinutes": 1
}If the clip has no speech, or no audio stream, the short still renders without captions, and the row says so in warning. A failed clip returns sourceUrl, startSeconds, mode, resolution, status: "error" and error.
Use it from AI agents and automations
MCP (Claude, Cursor, other MCP clients). Add https://mcp.apify.com?tools=ent-e/video-to-shorts-captions as a remote MCP server and sign in with OAuth. Your agent passes a URL and timestamps and gets back videoUrl. A 60 s short at 1080×1920 takes about 2–4 minutes to render, and 720×1280 is roughly twice as fast, so the agent should wait for the run to finish before reading the dataset.
n8n. Use the Apify node (@apify/n8n-nodes-apify). Use Run an Actor, then Get Dataset Items, and post videoUrl to your scheduler or storage. Run an Actor and get dataset also works for a single short.
Make. Use the Apify app. Renders usually take longer than the 120 s sync wait, so:
Run Run an Actor asynchronously.
Add the Watch Actor Runs trigger.
Then Get Dataset Items.
Zapier. Use the Apify app:
Run Actor and Fetch Results for a single short (under 5 minutes).
For batches, use Run Actor, then the Finished Actor Run trigger and Fetch Dataset Items.
API.
curl -X POST "https://api.apify.com/v2/acts/ent-e~video-to-shorts-captions/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/webinars/q3-product-update.mp4","startSeconds":754,"endSeconds":812}'
# then: GET https://api.apify.com/v2/datasets/<defaultDatasetId>/items?token=$APIFY_TOKENFAQ
Does it find the best moments automatically?
No. You choose startSeconds and endSeconds. That keeps the output predictable and the cost fixed. To automate it, get a transcript first, let an LLM pick the moments, then send them as clips.
Does it track faces?
No. There's no automatic face tracking. Use crop with cropPosition to frame a speaker, or blur to keep the whole frame visible.
Can I paste a YouTube or TikTok link? No. The Actor needs a direct link to the video file (cloud storage, CDN or file host), up to 4 GB.
Which languages do the captions support?
Speech is transcribed by Whisper in the spoken language (auto-detected or set with language). The bundled fonts cover Latin scripts. Use dejavu for Cyrillic and Greek. CJK, Arabic and Indic scripts aren't supported yet. For those, set "captions": false and add subtitles in your own editor or player.
How long can a short be?
5 to 180 seconds (maxClipSeconds). The default of 60 s fits the common TikTok, Reels and Shorts length. You pay per started minute of output (up to 0.5 s of padding is ignored), so 60 s costs less than 61 s.
Am I charged if a clip fails? No. A bad URL, an input without video, or an invalid setting returns a free error row. A short that renders without captions (because the clip has no speech) is still a delivered short and is billed normally.
ENT-E media toolkit
Every tool takes a public file URL, needs nothing installed, charges per file, doesn't charge for failures, and works from MCP, n8n, Make, Zapier and the API.
Media Converter for AI Agents (FFmpeg): audio/video to MP3, Whisper-ready 16 kHz WAV, MP4, WebM, GIF or thumbnails, with trim and batch.
Image Converter & Compressor: convert to WebP or AVIF, compress to a target file size, resize, strip EXIF/GPS.
Podcast Loudness Normalizer: normalize to -16, -14, -23 or -24 LUFS with a true-peak ceiling, plus a before/after report.
Video to Captions: SRT, VTT, TXT and word-level JSON from any video or audio URL, with Whisper.
Video to Shorts: vertical 9:16 clips with burned-in animated captions for TikTok, Reels and Shorts.
This server cannot be deployed
Maintenance
Related MCP Connectors
AI video clipping MCP: long videos and podcasts into scored, captioned 9:16 shorts.
Turns long videos into captioned vertical clips, cut at the moments that stand on their own.
Turn long videos into captioned vertical clips for TikTok, Reels and Shorts.
- ScribixOAuthio.scribix
Turn long videos into captioned vertical clips, then render and schedule social posts.
Related MCP Servers
- AlicenseAqualityFmaintenanceTurn YouTube videos into short clips — from Claude, Cursor, or any AI assistant that supports MCP. You give it a YouTube link. It finds the best moments, reframes them for vertical video, adds subtitles, and gives you download links. All from a chat.632 npm2MIT
- AlicenseNot gradedqualityBmaintenanceEnables turning any video into scored, captioned, ready-to-post vertical clips directly from your MCP client, with capabilities to download finished MP4s, schedule posts, and discover trending content.19 npmMIT
- AlicenseAqualityAmaintenanceEnables creating and managing Katto video clipping jobs from any MCP client, turning long videos into scored, captioned 9:16 clips.29101 npm3MIT
- FlicenseNot gradedqualityBmaintenanceEnables autonomous shortform video editing by converting 16:9 footage to 9:16 with dynamic speaker tracking, smart reframing bounding boxes, audio silence pacing, and precise cut-list generation through MCP-compatible clients.8-