yt-dlp'yi bir VPS'te çalıştırmak, uzun indirmelere siz dizüstünüzü kapattıktan sonra da çevrimiçi kalan bir makine sağlar. Ayrıca zamanlanmış bir kanal çekiminden Jellyfin'in tarayabileceği bir medya kitaplığına giden temiz bir yol kurar.
Sunucu, iş akışının üç parçasını değiştirir: kurulum güncel YouTube bağımlılıklarını ister, hesap gerektiren videolar güvenli bir çerez aktarımı ister, otomasyon ise bilinçli bir istek temposu ister. Aşağıdaki kurulum, her indirmenin çerez, web arayüzü ya da bir PO Token sağlayıcısı gerektirdiğini varsaymadan üçünü de karşılar.
Özetle
- yt-dlp'yi bir Python sanal ortamına; ffmpeg, ffprobe, yt-dlp-ejs ve desteklenen bir JavaScript çalışma zamanıyla birlikte kurun. Projenin şu anda önerdiği çalışma zamanı Deno'dur.
- Hesap çerezleri olmadan başlayın. Bunları yalnızca özel oynatma listeleri, yaş sınırlı videolar, yalnızca üyelere açık içerik ya da hesap gerektiren başka bir durum için ekleyin.
- Ölçülmüş bir gerekçeniz olana kadar yt-dlp'nin tek parçalı varsayılan davranışını koruyun. İstek baskısını azaltmak için bekleme seçeneklerini ve kaydırmalı zamanlamaları kullanın.
- Yalın CLI ile systemd, güvenilir kurulumların en basitidir. Elle uğraşmadan işleyen kanal kuralları için Pinchflat'i, tarayıcı tabanlı bir kuyruk için MeTube'u, aranabilir bir izleme arayüzü için Tube Archivist'i seçin.
- Depolamayı boyutlandırmanın ana değişkeni olarak ele alın. Tam bir arşiv için disk kapasitesi satın almadan önce temsili bir örneklem üzerinde deneyin.
yt-dlp'yi sorumlu biçimde kullanın
Medyayı yalnızca izniniz varsa ve kullanımınız platformun koşullarına ve geçerli hukuka uyuyorsa arşivleyin.
- İyi adaylar arasında kendi yüklemeleriniz, kamu malı içerikler ve hak sahibinin indirilmesine izin verdiği materyaller yer alır.
- YouTube Premium aboneliği tek başına, YouTube'un sunduğu özelliklerin dışında video kopyalama izni vermez.
- YouTube'un izinleri ve kısıtlamaları hizmet ya da ilgili hak sahipleri izin vermedikçe indirmeyi ve otomatik erişimi sınırlar.
- Bu rehber; DRM'in aşılmasını, ticari yeniden dağıtımı ya da platform yaptırımlarından kaçma yollarını kapsamaz.
Başlamadan önce gerekenler
Temel kurulum küçüktür, medya dosyaları değil. Bütün bir kanalı indirmeden önce sunucuyu ve depolama yolunu hazırlayın.
- SSH erişimi olan, Ubuntu 22.04 veya daha yeni ya da güncel bir Debian sürümü çalıştıran bir VPS
- Python 3.10 veya daha yenisi
- Temsili bir örneklem için yeterli depolama, ayrıca kısmi dosyalar ve son işleme için pay
- Yalnızca hesap çerezlerine ihtiyacınız varsa, ayrı bir yerel tarayıcı
- İsteğe bağlı: Jellyfin, Emby ya da arşiv dizinini okuyabilen başka bir medya sunucusu
yt-dlp neden bir VPS'e konur?
Bir VPS, işin günlük bilgisayarınızdan bağımsız olarak sürmesi gerektiğinde işe yarar. İndiriciye kalıcı bir süreç, öngörülebilir bir dosya sistemi ve dizüstü uykuya geçtiğinde ya da ağ değiştirdiğinde durmayan bir zamanlayıcı sağlar.
Ödünleşimler önemli. Sunucunuzun aylık aktarım kotası, arşivi dışarı akıttığınızda bir sınır hâline gelebilir; bir VPS IP'si de istek limitlerine ev bağlantınızdan daha erken takılabilir. Güncellemeler, kimlik bilgisi yönetimi, yedekler, depolama temizliği ve medya sunucusu güvenliği de sizin sorumluluğunuzdadır. Tek seferlik bir indirme için dizüstü daha basittir. Yinelenen çekimler ya da paylaşılan bir medya kitaplığı içinse VPS'i işletmek daha kolaydır.
VPS'i depolama ve oynatma etrafında boyutlandırın
yt-dlp medyayı indirir ve yeniden paketler; normalde her dosyayı yeniden kodlamaz. Bu, indiricinin sürekli işlemci ve bellek ihtiyacını mütevazı tutar; disk kullanımı ise video süresine, çözünürlüğe, kodeğe ve seçilen biçime göre değişir.
Bu değerleri resmî asgari gereksinimler olarak değil, temkinli başlangıç noktaları olarak kullanın:
| Kurulum | Başlangıç kaynağı | Depolama yaklaşımı | En Uygun |
|---|---|---|---|
| Yalın yt-dlp ve systemd | 2 vCPU, 2 GB RAM | Örneklemden boyutlandırın | Arayüzsüz zamanlanmış indirmeler |
| MeTube ya da Pinchflat | 2 vCPU, 4 GB RAM | Örneklemden boyutlandırın | Tarayıcı kuyruğu ya da kanal abonelikleri |
| Tube Archivist | 4 vCPU, 8 GB RAM | Büyümeye pay bırakan yerel disk | Aranabilir arşiv ve yerleşik oynatma |
Küçük bir test yaklaşık 2 GB kullanılabilir bellek, orta ve büyük ölçekli bir kurulum ise yaklaşık 4 GB ister; kaynak: Tube Archivist dağıtım kılavuzu. Bu tabanın üzerinde başlamak; işletim sistemine, Docker'a, Elasticsearch etkinliğine ve Jellyfin gibi başka bir hizmete yer bırakır.
Tam bir arşivi boyutlandırmadan önce, seçtiğiniz çözünürlükte temsili bir grubu simüle edin ya da indirin. Ortaya çıkan dizini du ile inceleyin, tamamlanan video sayısına bölün ve alışılmadık uzunluktaki yüklemeleri de hesaba katın.
du -sh ~/archive
find ~/archive -type f \( -name '*.mp4' -o -name '*.mkv' \) | wc -l
df -h ~/archive
Örneklem, video başına gigabayt şeklindeki genel bir tahminden daha yararlıdır; çünkü kanalın gerçek süresini ve biçim karışımını yansıtır.
yt-dlp'yi ve güncel bağımlılıklarını kurun
yt-dlp projesi Python 3.10 ve sonrasını destekler. yt-dlp bağımlılık listesi Tam YouTube desteği için ffmpeg, ffprobe, yt-dlp-ejs ve desteklenen bir JavaScript çalışma zamanını güçlü biçimde önerir.
Sistem paketleriyle ve yalıtılmış bir Python ortamıyla başlayın:
sudo apt update
sudo apt install -y python3 python3-venv ffmpeg curl nano
python3 -m venv ~/yt-dlp-venv
source ~/yt-dlp-venv/bin/activate
python -m pip install -U --pre "yt-dlp[default]"
Deno, yt-dlp'de varsayılan olarak etkindir ve projenin şu kaynağının hâlihazırda önerdiği çalışma zamanıdır: EJS kılavuzu Kurun, kabuğunuzun yoluna ekleyin ve her bileşeni doğrulayın:
curl -fsSL https://deno.land/install.sh | sh
export PATH="$HOME/.deno/bin:$PATH"
echo 'export PATH="$HOME/.deno/bin:$PATH"' >> ~/.profile
yt-dlp --version
ffmpeg -version | head -1
deno --version
yt-dlp --simulate --verbose "https://www.youtube.com/watch?v=VIDEO_ID"
Ayrıntılı çıktı, yt-dlp'nin görebildiği bağımlılıkları listeler. ffmpeg yoksa yt-dlp uyarır ve ayrı gelen en iyi kalitedeki video ile ses akışlarını birleştiremez, birkaç son işleme adımını da çalıştıramaz.
pip ile kurulumda güncellemeyi, sanal ortam içinde pip'i yeniden çalıştırarak yapın. Yerleşik yt-dlp -U komutu, pip paketleri için değil, sürüm ikili dosyaları içindir.
source ~/yt-dlp-venv/bin/activate
python -m pip install -U --pre "yt-dlp[default]"
Güncelleme kanalları şurada anlatılır: yt-dlp güncelleme notları. stable, nightly ve master kanallarının üçü de kullanılabilir; proje sıradan kullanıcılara nightly'yi önerir, çünkü çıkarıcı düzeltmeleri oraya bir sonraki kararlı sürümden önce ulaşır.
Çerezleri yalnızca hesap gerektiren içerik için ekleyin
Hedef URL'yi önce çerezsiz deneyin. yt-dlp'nin YouTube kılavuzu, çerezlerin yalnızca hesap gerektiren içerikler için gerekli olduğunu söyler; buna özel oynatma listeleri, yaş sınırlı videolar ve yalnızca üyelere açık içerik dahildir. OAuth ile oturum açma artık yt-dlp'de çalışmıyor.
Çerezler gerektiğinde, yerel bilgisayarınızda ayrı bir YouTube oturumu dışa aktarın. Projenin şu yöntemi: çerez dışa aktarma yordamı gizli bir tarayıcı penceresi kullanır; böylece YouTube, dışa aktarılan oturumu açık kalan normal bir sekmede yenilemez:
- Tek bir gizli ya da özel pencere açın ve YouTube'da oturum açın.
- Aynı sekmede YouTube'un robots.txt dosyasını açın.
- Yalnızca youtube.com çerezlerini Netscape biçiminde, yt-dlp SSS'sinde listelenen eklentilerden biriyle dışa aktarın.
- Gizli pencereyi kapatın ve o oturumu yeniden açmayın.
- Dosyayı VPS'e kopyalayın ve izinlerini kısıtlayın.
scp cookies.txt your-user@your-vps-ip:~/cookies.txt
ssh your-user@your-vps-ip 'chmod 600 ~/cookies.txt'
Dosyayı hesap gerektiren bir URL ile test edin:
~/yt-dlp-venv/bin/yt-dlp \
--cookies ~/cookies.txt \
--simulate \
"https://www.youtube.com/watch?v=VIDEO_ID"
Çerez dosyaları oturum kimlik bilgileridir ve tarayıcı eklentilerinin dikkatle seçilmesi gerekir; kaynak: yt-dlp çerez SSS'si. YouTube çıkarıcı kılavuzu ayrıca, yt-dlp ile bir hesap kullanmanın geçici ya da kalıcı bir yasağa yol açabileceği konusunda uyarır. Çerezleri yalnızca hedef gerektirdiğinde kullanın, dosyayı gizli tutun ve ana Google hesabınız yerine ayrı bir hesap kullanın.
Hedeflerin çoğu herkese açıksa --cookies seçeneğini genel yapılandırmaya koymayın. İkinci bir yapılandırma dosyası kullanın ya da seçeneği yalnızca ihtiyaç duyan işlere ekleyin.
PO Token'ları koşullu bir sorun giderme adımı olarak görün
Proof of Origin Token, kurulum için evrensel bir gereklilik değildir. YouTube şu anda bu belirteçleri bazı istemci ve istek bileşimlerinde zorunlu tutuyor ve tam liste değişiyor.
Varsayılan istemciler başarısız olduğunda mweb istemcisi için bir sağlayıcı eklentisi önerilir; kaynak: yt-dlp PO Token kılavuzu. Öne çıkan seçeneklerden biri olarak bgutil-ytdlp-pot-provider'ı listeler; ancak bu eklenti hem bir belirteç sağlayıcısı hem de bir yt-dlp eklentisi ister. Yalnızca Python paketini kurmak eksiksiz bir kurulum değildir.
Bir YouTube indirmesi başarısız olduğunda şu sırayı izleyin:
- yt-dlp'yi, yt-dlp-ejs'i ve JavaScript çalışma zamanını güncelleyin.
- Hatayı --verbose ile ve fazladan istemci geçersiz kılması olmadan yeniden üretin.
- Çerezleri yalnızca video bir hesap gerektiriyorsa ekleyin.
- Hata PO Token zorunluluğuna işaret ediyorsa, resmî kılavuzdan bağlantı verilen güncel sağlayıcı yönergelerini izleyin.
Böylece oynak bir geçici çözüm, aksi hâlde kararlı olan temel kurulumun dışında kalır.
Arayüzü iş akışına göre seçin
Asıl karar, hangi arayüzün özellik listesinin daha uzun olduğu değildir. Tarayıcı kuyruğuna mı, kurala dayalı aboneliklere mi, yoksa YouTube tarzı eksiksiz bir yerel kitaplığa mı ihtiyacınız olduğuna karar verin.
| Seçenek | Dağıtım | Güçlü yanları | Başlıca ödünleşim |
|---|---|---|---|
| Yalın CLI | Arayüz yok | Betikler, yapılandırma dosyaları, systemd, seçenekler üzerinde tam denetim | Tarayıcı arayüzü yok |
| MeTube | Tek bir Docker konteyneri | Tarayıcı üzerinden indirmeler ile kanal ve oynatma listesi abonelikleri | İndirme sonrası sınırlı kitaplık yönetimi |
| Pinchflat | Tek bir Docker konteyneri | Kanallar ve oynatma listeleri için kurallar, RSS, saklama süreleri, medya merkezine uygun çıktı | Uygulama içinde izlemek için değil, indirme yönetimi için tasarlanmıştır |
| Tube Archivist | Uygulama, Redis ve Elasticsearch konteynerleri | Arama, üst veri, kuyruklar, kanal sayfaları ve oynatma | En yüksek bellek ve işletim yükü |
Hafif bir tarayıcı iş akışı için MeTube; yeni öğeleri düzenli olarak kontrol edip otomatik kuyruğa alan kanal ve oynatma listesi aboneliklerini destekler. Ağırlıklı olarak bir web formu ve indirme kuyruğu istiyorsanız en basit seçenek olmayı sürdürür.
Pinchflat; Jellyfin, Plex, Kodi ya da bir RSS istemcisi üzerinden izlenecek kanalların sürekli arşivlenmesine en iyi oturan seçenektir. Kendi kendine yeter, kaynakları düzenli olarak kontrol eder, saklama kurallarını destekler ve oynatmayı bilerek başka bir uygulamaya bırakır.
Tube Archivist, arşivin kendisinin aranabilir bir video sitesi gibi davranmasını istediğinizde ek servislerini hak eder. Oynatma arayüzünü zaten Jellyfin sağlıyorsa yalın CLI ya da Pinchflat ile başlayın; Tube Archivist'i ancak arama ve üst veri modeli gerçekten yaşadığınız bir sorunu çözdüğünde ekleyin.
Yinelenebilir bir arşiv yapılandırması kurun
Kalıcı seçenekleri tek bir dosyada tutun ve kanal URL'sini komut satırından ya da zamanlayıcıdan geçirin. Bu örnek çıktıyı 1080p ile sınırlar, tamamlanan video kimliklerini kaydeder, istekler arasına hafif bir aralık koyar ve yt-dlp dışında da işe yarayan üst veriler yazar.
Dizinleri ve yapılandırma dosyasını oluşturun:
mkdir -p ~/.config/yt-dlp ~/archive
nano ~/.config/yt-dlp/archive.conf
Şu seçenekleri ekleyin:
-P "~/archive"
-o "%(channel)s/%(upload_date>%Y-%m-%d)s - %(title)s [%(id)s].%(ext)s"
-f "bv*[height<=1080]+ba/b[height<=1080]"
--merge-output-format mp4
--download-archive ~/archive/downloaded.txt
--sleep-requests 1
--sleep-interval 5
--max-sleep-interval 10
--write-info-json
--write-thumbnail
--write-subs
--write-auto-subs
--sub-langs en.*
--embed-subs
--embed-thumbnail
--embed-metadata
--sponsorblock-mark all
yt-dlp'ye bütün bir kanalı vermeden önce tek videoluk bir test yapın:
~/yt-dlp-venv/bin/yt-dlp \
--config-location ~/.config/yt-dlp/archive.conf \
"https://www.youtube.com/watch?v=VIDEO_ID"
Ardından aynı yapılandırmayla bir kanal ya da oynatma listesi URL'si çalıştırın:
~/yt-dlp-venv/bin/yt-dlp \
--config-location ~/.config/yt-dlp/archive.conf \
"https://www.youtube.com/@CHANNEL/videos"
--download-archive dosyası başarıyla indirilen kimlikleri kaydeder, böylece sonraki çalıştırmalar onları atlar. Başlangıçta varsayılan --concurrent-fragments 1 değerini koruyun. yt-dlp'nin YouTube kılavuzu, bir oturum istek sınırlarına ulaştığında videolar arasına gecikme konmasını önerir; VPS IP'leri için evrensel ve güvenli bir parça eşzamanlılık tavanı yayımlamaz.
İndirmeleri systemd ile zamanlayın
Kullanıcı düzeyinde bir systemd zamanlayıcısı, cron'a uzun bir komut koymadan işe kalıcı zamanlama ve günlükler kazandırır. Rastgele gecikme ayrıca zamanlanmış tüm kaynakların aynı saniyede başlamasını önler. Kullanıcı yöneticisinin PATH'ine bağlı kalmamak için servis, yt-dlp'yi doğrudan Deno'nun varsayılan kurulum konumuna yönlendirir.
Servisi oluşturun:
mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/yt-dlp-archive.service
[Unit]
Description=Archive a YouTube channel with yt-dlp
[Service]
Type=oneshot
ExecStart=%h/yt-dlp-venv/bin/yt-dlp --js-runtimes deno:%h/.deno/bin/deno --config-location %h/.config/yt-dlp/archive.conf https://www.youtube.com/@CHANNEL/videos
Zamanlayıcıyı oluşturun:
nano ~/.config/systemd/user/yt-dlp-archive.timer
[Unit]
Description=Run the yt-dlp archive daily
[Timer]
OnCalendar=*-*-* 04:00:00
RandomizedDelaySec=30m
Persistent=true
[Install]
WantedBy=timers.target
Zamanlayıcıyı etkinleştirin ve oturum açmadığınızda da kullanıcı servisinin çalışmasına izin verin:
systemctl --user daemon-reload
systemctl --user enable --now yt-dlp-archive.timer
sudo loginctl enable-linger "$USER"
systemctl --user list-timers
journalctl --user -u yt-dlp-archive.service -n 100 --no-pager
Birden çok kanal için kanal başına bir servis örneği oluşturun ya da ayrı zamanlayıcılar kullanın. Birkaç büyük çekimi aynı anda başlatmak yerine zamanlarını kaydırın.
Arşivi Jellyfin'e bağlayın
Aynı ~/archive dizinini Jellyfin'e bağlayın ya da erişilebilir kılın, sonra bir kitaplık olarak ekleyin. Ham kanal/tarih düzeni için Jellyfin'in şu kitaplık türü uygundur: Music Videos kitaplığı iç içe klasörleri ve rastgele dosya adlarını, çevrimiçi üst veri eşleştirmesi olmadan kabul eder. Etiket, müzik dışı arşivler için tam oturmaz; ama dosya sistemi açısından, dizi ve sezon klasörleriyle SxxEyy biçiminde bölüm adları bekleyen "Shows" türünden daha uygundur. Jellyfin'in üst veri sonuçlarının güvenilmez olabileceği uyarısını kabul etmiyorsanız Mixed Content'ten kaçının.
yt-dlp yapılandırmasındaki üst veri, küçük resim ve altyazı seçenekleri, işe yarar bilgileri her dosyanın yanında ya da içinde tutar. Yine de Jellyfin'de üst veriyi elle düzeltmek gerekebilir; çünkü bir YouTube kanalı, dizi veritabanına düzgün oturmaz.
Daha az elle uğraşarak Jellyfin'e uygun dosya adları ve üst veriler istiyorsanız, Pinchflat bu iş akışı için medya merkezi hazır ayarları sunar. Medya sunucuları arasındaki daha geniş seçim içinse şu yazımıza bakın: Jellyfin ve Plex karşılaştırmamız Oynatma, uzaktan erişim ve yeniden kodlama ödünleşimlerini ele alır.
Yığını kalıcı bir sunucuya taşıyın
İş akışı küçük bir test kümesinde çalıştığında, onu şuraya taşıyın: Cloudzy'nin Linux VPS'i Böylece zamanlanmış indirmeler ve medya kitaplığınız, günlük bilgisayarınızı meşgul etmeden çevrimiçi kalabilir. Ayrıca şunu da kurabilirsiniz: tek tıkla kurulan uygulama olarak Jellyfin ve kitaplığını yt-dlp'nin çıktı dizinine yönlendirin.
Root erişimi, NVMe ve AMD EPYC gücüne sahip bir Linux VPS üzerinde geliştir.
Linux Planlarını GörSıkça Sorulan Sorular
yt-dlp bir VPS'te GPU'ya ihtiyaç duyar mı?
Hayır. yt-dlp, medyayı GPU olmadan indirip yeniden paketleyebilir. GPU, Jellyfin ya da başka bir medya sunucusunun uyumsuz istemciler veya daha dar bant bağlantılar için videoyu yeniden kodlaması gerektiğinde önem kazanır; doğrudan oynatma bu dönüştürmeyi gerektirmez.
yt-dlp yarıda kalan bir indirmeyi sürdürebilir mi?
Evet. yt-dlp kısmi dosyaları ve devam etmeyi varsayılan olarak açar; böylece sonraki bir çalıştırma indirilen parçaları baştan almak yerine normalde kaldığı yerden sürdürür. Bu davranışı istiyorsanız --no-continue, --no-part veya --force-overwrites eklemeyin.
