6 puan yazan GN⁺ 2024-10-28 | 1 yorum | WhatsApp'ta paylaş
  • You-Get, web'den video, ses ve görsel gibi medya içeriklerini indiren küçük bir komut satırı aracıdır; başka kolay bir yöntem olmadığında kullanılan bir araçtır
  • YouTube, Youku, niconico, Tumblr, SoundCloud, Instagram, bilibili, TikTok gibi birçok siteden video·görsel·ses indirilebilir veya medya oynatıcıyla çevrimiçi video akışı yapılabilir
  • --info ile kullanılabilir kalite ve formatlar görülebilir, --itag ile seçim yapılabilir; ancak format seçimi desteklenen sitelerin çoğunda genel olarak uygulanmış değildir ve varsayılan en yüksek kalitedir
  • Kurulum pip, GitHub indirme·klonlama, Homebrew, FreeBSD pkg, Flox vb. ile yapılabilir; önerilen bağımlılıklar Python 3.7.4 ve üzeri, FFmpeg 1.0 ve üzeri, isteğe bağlı olarak RTMPDump'tır
  • Doğrudan URL indirme, web sayfası scraping'i, Google Videos arama tabanlı indirme, duraklatma·sürdürme, proxy, çerez yükleme, çıkarılan URL·JSON çıktısı gibi özellikler sunar; ancak bazı işlevler deneyseldir veya henüz kararlı değildir

You-Get ne yapar

  • You-Get, web'den medya içeriği indiren küçük bir komut satırı aracıdır
    • Hedef içerikler video, ses ve görseldir
    • Web'de başka kolay bir indirme yöntemi olmadığında kullanılır
  • Kullanım nedenleri olarak kişisel izleme için indirme, kaydetmesi engellenmiş çevrimiçi videolar üzerinde kontrol, kapalı teknolojiler veya tescilli JavaScript·Flash'tan kaçınma, hacker kültürü ve özgür yazılım yaklaşımı sunulur
  • Başlıca özellikleri şunlardır
    • YouTube, Youku, Niconico gibi popüler sitelerden video·ses indirme
    • Web tarayıcısı olmadan medya oynatıcıda çevrimiçi video akışı
    • İlgilenilen görselleri indirmek için web sayfalarını kazıma
    • Binary dosyalar gibi rastgele HTML dışı içerikleri indirme

Kurulum ve çalışma ortamı

  • Önerilen bağımlılıklar Python 3.7.4 ve üzeri, FFmpeg 1.0 ve üzeri, isteğe bağlı RTMPDump'tır
  • 30 Mayıs 2022 duyurusuna göre Python 3.5, 3.6 ve 3.7 desteği sonunda sonlandırılacaktır
  • Kurulum yolları çeşitlidir
    • PyPI üzerinden pip install you-get
    • Zsh kullanıcıları için Antigen ile antigen bundle soimort/you-get
    • GitHub'daki kararlı master branch'i veya develop branch'ini indirme
    • Geliştiriciler için önerilen git clone git://github.com/soimort/you-get.git
    • macOS için brew install you-get
    • FreeBSD için pkg install you-get
    • Mac, Linux, Windows WSL için flox install you-get
  • Bash, Fish ve Zsh için shell otomatik tamamlama tanımları contrib/completion altında bulunur
  • Güncelleme, kurulum yöntemine göre pip install --upgrade you-get, en güncel sürümü indirme veya develop branch'ini zorla yeniden kurma ile yapılabilir

Temel indirme akışı

  • Video indirirken önce you-get -i URL veya --info ile kullanılabilir kalite ve formatlar görülebilir
    • Çıktıda site, başlık, stream, container, kalite, boyut ve indirme için kullanılacak --itag örneği yer alır
    • Varsayılan indirme listedeki en üstteki öğeyi kullanır
  • Farklı bir format istenirse çıktıda gösterilen --itag değeri kullanılabilir
    • Örneğin YouTube'daki Me at the zoo videosunda --itag=18 ile mp4 seçilebilir
  • YouTube videosunda altyazı varsa video dosyasıyla birlikte SubRip altyazı formatında indirilir
  • Format seçimi hâlâ desteklenen sitelerin çoğunda genel bir özellik olarak uygulanmış değildir
    • Bu durumda varsayılan indirme formatı en yüksek kalitedir
  • FFmpeg, birden fazla parçaya bölünmüş olarak stream edilen videoların indirilip birleştirilmesi ve YouTube'daki 1080p üzeri yüksek çözünürlüklü videolar için gereklidir
    • İndirme sonrası parçaları birleştirmek istenmiyorsa --no-merge veya -n kullanılabilir

