Add Captions to your Videos - Automate Tiktok Style Subtitles avatar
Add Captions to your Videos - Automate Tiktok Style Subtitles

Pricing

Pay per event

Go to Apify Store
Add Captions to your Videos - Automate Tiktok Style Subtitles

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

Mark Rieck

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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:

  1. Download your video
  2. Extract and transcribe the audio
  3. Generate word-level timestamps
  4. Render the video with animated captions
  5. 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 highlightColor for 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 highlightColor to any hex color (default: #FFD700 gold)
  • 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 backgroundColor to any hex color (default: #0a0a0a off-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 backgroundBox preset)
  • 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 actor
const 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 results
const { 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 ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')
# Start the actor
run = client.actor('prodmarkllc~caption-maker').call(
run_input={
'videoInput': 'https://example.com/my-video.mp4',
'captionPreset': 'highlightColor',
'highlightColor': '#FFD700'
}
)
# Fetch results from the dataset
dataset_items = client.dataset(run['defaultDatasetId']).list_items().items
print('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 captions
  • captions.srt - Standard SRT subtitle file (if outputSRT is true)
  • captions.json - Detailed caption data with timestamps (if outputJSON is 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 s3VideoUrl provides 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)