Add Captions to your Videos - Automate Tiktok Style Subtitles
Pricing
Pay per event
Add Captions to your Videos - Automate Tiktok Style Subtitles
Automatically add captions your videos - give a public video url and get the same video with TikTok-style captions. According to recent studies around 70% of consumers watch videos with the sound off in public places. Make sure your videos have captions with this Actor and engage with more users.
Pricing
Pay per event
Rating
0.0
(0)
Developer

Mark Rieck
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Automatically transcribe and add animated TikTok-style captions. Perfect for creating engaging social media content with professional word-by-word animated captions.
Stop paying $25/mon for services that add AI captions for social media videos. With this Apify actor you can pay less than $0.10 per short.
This actor is designed for adding captions to your own videos. Just provide a publicly accessible video URL (from your own hosting, S3, CDN, etc.).
What types of captions can you add with Caption Maker?
Presets
Bounce Animation - Words bounce as they're spoken (ideal for engaging TikTok-style content)
Highlight Color - Words highlight with a color as they're spoken (perfect for modern social media)
Background Box - Captions appear in a colored background box (great for readability)
How much will it cost to run?
Actor Pricing
Caption Maker has a startup cost and then $0.03 per 10 sec of video.
- $0.07 startup fee (per run)
- $0.03 per 10 seconds of video
How to use Caption Maker?
Step 1: Prepare your video
Provide a publicly accessible video URL (MP4 or MOV). The video must be directly accessible - upload to your own hosting, S3, CDN, or any file hosting service that provides direct links.
Step 2: Configure caption style
Choose from three animation presets:
- Bounce Animation: Energetic style where words bounce on emphasis
- Highlight Color: Modern style where active words change color
- Background Box: Classic style with text in a colored box
Step 3: Customize colors or other settings (optional)
Change the default highlightColor, aspectRatio or fontSize
Step 4: Run the actor
The actor will:
- Download your video
- Extract and transcribe the audio
- Generate word-level timestamps
- Render the video with animated captions
- Save the captioned video, SRT, and JSON files to your Apify storage
Caption Style Presets
Bounce Animation
Words bounce and scale up as they're spoken, creating an energetic, attention-grabbing effect.
- Best for: High-energy content that needs to stand out
- Customization: Uses
highlightColorfor the bounce effect - Use case: TikTok videos, promotional content, entertainment
Highlight Color
Words appear in white and change to your chosen highlight color as they're spoken. This creates a smooth, modern look perfect for social media content.
- Best for: Modern, clean aesthetic
- Customization: Set
highlightColorto any hex color (default:#FFD700gold) - Use case: Professional content, educational videos, brand content
Background Box
All caption words appear inside a colored background box for maximum readability against any video background.
- Best for: Videos with busy backgrounds or varying lighting
- Customization: Set
backgroundColorto any hex color (default:#0a0a0aoff-black) - Use case: Vlogs, outdoor videos, action content
Input Parameters
Required Parameters
videoInput
- Type: String
- Description: Publicly accessible video URL (MP4/MOV)
- Example:
"https://example.com/my-video.mp4"
Optional Parameters
captionPreset
- Type: String
- Default:
"bounce" - Options:
"bounce","highlightColor","backgroundBox" - Description: Choose the animation style for captions
highlightColor
- Type: String (hex color)
- Default:
"#FFD700" - Description: Color for highlighting active words or bounce animation
- Example:
"#00FFFF"(cyan),"#FF1493"(pink)
backgroundColor
- Type: String (hex color)
- Default:
"#0a0a0a" - Description: Background box color (only applies to
backgroundBoxpreset) - Example:
"#000000"(black),"#FFFFFF"(white)
fontSize
- Type: Integer
- Default:
48 - Range: 24-120
- Description: Base font size for captions in pixels
captionPosition
- Type: String
- Default:
"bottom" - Options:
"very-top","top","top-middle","middle","bottom-middle","bottom","very-bottom" - Description: Vertical position for captions on the video
aspectRatio
- Type: String
- Default:
"original" - Options:
"original"- Preserve source dimensions"16:9"- Landscape/YouTube"9:16"- Vertical/TikTok/Reels"1:1"- Square/Instagram"4:5"- Instagram Portrait
- Description: Output video aspect ratio
outputSRT
- Type: Boolean
- Default:
true - Description: Generate SRT subtitle file
outputJSON
- Type: Boolean
- Default:
true - Description: Generate JSON caption data file
outputS3Url
- Type: Boolean
- Default:
true - Description: Include direct S3 URL in output for fast video access. Note: S3 URLs expire after ~7 days.
Input Examples
Bounce Animation (Default)
{"videoInput": "https://example.com/my-video.mp4"}
Highlight Color
{"videoInput": "https://example.com/my-video.mp4","captionPreset": "highlightColor"}
Background Box
{"videoInput": "https://example.com/my-video.mp4","captionPreset": "backgroundBox"}
API Usage Examples
Using cURL
Start an actor run via command line:
$curl -X POST https://api.apify.com/v2/acts/prodmarkllc~caption-maker/runs -H "Content-Type: application/json" -H "Authorization: Bearer YOUR_APIFY_TOKEN" -d '{"videoInput": "https://example.com/my-video.mp4", "captionPreset": "highlightColor", "highlightColor": "#FFD700"}'
Using JavaScript/Node.js (Apify Client)
import { ApifyClient } from 'apify-client';const apifyClient = new ApifyClient({token: 'YOUR_APIFY_TOKEN',});// Start the actorconst run = await apifyClient.actor('prodmarkllc~caption-maker').call({videoInput: 'https://example.com/my-video.mp4',captionPreset: 'highlightColor',highlightColor: '#FFD700'});console.log('Run started:', run);// Wait for resultsconst { items } = await apifyClient.dataset(run.defaultDatasetId).listItems();console.log('Captioned video data:', items);
Using Fetch API (Browser/Node.js)
const myHeaders = new Headers();myHeaders.append("Content-Type", "application/json");myHeaders.append("Authorization", "Bearer YOUR_APIFY_TOKEN");const requestBody = JSON.stringify({videoInput: "https://example.com/my-video.mp4",captionPreset: "highlightColor",highlightColor: "#FFD700"});const requestOptions = {method: "POST",headers: myHeaders,body: requestBody,redirect: "follow"};fetch("https://api.apify.com/v2/acts/prodmarkllc~caption-maker/runs", requestOptions).then((response) => response.json()).then((run) => {console.log("Run started:", run);// Poll for completion or use webhooks}).catch((error) => console.error("Error:", error));
Using Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')# Start the actorrun = client.actor('prodmarkllc~caption-maker').call(run_input={'videoInput': 'https://example.com/my-video.mp4','captionPreset': 'highlightColor','highlightColor': '#FFD700'})# Fetch results from the datasetdataset_items = client.dataset(run['defaultDatasetId']).list_items().itemsprint('Captioned video data:', dataset_items)
Get Actor Run Status
$curl https://api.apify.com/v2/actor-runs/RUN_ID -H "Authorization: Bearer YOUR_APIFY_TOKEN"
Replace RUN_ID with the ID from the start response.
Get Dataset Results
$curl https://api.apify.com/v2/datasets/DATASET_ID/items -H "Authorization: Bearer YOUR_APIFY_TOKEN"
Replace DATASET_ID with defaultDatasetId from the run response.
Results
Caption Maker saves all outputs to your Apify Key-Value Store and Dataset. Here's what you'll receive:
Key-Value Store
output.mp4- Your video with animated captionscaptions.srt- Standard SRT subtitle file (ifoutputSRTis true)captions.json- Detailed caption data with timestamps (ifoutputJSONis true)
Dataset
Each run adds a record with:
{"videoUrl": "https://example.com/my-video.mp4","outputVideo": "output.mp4","captionsSrt": "captions.srt","captionsJson": "captions.json","s3VideoUrl": "https://s3.us-east-1.amazonaws.com/remotionlambda-.../output.mp4","duration": 120.5,"wordCount": 245,"preset": "highlightColor","status": "success"}
Note: The
s3VideoUrlprovides direct S3 access for fast downloads but expires after ~7 days. For permanent storage, use the Apify Key-Value Store URLs.
Caption JSON Format
The JSON file contains detailed word-level timing data:
{"segments": [{"start": 0.5,"end": 2.3,"text": "Hello everyone","words": [{"word": "Hello","start": 0.5,"end": 1.0},{"word": "everyone","start": 1.1,"end": 2.3}]}]}
What are the video size and duration limits?
- Duration: Videos must be under 15 minutes (hard limit)
- Audio extraction: Videos are converted to MP3 audio (~15-20 minutes fits in OpenAI Whisper's 25MB limit)
- Resolution: Works best with standard resolutions (1080p, 720p, 480p)
Support and Issues
Need help or found a bug?
Report issues for runs on Apify
Version: 0.3.0
Made with care for content creators who want to make their videos more accessible and engaging.
(AI wrote this README, that last line was definitely AI)