Yt-dlp: Runtime JavaScript eksternal kini wajib untuk dukungan YouTube penuh
(github.com/yt-dlp)- yt-dlp adalah alat unduh berbasis baris perintah yang dapat mengunduh audio dan video dari ribuan situs, merupakan fork dari youtube-dl
- Untuk dekripsi n/sig YouTube, kini diperlukan runtime JavaScript eksternal (misalnya Deno, Node.js, Bun, QuickJS) bersama modul yt-dlp-ejs yang baru ditambahkan
- Deno ditetapkan sebagai runtime default, dan pengguna dapat menentukan runtime lain dengan opsi
--js-runtimes - Dengan perubahan ini, untuk menggunakan fitur terkait YouTube secara penuh, instalasi yt-dlp-ejs dan runtime JS menjadi wajib
- Penambahan dependensi pada runtime eksternal adalah langkah yang diperlukan untuk merespons perubahan struktur enkripsi YouTube, dan akan menjadi elemen kunci dalam pemeliharaan ke depan
Gambaran umum yt-dlp
- yt-dlp adalah fork dari youtube-dl, sebuah proyek yang dikembangkan berdasarkan youtube-dlc yang sudah tidak lagi dipelihara
- Dapat mengunduh audio dan video dari ribuan situs web, serta mendukung berbagai fitur pemilihan format, pascapemrosesan, subtitle, dan plugin
Perubahan terkait dukungan YouTube
- Paket yt-dlp-ejs diperlukan untuk mendekripsi nilai n/sig YouTube
- Paket ini didistribusikan di bawah Unlicense dan mencakup komponen berlisensi MIT dan ISC
- Untuk menjalankan yt-dlp-ejs, runtime JavaScript wajib tersedia
- Runtime yang didukung: deno (disarankan), node.js, bun, QuickJS
- Pengaturan terkait dapat ditentukan dengan opsi
--js-runtimes
- Jika menggunakan opsi
--no-js-runtimes, pengaturan runtime default dapat direset
Instalasi dan dependensi
- yt-dlp mendukung Python 3.10+ (CPython) dan 3.11+ (PyPy)
- Dependensi yang sangat direkomendasikan:
- ffmpeg / ffprobe: untuk penggabungan audio·video dan pascapemrosesan
- yt-dlp-ejs: untuk membuka enkripsi YouTube
- runtime JavaScript: untuk menjalankan yt-dlp-ejs
- Sebagai dependensi jaringan opsional, tersedia certifi, brotli, requests, curl_cffi, dan lainnya
Opsi perintah utama
--js-runtimes RUNTIME[:PATH]: menentukan runtime JS yang akan digunakan--no-js-runtimes: menonaktifkan semua runtime JS--remote-components COMPONENT: opsi yang dapat mengizinkan komponen JS eksternal--no-remote-components: memblokir pemuatan komponen jarak jauh
Pentingnya perubahan ini
- Dengan perubahan ini, yt-dlp kini mewajibkan runtime JS eksternal untuk mendukung penuh struktur enkripsi terbaru YouTube
- Ini merupakan pergeseran struktural untuk merespons pembaruan keamanan dan enkripsi YouTube yang terus berlanjut, serta perubahan penting bagi pemeliharaan dan perluasan fitur di masa depan
2 komentar
Wow... luar biasa juga bagaimana mereka memblokirnya, dan luar biasa juga bagaimana itu bisa ditembus. Saya penasaran bagaimana mereka menganalisisnya dan menembusnya.
Komentar Hacker News
Sudah termasuk di repo Arch, jadi langsung berfungsi
Tinggal menambahkan flag ke perintah
yt-dlp --cookies-from-browser firefox --remote-components ejs:github ...Saat dijalankan, solver diunduh saat runtime dan hanya memakan waktu sekitar 0,5 detik. Terasa kecepatan mulai unduhnya jauh lebih cepat
Namun kalau dijalankan di lingkungan terbatas, akan bagus jika solver bisa diunduh lebih dulu lewat perintah terpisah. Sekarang pun sudah memuaskan, tapi kalau ada otomatisasi packaging akan lebih praktis
Kalau khawatir soal keamanan, selama memakai Deno, sandboxing-nya cukup baik
Jika OS-nya tidak mendukung Deno atau Node, QuickJS yang ditulis dalam C juga bisa dipertimbangkan. Memang lebih lambat, tapi bisa berjalan hampir di semua lingkungan
Hanya saja dalam kasus itu sandboxing hilang. Meski begitu, kalau kodenya disediakan dari domain YouTube resmi, saya rasa masih bisa dipercaya
/home/username/.cacheAtau bisa mencoba otomatisasi packaging dengan
make yt-dlp-extraBaru-baru ini YouTube mulai mewajibkan header referrer untuk video embed
Jika mengakses
youtube.com/embed/<videoid>secara langsung, akan muncul error, dan di FAQ juga tertulis bahwa ini memang kebijakan yang disengajaMenurut dokumentasi resmi, pihak yang melakukan embed harus memberikan HTTP Referer, kalau tidak layar “error 153” akan ditampilkan
Saat QuickTime muncul pada 1991, saya menganggap video itu memang sewajarnya bisa disalin, ditempel, dan disimpan
Sekarang, bahkan video tanpa DRM pun sulit dipercaya bisa punya pengalaman pengguna seburuk ini
Sekarang cukup pakai pemutar bawaan OS atau VLC untuk menyelesaikan sebagian besar kebutuhan
Sejak 2010 saya memakai yt-dlp, termasuk saat masih bernama youtube-dl, untuk mengarsipkan semua video yang saya sukai
Sekarang saya sudah menyimpan puluhan ribu video, dan cukup banyak di antaranya sudah hilang dari situs
Saya juga menyimpan video seperti highlight sumo NHK yang hanya dipublikasikan selama sebulan
Di tengah pertarungan tanpa akhir antara pemblokir iklan dan penyisipan iklan, saya jadi berpikir AGI/ASI mungkin akan benar-benar muncul pada akhirnya.
Kedua pihak akan memakai LLM, dan manusia akan menjadi pihak yang kehilangan uang di dompet dan perhatiannya di tengah-tengah itu
Sepuluh tahun lagi, bisa saja YouTube benar-benar tidak bisa diakses lewat browser
Jika generasi yang terbiasa dengan aplikasi tablet menjadi arus utama, Google mungkin akan cukup percaya diri untuk meninggalkan web
Di isu yt-dlp #14404, sempat ada usulan untuk memakai Selenium atau browser headless,
tetapi tim pemelihara menjawab bahwa “itu adalah pernyataan menyerah dan bertentangan dengan semangat proyek”
Scraping itu benar-benar pekerjaan berat. API sering rusak, dan menjaga semuanya tetap berjalan ketika penyedianya membenci kita adalah hal yang luar biasa
Terasa bahwa YouTube makin menunjukkan sikap yang berseberangan dengan pengguna
Pemblokiran ad blocker, pengumpulan konten untuk pelatihan AI, pembatasan API, semuanya seperti memanfaatkan tidak adanya pesaing
Mereka sangat peka terhadap kepuasan pengiklan, tetapi pengguna dan kreator diperlakukan seperti barang habis pakai
Memulai dengan layanan gratis, menyingkirkan pesaing, lalu membangun struktur monopoli adalah semacam strategi umpan.
Sekarang kita butuh alternatif baru. Kalau pun berbayar, akan bagus jika layanannya transparan
Menurut wiki yt-dlp EJS, Deno direkomendasikan karena
ia bisa menjalankan kode dengan izin terbatas dan mengambil dependensi EJS dari npm secara remote
lebih aman menggunakan isolasi tingkat OS/VM seperti Firecracker