• 04-04-2025, 16:46:40
    #1
    Owner of Sosyalitya.com ツ
    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.")

  • 06-04-2025, 05:37:26
    #2
    Büyük ihtimal ihtiyacım olmayacak bir program, ama kodları incelediğimde bana py konusunda çok şey kattı teşekkür ederim elinize emeğinize sağlık🙏