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.")