Menjalankan yt-dlp di VPS memberi unduhan panjang sebuah mesin yang tetap daring setelah Anda menutup laptop. Ia juga membuat jalur yang rapi dari penarikan kanal terjadwal ke pustaka media yang bisa dipindai Jellyfin.
Server mengubah tiga bagian dari alur kerja: instalasi butuh dependensi YouTube terkini, video yang terkunci akun butuh pemindahan cookie yang aman, dan otomatisasi butuh pengaturan tempo permintaan yang disengaja. Penyiapan di bawah menangani ketiganya tanpa mengandaikan bahwa setiap unduhan butuh cookie, antarmuka web, atau penyedia PO Token.
TL;DR
- Pasang yt-dlp dalam lingkungan virtual Python bersama ffmpeg, ffprobe, yt-dlp-ejs, dan runtime JavaScript yang didukung. Deno adalah runtime yang saat ini direkomendasikan proyeknya.
- Mulailah tanpa cookie akun. Tambahkan hanya untuk playlist privat, video dengan batasan usia, konten khusus anggota, atau kasus lain yang memerlukan akun.
- Pertahankan perilaku bawaan yt-dlp dengan satu fragmen sampai Anda punya alasan terukur untuk mengubahnya. Gunakan opsi jeda dan jadwal yang dibuat berselang untuk menekan tekanan permintaan.
- CLI polos ditambah systemd adalah penyiapan andal yang paling sederhana. Pilih Pinchflat untuk aturan kanal yang jalan sendiri, MeTube untuk antrean lewat peramban, atau Tube Archivist untuk antarmuka menonton yang bisa dicari.
- Perlakukan penyimpanan sebagai variabel utama dalam menentukan ukuran. Uji sampel yang representatif sebelum membeli kapasitas disk untuk arsip penuh.
Gunakan yt-dlp Secara Bertanggung Jawab
Arsipkan media hanya jika Anda punya izin dan penggunaan Anda mematuhi ketentuan platform serta hukum yang berlaku.
- Kandidat yang baik mencakup unggahan Anda sendiri, media domain publik, dan materi yang pemegang haknya sudah mengizinkan pengunduhan.
- Langganan YouTube Premium dengan sendirinya tidak memberi izin menyalin video di luar fitur yang disediakan YouTube.
- Izin dan pembatasan YouTube membatasi pengunduhan dan akses otomatis kecuali layanannya atau pemegang hak terkait mengizinkannya.
- Tutorial ini tidak membahas pengelakan DRM, redistribusi komersial, atau cara menghindari penegakan aturan platform.
Yang Anda Butuhkan Sebelum Memulai
Instalasi dasarnya kecil, tetapi berkas medianya tidak. Siapkan server dan jalur penyimpanan sebelum mengunduh satu kanal penuh.
- VPS dengan Ubuntu 22.04 atau lebih baru, atau rilis Debian terkini, dengan akses SSH
- Python 3.10 atau lebih baru
- Penyimpanan yang cukup untuk sampel representatif plus ruang lebih untuk berkas parsial dan pascaproses
- Peramban lokal terpisah, hanya jika Anda butuh cookie akun
- Opsional: Jellyfin, Emby, atau server media lain yang bisa membaca direktori arsip
Mengapa Menaruh yt-dlp di VPS?
VPS berguna ketika pekerjaannya harus terus berjalan lepas dari komputer harian Anda. Ia memberi pengunduh sebuah proses yang persisten, sistem berkas yang bisa diprediksi, dan penjadwal yang tidak berhenti saat laptop tidur atau berganti jaringan.
Pertimbangan untung-ruginya penting. Kuota transfer bulanan server Anda bisa jadi batas ketika Anda menyiarkan arsipnya keluar, dan IP VPS mungkin lebih cepat kena batas permintaan dibanding koneksi rumah. Anda juga menanggung pembaruan, penanganan kredensial, cadangan, pembersihan penyimpanan, dan keamanan server media. Untuk unduhan sekali jalan, laptop lebih sederhana. Untuk penarikan berulang atau pustaka media bersama, VPS lebih mudah dioperasikan.
Tentukan Ukuran VPS Berdasarkan Penyimpanan dan Pemutaran
yt-dlp mengunduh dan me-remux media; biasanya ia tidak mentranskode setiap berkas. Itu membuat kebutuhan CPU dan memori tetapnya sederhana, sementara pemakaian disk berubah-ubah sesuai durasi video, resolusi, codec, dan format yang dipilih.
Pakai alokasi ini sebagai titik awal yang konservatif, bukan sebagai minimum resmi:
| Pemasangan | Alokasi Awal | Pendekatan Penyimpanan | Pilihan Terbaik |
|---|---|---|---|
| yt-dlp polos dengan systemd | 2 vCPU, 2 GB RAM | Ukur dari sampel | Unduhan terjadwal tanpa antarmuka |
| MeTube atau Pinchflat | 2 vCPU, 4 GB RAM | Ukur dari sampel | Antrean peramban atau langganan kanal |
| Tube Archivist | 4 vCPU, 8 GB RAM | Disk lokal dengan ruang untuk bertumbuh | Arsip yang bisa dicari dengan pemutar bawaan |
Uji coba kecil butuh sekitar 2 GB memori tersedia dan instalasi menengah hingga besar sekitar 4 GB, menurut panduan penerapan Tube Archivist. Memulai di atas batas itu menyisakan ruang untuk sistem operasi, Docker, aktivitas Elasticsearch, dan layanan lain seperti Jellyfin.
Sebelum menentukan ukuran arsip penuh, simulasikan atau unduh satu kelompok representatif pada resolusi pilihan Anda. Periksa direktori hasilnya dengan du, bagi dengan jumlah video yang selesai, dan perhitungkan unggahan yang luar biasa panjang.
du -sh ~/archive
find ~/archive -type f \( -name '*.mp4' -o -name '*.mkv' \) | wc -l
df -h ~/archive
Sampel lebih berguna daripada perkiraan umum gigabyte per video, karena ia mencerminkan durasi dan campuran format kanal yang sebenarnya.
Pasang yt-dlp dan Dependensi Terkininya
Proyek yt-dlp mendukung Python 3.10 ke atas. daftar dependensi yt-dlp sangat menyarankan ffmpeg, ffprobe, yt-dlp-ejs, dan runtime JavaScript yang didukung demi dukungan YouTube yang penuh.
Mulailah dengan paket sistem dan lingkungan Python yang terisolasi:
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 aktif secara bawaan di yt-dlp dan merupakan runtime yang saat ini direkomendasikan oleh panduan EJS panduan EJS proyeknya. Pasang, tambahkan ke path shell Anda, lalu verifikasi setiap komponen:
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"
Keluaran verbose menampilkan dependensi yang bisa dilihat yt-dlp. Kalau ffmpeg tidak ada, yt-dlp memberi peringatan dan tidak bisa menggabungkan aliran video dan audio kualitas terbaik yang terpisah, atau menjalankan sejumlah langkah pascaproses.
Untuk instalasi lewat pip, perbarui dengan menjalankan ulang pip di dalam lingkungan virtual. Perintah bawaan yt-dlp -U ditujukan untuk berkas biner rilis, bukan paket pip.
source ~/yt-dlp-venv/bin/activate
python -m pip install -U --pre "yt-dlp[default]"
Kanal pembaruan dijelaskan dalam catatan pembaruan yt-dlp. Kanal stable, nightly, dan master semuanya tersedia, dan nightly adalah yang direkomendasikan proyek untuk pengguna biasa, karena perbaikan ekstraktor tiba di sana sebelum rilis stabil berikutnya.
Tambahkan Cookie Hanya untuk Konten yang Memerlukan Akun
Coba dulu URL sasarannya tanpa cookie. Panduan YouTube dari yt-dlp menyebut cookie hanya perlu untuk konten yang memerlukan akun, termasuk playlist privat, video dengan batasan usia, dan konten khusus anggota. Login OAuth sudah tidak berfungsi lagi dengan yt-dlp.
Kalau cookie memang diperlukan, ekspor sesi YouTube khusus di komputer lokal Anda. Prosedur ekspor cookie dari proyeknya memakai jendela penjelajahan pribadi supaya YouTube tidak merotasi sesi yang sudah diekspor di tab biasa yang masih terbuka:
- Buka satu jendela privat atau penyamaran, lalu masuk ke YouTube.
- Di tab yang sama, buka berkas robots.txt milik YouTube.
- Ekspor hanya cookie youtube.com dalam format Netscape, memakai salah satu ekstensi yang terdaftar di FAQ yt-dlp.
- Tutup jendela privatnya dan jangan buka lagi sesi tersebut.
- Salin berkasnya ke VPS dan batasi izin aksesnya.
scp cookies.txt your-user@your-vps-ip:~/cookies.txt
ssh your-user@your-vps-ip 'chmod 600 ~/cookies.txt'
Uji berkasnya dengan URL yang memerlukan akun:
~/yt-dlp-venv/bin/yt-dlp \
--cookies ~/cookies.txt \
--simulate \
"https://www.youtube.com/watch?v=VIDEO_ID"
Berkas cookie adalah kredensial sesi, dan ekstensi peramban perlu dipilih dengan hati-hati, menurut FAQ cookie dari yt-dlp. Panduan ekstraktor YouTube juga memperingatkan bahwa memakai akun bersama yt-dlp bisa berujung pada pemblokiran sementara atau permanen. Pakai cookie hanya bila sasarannya memang menuntut, jaga kerahasiaan berkasnya, dan gunakan akun terpisah alih-alih akun Google utama Anda.
Jangan menaruh --cookies di konfigurasi global kalau sebagian besar sasarannya publik. Pakai berkas konfigurasi kedua, atau tambahkan flag itu hanya pada pekerjaan yang membutuhkannya.
Perlakukan PO Token sebagai Pemecahan Masalah Bersyarat
Proof of Origin Token bukan syarat instalasi yang berlaku universal. Saat ini YouTube mewajibkan token tersebut untuk sebagian kombinasi klien dan permintaan, dan matriks persisnya berubah-ubah.
Plugin penyedia untuk klien mweb disarankan ketika klien bawaan gagal, menurut panduan PO Token dari yt-dlp. Di sana bgutil-ytdlp-pot-provider disebut sebagai salah satu opsi unggulan, tetapi plugin itu memerlukan penyedia token sekaligus plugin yt-dlp. Memasang paket Python-nya saja belum merupakan penyiapan yang lengkap.
Ikuti urutan ini ketika unduhan YouTube gagal:
- Perbarui yt-dlp, yt-dlp-ejs, dan runtime JavaScript.
- Reproduksi kegagalannya dengan --verbose dan tanpa penggantian klien tambahan.
- Tambahkan cookie hanya jika videonya memerlukan akun.
- Kalau galatnya mengarah ke pemberlakuan PO Token, ikuti petunjuk penyedia terkini yang ditautkan dari panduan resmi.
Dengan begitu, akal-akalan yang mudah berubah tidak masuk ke instalasi dasar yang sebenarnya stabil.
Pilih Frontend Berdasarkan Alur Kerja
Keputusan utamanya bukan antarmuka mana yang daftar fiturnya paling panjang. Tentukan apakah Anda butuh antrean di peramban, langganan berbasis aturan, atau pustaka lokal lengkap bergaya YouTube.
| Opsi | Penerapan | Unggul Dalam | Kompromi Utama |
|---|---|---|---|
| CLI polos | Tanpa frontend | Skrip, berkas konfigurasi, systemd, kendali persis atas setiap opsi | Tidak ada antarmuka peramban |
| MeTube | Satu kontainer Docker | Unduhan lewat peramban plus langganan kanal dan playlist | Pengelolaan pustaka setelah unduhan terbatas |
| Pinchflat | Satu kontainer Docker | Aturan untuk kanal dan playlist, RSS, retensi, keluaran untuk media center | Dirancang untuk mengelola unduhan, bukan untuk menonton di dalam aplikasi |
| Tube Archivist | Kontainer aplikasi, Redis, dan Elasticsearch | Pencarian, metadata, antrean, halaman kanal, dan pemutaran | Beban memori dan operasional paling tinggi |
Untuk alur kerja ringan lewat peramban, MeTube mendukung langganan kanal dan playlist yang secara berkala memeriksa item baru dan otomatis mengantrekannya. Ia tetap pilihan paling sederhana ketika yang Anda inginkan terutama sebuah formulir web dan antrean unduhan.
Pinchflat paling pas untuk pengarsipan kanal yang berjalan terus dan nantinya ditonton lewat Jellyfin, Plex, Kodi, atau klien RSS. Ia berdiri sendiri, memeriksa sumber secara berkala, mendukung aturan retensi, dan sengaja menyerahkan pemutaran ke aplikasi lain.
Tube Archivist sepadan dengan layanan tambahannya ketika Anda ingin arsipnya sendiri berperilaku seperti situs video yang bisa dicari. Kalau Jellyfin sudah menjadi antarmuka pemutaran Anda, mulailah dengan CLI polos atau Pinchflat, lalu tambahkan Tube Archivist hanya bila model pencarian dan metadatanya benar-benar memecahkan masalah Anda.
Bangun Konfigurasi Arsip yang Bisa Diulang
Simpan opsi yang jarang berubah dalam satu berkas, lalu oper URL kanalnya dari baris perintah atau penjadwal. Contoh ini membatasi keluaran ke 1080p, mencatat ID video yang selesai, menambahkan jeda ringan antarpermintaan, dan menulis metadata yang tetap berguna di luar yt-dlp.
Buat direktori dan berkas konfigurasinya:
mkdir -p ~/.config/yt-dlp ~/archive
nano ~/.config/yt-dlp/archive.conf
Tambahkan opsi berikut:
-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
Jalankan uji coba satu video sebelum menyerahkan satu kanal penuh ke yt-dlp:
~/yt-dlp-venv/bin/yt-dlp \
--config-location ~/.config/yt-dlp/archive.conf \
"https://www.youtube.com/watch?v=VIDEO_ID"
Setelah itu jalankan URL kanal atau playlist dengan konfigurasi yang sama:
~/yt-dlp-venv/bin/yt-dlp \
--config-location ~/.config/yt-dlp/archive.conf \
"https://www.youtube.com/@CHANNEL/videos"
Berkas --download-archive mencatat ID yang berhasil diunduh, sehingga jalannya berikutnya melewatkan yang itu. Pada awalnya pertahankan nilai bawaan --concurrent-fragments 1. Panduan YouTube dari yt-dlp menyarankan jeda antarvideo ketika sebuah sesi mencapai batas permintaan; ia tidak menerbitkan batas atas konkurensi fragmen yang aman secara universal untuk IP VPS.
Jadwalkan Unduhan dengan systemd
Timer systemd di tingkat pengguna memberi pekerjaan itu penjadwalan yang persisten beserta log, tanpa menaruh perintah panjang di cron. Jeda acaknya juga mencegah semua sumber terjadwal mulai pada detik yang sama. Agar tidak bergantung pada PATH milik manajer pengguna, servisnya mengarahkan yt-dlp langsung ke lokasi instalasi bawaan Deno.
Buat servisnya:
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
Buat timer-nya:
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
Aktifkan timer-nya dan izinkan servis pengguna berjalan meski Anda tidak sedang masuk:
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
Untuk banyak kanal, buat satu instans servis per kanal atau pakai timer terpisah. Buat waktunya berselang, jangan meluncurkan beberapa penarikan besar sekaligus.
Hubungkan Arsip ke Jellyfin
Pasang atau buka direktori ~/archive yang sama ke Jellyfin, lalu tambahkan sebagai pustaka. Untuk tata letak mentah kanal/tanggal, pustaka Music Videos milik Jellyfin menerima folder bersarang dan nama berkas sesuka hati, tanpa pencocokan metadata daring. Labelnya memang kurang pas untuk arsip nonmusik, tetapi secara struktur berkas lebih cocok daripada tipe "Shows", yang mengharapkan folder seri dan musim dengan nama episode SxxEyy. Hindari Mixed Content kecuali Anda menerima peringatan Jellyfin bahwa hasil metadatanya bisa tidak bisa diandalkan.
Opsi metadata, gambar mini, dan takarir di konfigurasi yt-dlp menyimpan informasi berguna di samping atau di dalam tiap berkas. Jellyfin tetap mungkin butuh penyesuaian metadata secara manual, sebab kanal YouTube tidak terpetakan rapi ke basis data serial TV.
Kalau Anda ingin nama berkas dan metadata yang pas untuk Jellyfin dengan lebih sedikit kerja manual, Pinchflat punya praatur media center untuk alur itu. Untuk pilihan yang lebih luas antarserver media, perbandingan Jellyfin dan Plex dari kami membahas kompromi soal pemutaran, akses jarak jauh, dan transcoding.
Taruh Stack-nya di Server yang Selalu Hidup
Begitu alur kerjanya berhasil pada satu set uji kecil, pindahkan ke VPS Linux Cloudzy , supaya unduhan terjadwal dan pustaka media Anda tetap daring tanpa mengikat komputer harian Anda. Anda juga bisa menggelar Jellyfin sebagai aplikasi sekali klik dan arahkan pustakanya ke direktori keluaran yt-dlp.
Bangun di VPS Linux dengan akses root, NVMe, dan tenaga AMD EPYC.
Lihat Paket LinuxPertanyaan yang Sering Diajukan
Apakah yt-dlp Butuh GPU di VPS?
Tidak. yt-dlp bisa mengunduh dan me-remux media tanpa GPU. GPU baru relevan ketika Jellyfin atau server media lain harus mentranskode video untuk klien yang tidak kompatibel atau koneksi berbandwidth rendah; pemutaran langsung tidak memerlukan konversi itu.
Bisakah yt-dlp Melanjutkan Unduhan yang Terputus?
Bisa. yt-dlp mengaktifkan berkas parsial dan pelanjutan secara bawaan, sehingga jalan berikutnya biasanya menyambung fragmen yang sudah terunduh alih-alih mengulanginya. Jangan tambahkan --no-continue, --no-part, atau --force-overwrites kalau Anda menginginkan perilaku itu.
