Write me a script where i can feed it a whole bunch of youtube video links,  and it can generate for me one giant text file with all their transcripts ,  in the script below i'm using tdrz but i wanna do it all in one go using whisper.cpp 



import yt_dlp
import subprocess
import os

url = [
        "https://www.youtube.com/watch?v=4YWAZEcYeMQ", # Tilek Mamutov
        "https://www.youtube.com/watch?v=NdgPOXWU864", # Mikael Koivukangas
        "https://www.youtube.com/watch?v=R3_vh00p-x8", # Alexander Campbell
        "https://www.youtube.com/watch?v=lt4vR6XQk-o", # George Hotz Spaces on X
        "https://www.youtube.com/watch?v=dTQb6N3_zu8", # Robin Hanson
        "https://www.youtube.com/watch?v=f71yn1j5Uyc" # Beff Jezos Spaces on X
    ]

def download_and_convert(url):
    try:
        ydl_opts = {
            'format': 'bestaudio/best',
            'postprocessors': [{
                'key': 'FFmpegExtractAudio',
                'preferredcodec': 'wav',
            }],
            'outtmpl': '%(title)s.%(ext)s',
        }

        with yt_dlp.YoutubeDL(ydl_opts) as ydl:
            info = ydl.extract_info(url, download=True)
            filename = ydl.prepare_filename(info).replace('.webm', '.wav')

        # Convert to 16kHz mono
        output_filename = f"{os.path.splitext(filename)[0]}_16khz_mono.wav"
        cmd = [
            "ffmpeg",
            "-i", filename,
            "-ar", "16000",
            "-ac", "1",
            "-c:a", "pcm_s16le",
            output_filename
        ]
        subprocess.run(cmd, check=True)

        # Clean up original WAV file
        os.remove(filename)

        print(f"✅ Processed: {output_filename}")
    except Exception as e:
        print(f"❌ Error processing {url}: {str(e)}")

for url in urls:
    download_and_convert(url)

print("🎉 All videos processed!")




git clone https://github.com/ggerganov/whisper.cpp
: so inside whisper.cpp you gotta first run 
./models/download-ggml-model.sh medium.en


this will download the model        


 ./main -m models/ggml-medium.en.bin -f fileTRANSCIBE.wav -otxt
GGML_CUBLAS=1 make -j 


06:30 whisper.cpp (master) ✗ ./main -m models/ggml-small.en-tdrz.bin -f AI_Doom_Debate_Tilek_Mamutov_vs._Liron_Shapira_16khz_mono.wav -tdrz -otxt -of AI_Doom_Debate_Tilek_Mamutov_vs._Liron_Shapira_16khz_mono.txt -pc -fa -t 48 && ./main -m models/ggml-small.en-tdrz.bin -f AI_Doom_Debate_Liron_Shapira_vs._Alexander_Campbell_16khz_mono.wav -tdrz -otxt -of AI_Doom_Debate_Liron_Shapira_vs._Alexander_Campbell_16khz_mono.txt -pc -fa -t 48 && CUDA_VISIBLE_DEVICES=1 ./main -m models/ggml-small.en-tdrz.bin -f AI_Doom_Debate_-_Liron_Shapira_vs._Mikael_Koivukangas_16khz_mono.wav -tdrz -otxt -of AI_Doom_Debate_-_Liron_Shapira_vs._Mikael_Koivukangas_16khz_mono.txt -pc -fa -t 48 && CUDA_VISIBLE_DEVICES=1 ./main -m models/ggml-small.en-tdrz.bin -f George_Hotz_and_Liron_Shapira_debate_AI_doom_16khz_mono.wav -tdrz -otxt -of George_Hotz_and_Liron_Shapira_debate_AI_doom_16khz_mono.txt -pc -fa -t 48 && CUDA_VISIBLE_DEVICES=1 ./main -m models/ggml-small.en-tdrz.bin -f Robin_Hanson_vs._Liron_Shapira_Is_Near-Term_Extinction_From_AGI_Plausible_16khz_mono.wav -tdrz -otxt -of Robin_Hanson_vs._Liron_Shapira_Is_Near-Term_Extinction_From_AGI_Plausible_16khz_mono.txt -pc -fa -t 48 && CUDA_VISIBLE_DEVICES=1 ./main -m models/ggml-small.en-tdrz.bin -f AI_Foom_Debate_Liron_Shapira_vs._Beff_Jezos_eacc_on_Sep_1_2023_16khz_mono.wav -tdrz -otxt -of AI_Foom_Debate_Liron_Shapira_vs._Beff_Jezos_eacc_on_Sep_1_2023_16khz_mono.txt -pc -fa -t 48



sooo yeah last one looked like that , but i wanna incorporate it all in one script that i put INSIDE the git clone https://github.com/ggerganov/whisper.cpp     cd whisper.cpp folder i'm in