Cabal Clippers Army

Module C / Code recipe / 10-20 min

yt-dlp + Whisper for YouTube

Download permissible YouTube audio or captions and produce a transcript.

TL;DR

Use this lesson to download permissible YouTube audio or captions and produce a transcript. 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

FFmpeg installed locally.
yt-dlp installed locally.
A small test input before processing a full source.
Permission to use the source media.

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. 1Confirm you have permission to use the source and that the URL is accessible.
  2. 2Use yt-dlp to download audio or available captions for local review.
  3. 3Transcribe or clean the downloaded audio, then verify timing against the source video.
  4. 4Respect platform terms, privacy, and rights before turning a downloaded source into a submission.
  5. 5Keep URL, source title, and transcript together so the origin is traceable.

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 yt-dlp + Whisper for YouTube 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 a URL fails, confirm the video is public and that you are allowed to download or review it locally.
If the platform requires login, stop and use an approved source workflow instead of bypassing access controls.
If captions are missing, extract audio and transcribe locally.

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"