Kendim için geliştirmiş olduğum kodu paylaşmak istedim, ihtiyacı olan varsa kullanabilir. OpenAI Whispe modelini kullanıyor videodaki konuşmaları tanıyarak yazıya çevirir. Birçok dili destekler türkçe dahil. Hem Shorts videoları hem de normal uzun videolarda çalışır.

çok fazla uğraşmadım terminalden çalışıyor. kullanmak için azda olsa teknik bilgi gerekli

örnek :
https://www.youtube.com/shorts/YbFWPPB9NH4 bu videoyu yazıya çevirdim

çıktı
Hedefi koyuyorsun, başarıya gitmek istiyorsun. Süreç başlıyor. Zorluluk başladığında ya da sabredemediğinde ya da sonuç alamadığında bahane üretmeye başlıyorsun ve vazgeçiyorsun. Ve senin o hayalini kurduğun şeyi başka birileri kesinlikle başarır. Kendine başarmak için şans bile alamıyorsun. Başarı nedir biliyor musunuz arkadaşlar? Başarı, zaman ve sabır kavramının birleşimidir.




✅ GEREKENLER

1. Python yüklü olmalı.


2. FFMPEG


3. Gerekli programları kurmak için terminale şu komutları yaz:


Bunları sırasıyla Komut İstemcisi (CMD) veya Terminal penceresine yaz:
pip install git+https://github.com/openai/whisper.git
pip install yt-dlp
pip install torch

🛠️ Programı Nasıl Çalıştıracağım?


  • Aşağıdaki kodu txt dosyasına yazın ve dosya adını uzantısı 1.py olarak kaydedin
  • 1.py dosyasını masaüstüne koy
  • CMD'yi aç ve masaüstüne git: (cd desktop)
  • Kodu çalıştır (python 1.py)

import subprocess
import whisper
import os

# 🎯 Kullanıcıdan veri al
print("🎬 YouTube Video/Shorts Transkriptor'a hoş geldin!")

# 1. Kanal ya da tekil video linki
url = input("🔗 YouTube video veya kanal linki girin: ").strip()

# 2. Tüm videolar mı, sadece Shorts mı?
print("\n📂 Video türünü seç:")
print("1 - Tüm videolar")
print("2 - Sadece Shorts videoları")
choice = input("Seçiminiz (1/2): ").strip()

# Linki dönüştür
if "channel" in url and choice == "2" and "/shorts" not in url:
    url += "/shorts"  # Shorts sekmesini ekle

# 3. Başlık filtresi isteğe bağlı
filter_keyword = input("\n🔍 Belirli bir kelime içeren başlıkları işlemek istiyor musun? (boş bırakabilirsin): ").strip().lower()

# Klasörleri oluştur
output_dir = "shorts_audio"
txt_dir = "shorts_transcripts"
os.makedirs(output_dir, exist_ok=True)
os.makedirs(txt_dir, exist_ok=True)

# Whisper modeli yükle
print("\n🧠 Whisper modeli yükleniyor...")
model = whisper.load_model("medium")

# Tek video mu, çoklu video mu karar ver
if "watch?v=" in url:
    # 🎯 Tek video modu
    print("\n🎧 Tek video işleniyor...")

    # Başlık al
    title_result = subprocess.run([
        "yt-dlp", "--get-title", url
    ], capture_output=True, text=True)
    title = title_result.stdout.strip()
    video_id = url.split("watch?v=")[-1]

    if filter_keyword and filter_keyword not in title.lower():
        print("⚠️ Başlık filtreye uymuyor, işlem yapılmadı.")
    else:
        safe_title = title.replace(":", "-").replace("?", "").replace("/", "-")
        audio_path = os.path.join(output_dir, f"{safe_title}.mp3")
        txt_path = os.path.join(txt_dir, f"{safe_title}.txt")

        if os.path.exists(txt_path):
            print("⏩ Zaten var, atlanıyor.")
        else:
            subprocess.run([
                "yt-dlp",
                "-x", "--audio-format", "mp3",
                "-o", audio_path,
                url
            ])
            result = model.transcribe(audio_path)
            with open(txt_path, "w", encoding="utf-8") as f:
                f.write(result["text"])
            print(f"✅ Kaydedildi: {txt_path}")
else:
    # 🎯 Playlist/Kanal modu
    print("\n📥 Video bağlantıları toplanıyor...")

    result = subprocess.run([
        "yt-dlp",
        "--flat-playlist",
        "--extractor-args", "youtube:player_client=web",
        "-i", "--print", "%(title)s|%(id)s",
        url
    ], capture_output=True, text=True)

    videos = [line.strip().split("|") for line in result.stdout.strip().split("\n") if "|" in line]

    print(f"🔢 Toplam {len(videos)} video bulundu.\n")

    for title, video_id in videos:
        if filter_keyword and filter_keyword not in title.lower():
            continue

        print(f"🎧 İşleniyor: {title}")
        safe_title = title.strip().replace(":", "-").replace("?", "").replace("/", "-")
        audio_path = os.path.join(output_dir, f"{safe_title}.mp3")
        txt_path = os.path.join(txt_dir, f"{safe_title}.txt")

        if os.path.exists(txt_path):
            print("⏩ Zaten var, atlanıyor.")
            continue

        subprocess.run([
            "yt-dlp",
            "-x", "--audio-format", "mp3",
            "-o", audio_path,
            f"https://www.youtube.com/watch?v={video_id}"
        ])

        result = model.transcribe(audio_path)

        with open(txt_path, "w", encoding="utf-8") as f:
            f.write(result["text"])

        print(f"✅ Kaydedildi: {txt_path}")

print("\n🎉 İşlem tamamlandı. Transkriptler klasöre kaydedildi.")