12 puan yazan GN⁺ 2025-11-13 | 2 yorum | WhatsApp'ta paylaş
  • 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

 
kimjoin2 2025-11-14

Vay canına... Engellemek de etkileyici, onu aşmak da etkileyici gibi görünüyor. Bunu nasıl analiz edip aşıyorlar ki?

 
GN⁺ 2025-11-13
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

    • Hızın artmış olmasına sevindim. Bu aralar YouTube tarayıcıda bile doğru düzgün çalışmıyor; buna rağmen bunu Python betiğiyle erişilebilir tutan ekibin yaptığı iş etkileyici
    • Python'ın çalışıp JS'in çalışmadığı ortamların hangileri olduğunu merak ediyorum
      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
    • solver'ı önceden almak istiyorsanız, herhangi bir videoyu bir kez indirdikten sonra yt-dlp'nin önbellek dizininden (ör. /home/username/.cache) ejs dosyasını kopyalayabilirsiniz
      Ya da make yt-dlp-extra ile paketleme otomasyonu denenebilir
    • AUR'daki yt-dlp-ejs paketi tam da bu amaca uygun görünüyor
    • Ben Deno'yu Chocolately ile elle kurdum, yt-dlp'yi de choco ile kurdum; sürümüm v2025.10.22
  • Son 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ıyor
    Resmî belgede, gömen tarafın HTTP Referer sağlaması gerektiği, aksi halde “error 153” ekranının gösterileceği belirtiliyor

    • Gömme hizmetlerinin çoğu giderek bu yöne gidiyor. Amaç takibi artırmak. Hatta bazı durumlarda giriş yapmanızı bile istiyorlar
    • Aslında tek satırlık basit bir JS yönlendirmesiyle aşılabiliyor. Uygulama maliyeti yüz binlerce dolar, aşma maliyeti ise 0. Sonuçta verdikleri mesaj sanki “istersek sizi istediğimiz kadar engelleyebiliriz” gibi
  • 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 geçmişe göre çok daha iyi. Eskiden RealPlayer, Flash, codec paketleri vs. kurarken sistemi adware ile bozmak çok yaygındı.
      Şimdi çoğu iş OS'in varsayılan oynatıcısı ya da yalnızca VLC ile çözülüyor
    • 90'ların başı PC'lerin en heyecan verici dönemiydi. Şimdi akıllı telefonlar ana akım haline geldiğinden, sıradan kullanıcı için kopyalama/kaydetme kavramı daha çok ekran görüntüsü ya da ekran kaydı olarak kaldı
    • Videolar yüksek veri yoğunluğuna sahip olduğu için barındırma maliyeti yüksek. Bu yüzden YouTube gibi büyük platformlar kaldı; Nebula, PeerTube, Odysee gibi alternatiflerin kalite ya da maliyet tarafında sınırlamaları var
    • Eskiden hedef kullanıcı odaklı optimizasyondu, şimdi ise şirketlerin önce kendi çıkarını düşündüğü bir dönemdeyiz
    • ATSC 3 yayın standardı da DRM'i sonradan eklediği için mevcut alıcılarla uyumsuzluk sorunu yarattı
  • 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

    • Buna dijital bir koleksiyonculuk takıntısı denebilir. Google Memories gibi, eski videoları düzenli aralıklarla yeniden hatırlatan bir özellik eğlenceli olabilir
    • Kanallar videolarını kendileri gizlediği ya da sildiği için, iyi içerikler kaybolmadan önce saklamaya başladım
    • İnternetteki her şey her an kaybolabilir. Önemli olan şeyleri tekrar görebilmek için kendiniz saklamanız gerekir
    • Burada sumo videosu saklayan birini göreceğimi hiç düşünmezdim. Bizim gibilerden epey var
    • İçeriğin taştığı bir çağda gerçekten her şeyi saklamak gerekli mi diye düşünüyorum. Eskiden MP3'leri, filmleri hep toplardım ama artık yalnızca fotoğrafları bulutta saklıyorum
  • 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

    • Gerçek DRM dayatması için özel donanım gerekir. Şifreli akışların yalnızca L2 sertifikalı cihazlarda oynatılmasına ihtiyaç var
    • Mobil web uygulamaları o kadar hatalı ki neredeyse kullanılamıyor. Yorumlar da sık sık kayboluyor
    • Yine de Google her zaman web merkezli stratejisini korudu
    • YouTube'u tarayıcıdan izleyen kuşak hâlâ çok büyük ve Çin'deki bilibili gibi alternatifler de var
    • Ama satın alma gücü olan kuşak tarayıcı kullanıcıları olduğu için, Google'ın bu pazarı tamamen bırakacağını sanmıyorum
  • 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

    • “Hizmet sağlayıcıların bizden hoşlanmaması” aslında bu projenin cazibesinin bir parçası gibi geliyor
    • Ben olsam yt-dlp bakımını asla sürdüremezdim. Fazlasıyla tüketici bir iş
  • 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

    • Aslında Google'ın gerçek müşterisi reklamverenler. Biz sadece onların ürünüyüz
      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
    • Son zamanlarda özellikle çocuk videolarında atlanamayan reklamlar arttı
    • YouTube'un işletme maliyeti çok yüksek olduğu için, reklam engellemenin hizmetin sürdürülebilirliğini etkileyebileceğini düşünüyorum
    • Sonuçta bugünkü berbat UX (enshittification) bizzat iş modelinin bir parçası haline geldi
  • 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

    • Ancak Deno'nun sandbox yapısına güvenlik mekanizması olarak fazla bel bağlamamak gerekir. Çalışma zamanı düzeyindeki izolasyon zayıf olduğundan,
      Firecracker gibi OS/VM düzeyi izolasyon kullanmak daha güvenlidir
    • Eskiden yt-dlp JS'yi yalnızca Python ile yorumluyordu ama çalışma zamanı gereksinimleri giderek karmaşıklaştıkça kendi yorumlayıcısının sınırlarına dayanmış oldu