import os
import subprocess
import whisper
from youtube_transcript_api import YouTubeTranscriptApi, TranscriptsDisabled, NoTranscriptFound
from yt_dlp import YoutubeDL
Configuration
CHANNEL_URL = "https://www.youtube.com/c/YOUR_CHANNEL_NAME"
OUTPUT_DIR = "transcripts"
USE_WHISPER_IF_NO_CAPTION = True
WHISPER_MODEL = "base" # Options: tiny, base, small, medium, large
Make output directory
os.makedirs(OUTPUT_DIR, exist_ok=True)
Step 1: Get video IDs from channel
print("Fetching video list...")
ydl_opts = {
'quiet': True,
'extract_flat': True,
'dump_single_json': True,
}
with YoutubeDL(ydl_opts) as ydl:
result = ydl.extract_info(CHANNEL_URL, download=False)
video_entries = result.get('entries', [])
video_ids = [entry['id'] for entry in video_entries]
print(f"Found {len(video_ids)} videos.")
Step 2: Load Whisper model
if USE_WHISPER_IF_NO_CAPTION:
model = whisper.load_model(WHISPER_MODEL)
Step 3: Process each video
for idx, video_id in enumerate(video_ids, 1):
video_url = f"https://www.youtube.com/watch?v={video_id}"
transcript_path = os.path.join(OUTPUT_DIR, f"{video_id}.txt")