- yt-dlp, binlerce siteden ses ve video indirebilen komut satırı tabanlı bir indirme aracı; youtube-dl'nin fork sürümü
- YouTube'un n/sig şifre çözümü için yeni eklenen yt-dlp-ejs modülüyle birlikte harici bir JavaScript çalışma zamanına (ör. Deno, Node.js, Bun, QuickJS) ihtiyaç duyuluyor
- Deno varsayılan çalışma zamanı olarak ayarlanmış durumda; kullanıcılar
--js-runtimes seçeneğiyle başka bir çalışma zamanı belirleyebiliyor
- Bu değişiklikle, YouTube ile ilgili işlevleri tam olarak kullanmak için yt-dlp-ejs ve bir JS çalışma zamanı kurulumu zorunlu hale geliyor
- Harici çalışma zamanı bağımlılığının eklenmesi, YouTube'un şifreleme yapısındaki değişimlere uyum sağlamak için gerekli bir adım ve gelecekte bakımın temel unsurlarından biri olacak
yt-dlp'ye genel bakış
- yt-dlp, youtube-dl'nin bir fork'u; artık bakımı yapılmayan youtube-dlc temel alınarak geliştirilen bir proje
- Binlerce web sitesinden ses ve video indirebilir; çeşitli format seçimi, sonradan işleme, altyazı ve eklenti özelliklerini destekler
YouTube desteğiyle ilgili değişiklikler
- YouTube'un n/sig değerlerinin şifresini çözmek için yt-dlp-ejs paketi gerekiyor
- Bu paket Unlicense altında dağıtılıyor ve MIT ile ISC lisanslı bileşenler içeriyor
- yt-dlp-ejs'i çalıştırmak için bir JavaScript çalışma zamanı zorunlu
- Desteklenen çalışma zamanları: deno (önerilen), node.js, bun, QuickJS
- İlgili ayarlar
--js-runtimes seçeneğiyle belirtilebilir
--no-js-runtimes seçeneği kullanılırsa varsayılan çalışma zamanı ayarı sıfırlanabilir
Kurulum ve bağımlılıklar
- yt-dlp, Python 3.10+ (CPython) ve 3.11+ (PyPy) sürümlerini destekliyor
- Güçlü şekilde önerilen bağımlılıklar:
- ffmpeg / ffprobe: ses-video birleştirme ve sonradan işleme için
- yt-dlp-ejs: YouTube şifre çözümü için
- JavaScript çalışma zamanı: yt-dlp-ejs'i çalıştırmak için
- İsteğe bağlı ağ bağımlılıkları arasında certifi, brotli, requests, curl_cffi bulunuyor
Başlıca komut seçenekleri
--js-runtimes RUNTIME[:PATH]: kullanılacak JS çalışma zamanını belirtir
--no-js-runtimes: tüm JS çalışma zamanlarını devre dışı bırakır
--remote-components COMPONENT: harici JS bileşenlerine izin verebilen seçenek
--no-remote-components: uzaktaki bileşenlerin yüklenmesini engeller
Önemi
- Bu değişiklikle yt-dlp, YouTube'un en güncel şifreleme yapısını tam desteklemek için harici bir JS çalışma zamanını zorunlu kılıyor
- Bu, YouTube'un sürekli güncellenen güvenlik ve şifreleme değişikliklerine yanıt vermek için yapılan yapısal bir dönüşüm ve gelecekteki bakım ile özellik genişletme açısından kritik bir değişiklik
2 yorum
Vay canına... Engellemek de etkileyici, onu aşmak da etkileyici gibi görünüyor. Bunu nasıl analiz edip aşıyorlar ki?
Hacker News yorumu
Arch deposuna zaten dahil edilmiş, bu yüzden doğrudan çalışıyor
yt-dlp --cookies-from-browser firefox --remote-components ejs:github ...komutuna sadece bir bayrak eklemek yeterliÇalıştırıldığında solver'ı çalışma anında indiriyor ve bu yalnızca yaklaşık 0,5 saniye sürüyor. İndirme başlangıç hızının çok daha arttığı hissediliyor
Yine de kısıtlı ortamlarda çalıştırırken solver'ı ayrı bir komutla önceden indirebilmek güzel olurdu. Şimdiki haliyle de tatmin edici ama paketleme otomasyonu olursa daha da kullanışlı olur
Güvenlik kaygısı varsa, Deno kullanıldığı sürece sandbox tarafı oldukça iyi
Eğer Deno ya da Node'un desteklenmediği bir OS ise, C ile yazılmış QuickJS de düşünülebilir. Yavaş ama neredeyse her ortamda çalışır
Tabii bu durumda sandbox ortadan kalkar. Yine de resmî YouTube alan adından gelen koda güvenilebileceğini düşünüyorum
/home/username/.cache) ejs dosyasını kopyalayabilirsinizYa da
make yt-dlp-extraile paketleme otomasyonu denenebilirSon zamanlarda YouTube, gömülü videolar için referrer header zorunluluğu getirmeye başladı
youtube.com/embed/<videoid>adresine doğrudan girerseniz hata çıkıyor ve SSS'de bunun kasıtlı bir politika olduğu da açıkça yazıyorResmî belgede, gömen tarafın HTTP Referer sağlaması gerektiği, aksi halde “error 153” ekranının gösterileceği belirtiliyor
1991'de QuickTime çıktığında videoları kopyalayıp yapıştırmanın ve kaydetmenin zaten doğal olduğunu düşünürdüm
Şimdi DRM bile olmayan videolarda bile kullanıcı deneyiminin bu kadar kötüleşmiş olması inanılmaz geliyor
Şimdi çoğu iş OS'in varsayılan oynatıcısı ya da yalnızca VLC ile çözülüyor
2010'dan beri yt-dlp'yi (youtube-dl döneminden beri) kullanıyor ve beğendiğim tüm videoları arşivliyorum
Şu anda on binlerce video saklıyorum ve bunların önemli bir kısmı siteden çoktan kayboldu
NHK sumo özetleri gibi yalnızca bir ay açık kalan videoları da kaydediyorum
Reklam engelleme ile reklam ekleme arasındaki sonsuz savaşta sonunda AGI/ASI ortaya çıkar mı diye düşünüyorum.
İki taraf da sonunda LLM kullanacak ve insanlar da bu süreçte hem ceplerini hem dikkatlerini kaybeden varlıklara dönüşecek gibi
10 yıl sonra YouTube'a tarayıcıdan tamamen erişilemez hale gelinebilir
Tablet uygulamalarına alışmış nesil baskın hale gelirse, Google web'i bırakacak özgüveni kendinde bulabilir gibi geliyor
yt-dlp issue #14404 içinde Selenium ya da headless tarayıcı kullanma önerisi vardı,
ancak bakım ekibi buna “bu bir yenilgiyi kabul etme olur ve projenin ruhuna aykırıdır” diye yanıt verdi
Scraping gerçekten yıpratıcı bir iş. API'ler sık sık bozuluyor ve hizmet sağlayıcıların sizden hoşlanmadığı bir ortamda bunu sürdürmek gerçekten etkileyici
YouTube'un kullanıcılara karşı giderek daha çatışmacı bir tavır aldığını hissediyorum
Reklam engelleyici engelleme, yapay zeka eğitimi için içerik toplama, API kısıtlamaları... Sanki rekabet olmamasının avantajını kullanıyor
Reklamveren memnuniyeti konusunda çok hassaslar ama kullanıcılar ve içerik üreticiler sarf malzemesi gibi görülüyor
Ücretsiz başlayıp rakipleri saf dışı bıraktıktan sonra tekel benzeri bir yapı kurmak bir tür yem stratejisiydi.
Artık yeni bir alternatife ihtiyaç var. Ücretli olsa bile şeffaf bir hizmet olması iyi olurdu
yt-dlp EJS wiki'ye göre Deno'nun önerilmesinin nedeni,
kodu kısıtlı izinlerle çalıştırabilmesi ve npm üzerinden EJS bağımlılıklarını uzaktan alabilmesi
Firecracker gibi OS/VM düzeyi izolasyon kullanmak daha güvenlidir