Add Captions to your Videos - Automate Tiktok Style Subtitles
Pricing
from $70.00 / 1,000 video process starts
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
from $70.00 / 1,000 video process starts
Rating
0.0
(0)
Developer
Mark Rieck
Maintained by CommunityActor stats
2
Bookmarked
21
Total users
1
Monthly active users
10 months 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)
