2026-10-23 · 5 min read
Captions for Online Courses: Why Burned-In Beats the Player's CC Button
If you sell or publish online courses, captions are not optional. Students watch on mute in shared spaces, non-native speakers follow along by reading, and accessibility requirements keep tightening. Most course platforms offer a CC toggle, but that only works inside their player. The moment a lesson gets downloaded, embedded, clipped for marketing, or reuploaded, the captions stay behind. Burned-in captions travel with the video.
Player captions vs burned-in captions
Player-side captions (the CC button) are a separate text track the platform renders. They work only where the platform controls playback. Burned-in captions are rendered into the pixels of the video itself, so they look identical on your course platform, in a downloaded file, in a Slack preview, and in the 45-second clip you post to YouTube to promote the course.
The catch with burned-in captions has always been effort: transcribing, timing, styling, and rendering each lesson by hand. An API removes all four steps.
Batch-caption a course with one call per lesson
caption.sh transcribes the audio, times every word, and renders the captions into the video. Point it at each lesson's URL and poll for the result:
for url in "${LESSON_URLS[@]}"; do
JOB=$(curl -s -X POST https://api.caption.sh/v1/videos \
-H "Authorization: Bearer $CAPTION_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"source_url\": \"$url\", \"options\": {\"size\": \"small\", \"position\": \"bottom\", \"max_words\": 6}}" \
| jq -r .job_id)
echo "$url -> $JOB"
doneJobs run independently, so a full course processes in parallel. List every job with GET /v1/jobs, and download each finished video from /v1/jobs/{id}/result.
Styling that suits lessons
Course content is slower than social clips, so the styling rules invert. Small text at the bottom with five to eight words per group reads like a subtitle and stays out of the way of slides and screen shares. Save the big centered karaoke style for the promo clips you cut from the same material.
- Lessons and walkthroughs: size small, position bottom, max_words 6, decoration backdrop for readability over screen recordings.
- Promo clips for social: size large, position center, max_words 2 or 3, decoration outline.
- Keep casing natural (the caps option off) for code, formulas, and proper nouns.
What it costs
Pricing is $0.10 per minute of video. A ten-lesson course with 12-minute lessons costs $12 to caption, and the same renders double as your marketing clips. Compared to a captioning service charging per minute of human work, an API pass over the whole catalog is usually cheaper than captioning a single lesson by hand.
Start with one lesson to lock in the style, then batch the rest. The full API surface is at caption.sh/docs, and the caption.sh MCP server exposes the same calls to agents if your course pipeline is agent-driven.