Ana içeriğe geç
Ahmet Faruk UzunkayaYaratıcı geliştirici
← Projelere dön
MasaüstüTamamlandıGüncellendi · 1 Ekim 2026

YouTube Downloader

yt-dlp üzerine kurulu, kalite seçimi, indirme kuyruğu ve geçmişi olan bir masaüstü uygulaması.

Video, Shorts, oynatma listesi, kanal ve YouTube Music bağlantılarını indiren bir masaüstü uygulaması. 8K'ya kadar her çözünürlüğün tahmini dosya boyutunu önceden görüyorsun. Yalnızca ses indirme seçenekleri, duraklatabildiğin paralel bir kuyruk ve içinde arama yapabildiğin bir geçmiş de var.

Pythonyt-dlpFFmpeg
YouTube Downloader ekran görüntüsü
Durum
Tamamlandı
Kategori
Masaüstü
Güncelleme
1 Ekim 2026
Yığın
Pythonyt-dlpFFmpeg
YouTube Downloader

YouTube Downloader, yt-dlp'nin Python API'si üzerine Flet ile yazdığım bir masaüstü uygulaması. Video, Shorts, oynatma listesi, kanal ve YouTube Music bağlantılarını indirebiliyor; kutuya bağlantı yerine düz bir metin yazarsan YouTube'da arama yapıyor. Windows, macOS ve Linux'ta çalışıyor, arayüzü Türkçe ve İngilizce.

Bir bağlantı yapıştırdığında, 8K'ya kadar videoda bulunan her çözünürlük HDR ve 60 fps rozetleriyle listeleniyor; tahmini dosya boyutunu da indirmeden önce görüyorsun. Yalnızca ses istiyorsan MP3, M4A, Opus, FLAC ya da WAV seçip bit hızını belirleyebilirsin; kapak resmi ve etiketler dosyanın içine gömülüyor. Oynatma listeleri ve kanallar küçük resimli bir listede açılıyor. Seçtiğin videolar kendi klasörüne, istersen numaralanarak iniyor.

İsteğe bağlı seçenekler de var: gömülü bölümler ve altyazılar, sponsor bölümlerini işaretleyen ya da kesen SponsorBlock, hız sınırı, proxy ve daha önce indirdiklerini atlayan bir arşiv. Yaş kısıtlı ya da üyelere özel videolar için tarayıcı çerezlerini veya bir cookies.txt dosyasını kullanabilirsin. Sistem sayfası da yt-dlp'yi, FFmpeg'i, JavaScript çalışma zamanını, bağlantıyı ve disk alanını kontrol ediyor; Windows'ta FFmpeg'i kendisi kuruyor.

Kuyruk arayüze dokunmuyor

engine.py her indirmeyi kendi iş parçacığında, kendi YoutubeDL örneğiyle çalıştırıyor. Bu iş parçacıkları arayüze hiç dokunmuyor; yalnızca görevin alanlarını güncelleyip onu "kirli" olarak işaretliyorlar. Arayüz de kendi olay döngüsünde, sabit bir kare hızıyla kirli görevleri toplayıp ekranı güncelliyor.

Her görev şu durumlardan geçiyor:

queued ─► starting ─► downloading ─► processing ─┬─► completed
 ▲  │                                            ├─► skipped     (arşivde zaten var)
 │  │                                            ├─► failed      (anlaşılır hata mesajıyla)
 │  │                                            └─► cancelled   (geçici dosyalar silinir)
 │  └─► paused ◄─ çalışan görev: durdurma bayrağı
 └─ devam ─┘

Kuyrukta bekleyen bir görevi doğrudan duraklatabiliyorsun, çalışan bir görev ise bir durdurma bayrağıyla duruyor. Yeniden denenen görev kuyruğun sonuna taşınıyor ki bekleyenlerin önüne geçmesin. Aynı anda kaç görevin çalışacağını sen ayarlıyorsun; hepsini duraklatma, sürdürme ve başarısız olanları yeniden deneme seçenekleri de var. yt-dlp'nin birleştirme, ses çıkarma, kapak gömme, altyazı, SponsorBlock ve metadata adımları arayüzde ayrı aşama etiketleriyle görünüyor; ilerlemeyi görev çubuğundan da takip edebiliyorsun.

Ayarları yt-dlp'nin kendisine çevirtmek

options.py kullanıcının ayarlarını YoutubeDL parametrelerine doğrudan çevirmek yerine önce yt-dlp komut satırı argümanları üretiyor, sonra bunları yt-dlp'nin kendi ayrıştırıcısından (yt_dlp.parse_options) geçiriyor. Bunu yapmamın sebebi şu: post-processor sıralaması, SponsorBlock ve küçük resim davranışı, komut satırındaki yt-dlp ile birebir aynı kalsın.

media.py her format için dosya boyutunu filesize ya da filesize_approx alanından alıyor; ikisi de yoksa ortalama bit hızı ve süreden hesaplıyor. Gerçek çözünürlükler küçük bir toleransla 4320, 2160, 1440, 1080, 720 gibi standart basamaklara eşleniyor; yani 1076 piksellik bir video listede 1080 olarak görünüyor. errors.py ise ham hata metnini kısa ve çevrilebilir bir mesaja dönüştürüyor. Böylece karşına ham bir log yerine "YouTube doğrulama istiyor, tarayıcı çerezlerini aç" gibi bir cümle çıkıyor.

yt-dlp bütün formatları açabilmek için bir JavaScript çalışma zamanına ihtiyaç duyuyor. Bu yüzden en iyi sonuç için bilgisayarında Deno ya da Node.js kurulu olmalı; eksikse sistem sayfası bunu sana söylüyor. Hazır derlemeleri GitHub Actions üretiyor, onları Releases sayfasında bulabilirsin.