Cabal Clippers Army

Module D / Reference / 10-20 min

SRT, VTT, ASS, TTML decoded

Choose the right caption format for editing, upload, web playback, and styling.

TL;DR

Use this lesson to choose the right caption format for editing, upload, web playback, and styling. Treat it as practical guidance, not a rigid rulebook.

Why it matters

Captions make clips understandable without sound, searchable after publishing, and reviewable by editors before export. The goal is to help you make a stronger clip without taking away your creative freedom.

What you will learn

Understand the caption or transcript decision behind this workflow.
Produce a usable transcript, caption file, or burned-in caption pass for one clip.
Catch the caption mistakes that most often hurt readability, accuracy, or platform fit.

Prerequisites

  • An audio file, video file, URL, or exported clip
  • A target output format such as SRT, VTT, burned-in MP4, or transcript text

What you need

A clip, audio file, transcript, or source URL.
A caption/transcription tool that can edit text and timing.
The target platform and caption delivery method.
A phone-size preview before export.

Core concept

Caption work is part accuracy and part design. The workflow only works if viewers can read the result quickly on a phone.

Example

Scenario

Auto-captions are mostly correct, but the clip contains names, numbers, jargon, or fast speech.

Move

Apply the workflow to a short section first and proofread the result at phone size.

Result

The caption pass becomes readable and accurate enough that sound-off viewers can follow the clip.

How to do it

  1. 1Use SRT for simple caption exchange and broad platform compatibility.
  2. 2Use VTT for web players or workflows that need web-style cue metadata.
  3. 3Use ASS only when styled captions need to travel as a sidecar file through a compatible workflow.
  4. 4Treat TTML as a more specialized broadcast/platform format rather than a default social choice.
  5. 5Use burned-in captions when the social feed must show captions regardless of platform caption settings.

Expected output

A caption or transcript artifact that is proofread, timed, readable on a phone, and matched to the target platform.

Practice task

Produce a clean caption pass

  1. 1Take a 20-30 second section of a real clip.
  2. 2Apply the caption or transcript workflow from this lesson.
  3. 3Proofread it with sound on, then watch it again with sound off at phone size.

Check your work

Names, numbers, jargon, acronyms, and claims are correct.
Caption lines are short, timed well, and readable on a phone.
The final export uses the caption method the target platform will actually show.

Common mistakes and fixes

Do not finish SRT, VTT, ASS, TTML decoded without checking the exact words against the audio.
Do not let long caption blocks fill the screen on mobile.
Do not ignore names, numbers, acronyms, tickers, and niche terms.
Do not assume every platform will show sidecar caption files.
Do not export before checking caption placement at phone size.

Troubleshooting

If captions are too dense, split or rewrite into shorter one- or two-line blocks.
If caption timing drifts, fix timing after the final edit rather than before.
If platform captions and burned-in captions clash, choose one caption strategy for that upload.

Related resources

Reference snippets

OpenAI speech-to-text request

curl --request POST \
  --url https://api.openai.com/v1/audio/transcriptions \
  --header "Authorization: Bearer $OPENAI_API_KEY" \
  --header "Content-Type: multipart/form-data" \
  --form file=@audio.mp3 \
  --form model=gpt-4o-transcribe

Python speech-to-text request

from openai import OpenAI

client = OpenAI()
with open("audio.mp3", "rb") as audio_file:
    transcript = client.audio.transcriptions.create(
        model="gpt-4o-transcribe",
        file=audio_file,
    )

print(transcript.text)

Whisper word timestamps

curl https://api.openai.com/v1/audio/transcriptions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: multipart/form-data" \
  -F file="@audio.mp3" \
  -F model="whisper-1" \
  -F response_format="verbose_json" \
  -F "timestamp_granularities[]=word"

Extract audio before transcription

ffmpeg -i input.mp4 -vn -ac 1 -ar 16000 audio.wav

Download audio from a URL for local review

yt-dlp -x --audio-format mp3 "https://example.com/video"