URL, web sayfası ve arama tabanlı indirme

  • Tam kaynak URL'si biliniyorsa you-get URL ile doğrudan indirilebilir
    • Örneğin bir JPEG görsel URL'si girildiğinde site, başlık, tür ve boyut gösterilir ve dosya kaydedilir
  • Tam kaynak URL'si yerine bir web sayfası URL'si verilirse sayfa kazınarak ilgilenilen öğe bulunmaya çalışılır
    • Bu özellik deneyseldir ve kusursuz değildir
    • Tumblr, Blogger gibi popüler sitelerde büyük görselleri kazımada en iyi şekilde çalışır
    • İnternetteki tüm siteler için geçerli evrensel bir kalıp yoktur
  • URL yerine bir metin dizesi verilirse Google Videos üzerinde arama yapar ve en ilgili videoyu indirir
    • Bunun tam olarak istenen sonuç olmama ihtimali vardır, ancak oldukça makul bir sonuç olma olasılığının yüksek olduğu belirtilir

İndirme kontrolü ve çalıştırma seçenekleri

  • İndirme sırasında Ctrl+C ile durdurulabilir ve çıktı dizininde geçici bir .download dosyası kalır
    • Aynı argümanlarla yeniden çalıştırılırsa son oturumdan devam eder
    • Geçici uzantısı kaldırılmış tam dosya varsa indirme atlanır
    • --force veya -f, zorla yeniden indirme yapar ve aynı adlı mevcut dosya ya da geçici dosyanın üzerine yazar
  • --output-dir veya -o ile kayıt yolu, --output-filename veya -O ile dosya adı belirtilebilir
    • Varsayılan video başlığında mevcut shell, işletim sistemi veya dosya sistemiyle uyumsuz özel karakterler olduğunda kullanışlıdır
    • Toplu indirme script'lerinde belirli klasör ve belirli adla kaydetmek için de yararlıdır
  • --http-proxy veya -x ile HTTP proxy belirtilebilir
    • Varsayılan olarak sistem proxy ayarı olan http_proxy ortam değişkeni uygulanır
    • Proxy'yi kapatmak için --no-proxy kullanılır
    • Youku gibi bazı sitelerde yalnızca Çin anakarasından erişilebilen video bilgilerini çıkarmak için --extractor-proxy veya -y kullanılabilir
  • --player veya -p, indirme yerine videoyu mpv, vlc gibi bir medya oynatıcıya aktarır
    • Tarayıcı oynatıcı olarak belirtilirse reklamlar veya yorum bölümü olmadan tarayıcıda izlenebilir
    • Başka indirme yöneticilerini başlatmak için de kullanılabilir, ancak her zaman iyi uyum sağlamayabilir

Kimlik doğrulama, çıkarma verileri, desteklenen siteler

  • Herkese açık olmayan videolar gibi hesap girişi gerektiren içerikler için --cookies veya -c ile tarayıcı çerezleri verilmelidir
    • Şu anda desteklenen çerez formatları Mozilla cookies.sqlite ve Netscape cookies.txt'dir
  • --url veya -u, sayfadan çıkarılan indirilebilir kaynak URL'lerinin listesini yazdırır
  • --json, çıkarma verilerinin özetini JSON formatında yazdırır
    • Bu özellik henüz kararlı değildir ve JSON şeması gelecekte geriye dönük uyumsuz değişiklikler içerebilir
  • Desteklenen siteler listesinde YouTube, X(Twitter), VK, Vimeo, Tumblr, SoundCloud, Pinterest, Internet Archive, Instagram, Facebook, Dailymotion, Bandcamp, niconico, bilibili, Youku, Naver, TikTok, Zhihu ve diğerleri bulunur
    • Video, görsel ve ses desteği siteye göre değişir
  • Listede olmayan sitelerde genel çıkarıcı, sayfada ilgilenilen kaynakları bulup indirir

