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