Hata bildirimi ve lisans

  • İstenen içerik indirilemiyorsa önce Known Bugs kontrol edilmelidir
  • Yeni hata bildirimi veya katkı öncesinde katkı kılavuzu okunmalıdır
  • Hızlı sorular için Gitter kanalı #soimort/you-get kullanılabilir
  • Yazılım MIT license ile dağıtılır
    • Yazılım hiçbir garanti olmadan “olduğu gibi” sunulur
    • Telif hakkı ihlali veya diğer yasa dışı kullanım amaçlarından yazar sorumlu değildir
    • Depo yalnızca kodu sağlar; kullanım şekli kullanıcının takdirine bırakılmıştır

1 yorum

 
GN⁺ 2024-10-28
Hacker News yorumları
  • Bir dönem internet pahalı, bant genişliği düşüktü; yine de YouTube'da müzik ve ders dinlemeyi seviyordum. Bir noktada yalnızca ses akışını alırsam bant genişliği maliyetini %90 azaltabileceğimi fark ettim.
    youtube-dl ve yt-dlp'de, istenen biçim/kalitedeki URL'yi yazdıran -G bayrağı vardı; bilgisayarda komut satırından URL'yi alıp VLC'ye koyarak kullanıyordum.
    Telefonda başta SSH ile dosyayı önce VPS'ye indirip sonra tekrar telefona çektiğim karmaşık bir dolambaçlı yol kullanıyordum; daha sonra telefon tarayıcısının URL'yi doğrudan oynatabildiğini öğrenince youtube-dl -G -f bestaudio {url} için bir PHP ön yüzü yaptım.
    Artık çevrimiçi değil ve kodu da kaybettim ama aslında tek satırlık bir şeydi. you-get de --url / -u ile aynı amacı destekliyor gibi görünüyor; bu özelliğin ne kadar faydalı olduğunu belirtmek istedim.
    Ekranı kapatıp oynatınca pilden de %80 tasarruf ediliyor. YouTube da bunu biliyor olmalı; bu yüzden yalnızca ses akışını alan arka planda oynatmayı ücretli bir özellik haline getirmiş gibi görünüyor.

    • Brave Mobile tarayıcısında arka planda video sesini oynatmayı açabiliyorsunuz; böylece YouTube Premium gibi bir aboneliğe gerek kalmıyor.
    • youtube-dl artık pek iyi çalışmıyor gibi; ben fork'u olan yt-dlp'yi kullanmak zorunda kaldım. Böyle projeler arasında geçiş yapmak her zaman tedirgin edici ama en azından yaygın kullanılıyor gibi görünüyor.
    • Annem sesli kitapları gerçekten çok sevdiği için, YouTube bağlantısı paylaşıldığında işleyen bir Telegram botunu node-red ile onun için yaptım.
      Bağlantılar FIFO'ya gönderiliyor; küçük bir daemon bunları sırayla indirip özel bir incoming klasörüne kaydediyor. Bot yalnızca ses de alabiliyor, videonun tamamını da alabiliyor; ama annemin Telegram ID'si için yalnızca ses alacak şekilde ayarladım.
      Bu klasör Jellyfin tarafından izleniyor; annem oradan indirebiliyor ya da doğrudan dinleyebiliyor. 2 yılda 1 TB'tan fazla sesli kitap indirdi ve bundan çok memnun.
      Daemon kodu: https://gist.github.com/entropie/d265e94136b9777cc6b3190189b...
    • Düşük bant genişliği durumlarında sık sık 144p seçiyorum. Boyutu, kaliteli yalnızca ses akışına neredeyse benzer; ama 45 dakikada bir bile olsa konuşmacıyı görebilme avantajı var. Pil tasarrufu da aynı şekilde sağlanıyor.
      144p video tuhaf biçimde huzurlu ve rahatlatıcı. Parlak renkler ya da karmaşık ayrıntılarla dikkatiniz dağılmıyor; sadece dinlemeye odaklanabiliyorsunuz.
    • iOS Safari'de Safari uygulamasından çıktıktan sonra Şu An Çalınan arayüzünde video oynatma düğmesine hızlıca basarsanız, YouTube video sesini arka planda oynatacak şekilde sistemi şaşırtabiliyorsunuz.
      Bunu genellikle YouTube Premium olsa bile arka planda oynatılmayan üyelik özel videolarını oynatırken kullanıyorum. iOS her güncellendiğinde bu “glitch”i kapatmamaları için dua ediyorum.
  • Bu proje, düzeltme PR'ı olmadan yalnızca issue bildirilmesini istemiyor gibi görünüyor.
    “you-get kullanırken bulduğunuz bir sorunu bildirmek için Pull Request açmanız gerekir…” gibi bir ifade var; böyle bir yöntemi daha önce görmemiştim.

    • Başkasının da söylediği gibi, düzeltmenin kendisini değil başarısız olan bir testi istedikleri anlamına geliyor gibi.
      Gereklilik, sorunun ayrıntılı açıklaması ve bu sorunu birim testi olarak ele alan en az bir commit. Buradaki “addressing” kelimesi pek iyi değil; “demonstrating” daha uygun olurdu bence.
    • Çince sürümde “GitHub Issues'ın kötüye kullanımını önlemek için genel issue kabul etmiyoruz” diye çevrilebilecek ek bir başlık var. Eski İngilizce metinde şöyle yazıyordu:
      you-get şu anda issue yönetiminde agresif bir yaklaşımı deniyor; hata raporlarının pull request yoluyla kodla ele alınması gerektiği belirtiliyor.
      https://github.com/soimort/you-get/commit/75b44b83826b3c2d9a...
      Muhtemelen çok fazla spam vardı. Bu arada tests/test.py birkaç web sitesi için extractor'ı doğrudan çalıştırıyor gibi görünüyor; ağ istek ve yanıtlarının nerede mock'landığını bulamadım. PR açacak kişi için süreci basitleştirme amacı taşıyor olabilir.
    • Sorunun çözüldüğünü gösterebilecek test içeren bir PR göndermenizi istiyorlar gibi görünüyor.
    • İnsanları test ya da tam bir düzeltme denemeye teşvik etme fikri ilginç; ama sadece bunu kabul edeceklerini söylemek biraz aşırı görünüyor. Gerçi you-get'in bakımını ben yapmıyorum, onların neler yaşadığını bilmiyorum.
      Komut satırı programını düzgün çalıştırmayı bilmeyen kişilerin tekrar tekrar açtığı issue selini filtrelemenin etkili bir yolu olabilir.
    • Başarısız olan bir test yazmak nispeten kolaydır ve issue triyajı için gereken işi ciddi biçimde azaltır. GitHub Issues'ın bir destek forumuna dönüşme riski de azalır.
      Bu sayede projenin bakımı kolaylaşıp daha uzun süre ayakta kalacaksa, bence sorun yok.
  • Başlığı ve açıklamanın başını görünce, sayfadan rastgele bir şeyler çekmeye çalışan heuristic tabanlı bir araç olduğunu düşündüm. Belirli siteler için destek aracı olmadığında, yani çoğu zaman “yt-dlp desteklemediğinde” işe yarayan türden bir araç.
    Ama aslında belli ölçüde popüler her kaynak için ayrı extractor'ı olan extractor tabanlı bir yapıymış. Sonuçta daha basit bir yt-dlp klonuna yakın değil mi diye düşünüyorum.

  • Bu hatayı sürekli alan başkaları var mı merak ediyorum
    you-get: [error] oops, something went wrong. ile başlayıp ağ sorunlarını kontrol etmeyi, en yeni sürümü doğrulamayı, bilinen hatalara bakmayı ve --debug seçeneğini çalıştırmayı öneriyor
    Debug bayrağını kullanmak da pek yardımcı olmadı; pattern = str(pattern, 'latin1') satırında TypeError: decoding to str: need a bytes-like object, NoneType found hatası aldım
    Yaş kısıtını aşmanın mümkün olup olmadığını görmek istiyordum ama yaş kısıtı olmayan videolarda da aynı hata oldu

    • Python sürümünü kontrol etmek iyi olabilir
      Pyenv gibi bir araçla daha yeni Python’a geçebilir ya da docker run -it -v $(pwd):/mnt python:3.13 bash gibi bir komutla Docker imajı başlatıp yardımcı aracı onun içinde deneyebilirsin
  • Bunun neden yt-dlp’den daha iyi olduğunu açıklayabilir misiniz?

    • İlginç soru. Bağımlılığı yalnızca tek bir kütüphane ama kodun ne kadarının gerçekten doğrudan yazıldığını merak ediyorum
      Örneğin özel bir mp4 birleştirici olması ilgimi çekti. Zaten ffmpeg varsa bunu elde daha iyi yapmanın neredeyse bir yolu yoktur herhalde
      https://github.com/soimort/you-get/blob/develop/src/you_get/...
    • yt-dlp’den daha iyi olduğu sonucuna nasıl vardığınızı merak ediyorum. Google’ın sürekli engellemeye çalıştığı bir alanda ne kadar çok seçenek olursa o kadar iyi diye düşünüyorum
  • Siteye özel çıkarıcılar ve dönüştürücü kütüphaneleri olan ytdl tarzı bir medya indiricisini tam olarak “aptal” bir araç diye adlandırmak zor, ama ytdl benzeri daha fazla projenin ortaya çıkması yine de iyi

  • Desteklenen siteler listesinde Bandcamp’in neden olduğunu pek anlamıyorum. Bandcamp, sanatçıya önce ödeme yaparsanız dosyayı doğrudan indirmenize izin veriyor
    Bu araçla indirebildiğiniz şeyler, sanatçının satın almadan önce ücretsiz dinlemeye izin vermesinden kaynaklanıyor. Bu araçla indirmek tamamen gereksiz ve biraz kaba bir davranış gibi görünüyor. Bandcamp’te çoğunlukla küçük bağımsız sanatçılar ve plak şirketleri var

    • Desteklenen siteler listesi, ahlaki gerekçelerle bu aracın nerede kullanılması gerektiğini ilan etmiyor. Sadece bu aracın çalıştığı popüler sitelerin listesi
    • Abone olduktan veya satın aldıktan sonra da bu aracın kullanılabileceğini düşünüyorum. İnsanlar zaten parasını ödedikleri içeriği bile, farklı kapalı ekosistemlere ait 5 uygulamaya giriş yapma zahmetini azaltmak için bu tür otomasyon araçlarıyla indiriyor
    • Herkes Bandcamp’e ödeme yapabilecek bir ülkede yaşamıyor olabilir
      Kişisel olarak ben de kararsız ya da yavaş ağlar ve pahalı operatörler yüzünden medyayı çevrimdışı tüketmek isteyebildiğim ya da buna mecbur kalabildiğim zamanlar oluyor. Bu, beğenirsem daha sonra ödeme yapmayacağım anlamına gelmiyor
    • Korsanlık yapanlar, hangi gelir düzeyinden itibaren hangi içerikleri çalmanın ahlaki ya da ahlaksız olduğunu düşünüyor?
    • Herkes sanatçıların kendi eserleri için para alması gerektiği konusunda hemfikir değil
  • İyi yapılmış görünüyor. Ama tüketici olarak yt-dlp yerine you-get kullanmam için neden olduğunu merak ediyorum
    Çok geniş bir site yelpazesinde oldukça iyi çalışan yt-dlp’ye göre hangi avantajları var?
    [1] https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites....

  • Dokümantasyonda “Google Videos’da ara ve indir: $ you-get "Richard Stallman eats"” yazıyor
    Dokümantasyonu pek sık okumam, ama bu kez okuyunca biraz mide bulandırıcı bir easter egg buldum

  • Hoşuma gitti. Chrome/Firefox için eşlik eden bir uzantı olsa, you-get’i backend olarak kullanıp bunu pürüzsüz biçimde uygulasalar iyi olur diye hayal ediyorum
    Bir adım daha ileri gidersek, YouTube’a girdiğinizde YouTube oynatıcısını bypass edip içeriği reklamsız olarak doğrudan oynatan bir you-get uzantısı düşünülebilir. Sadece YouTube değil, başka platformlara da uygulanabilir