12 poin oleh GN⁺ 2025-11-13 | 2 komentar | Bagikan ke WhatsApp
  • 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
Iklan

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

 
kimjoin2 2025-11-14

Wow... luar biasa juga bagaimana mereka memblokirnya, dan luar biasa juga bagaimana itu bisa ditembus. Saya penasaran bagaimana mereka menganalisisnya dan menembusnya.

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

    • Senang mendengar performanya jadi lebih cepat. Belakangan YouTube bahkan tidak berjalan baik di browser, jadi tim yang bisa menjaga akses tetap tersedia lewat skrip Python benar-benar hebat
    • Penasaran di lingkungan seperti apa Python bisa jalan tapi JS tidak
      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
    • Kalau ingin mengunduh solver lebih dulu, unduh saja video apa pun sekali, lalu salin file ejs dari direktori cache yt-dlp, misalnya /home/username/.cache
      Atau bisa mencoba otomatisasi packaging dengan make yt-dlp-extra
    • Paket yt-dlp-ejs di AUR tampaknya memang dibuat untuk tujuan itu
    • Saya memasang Deno secara manual lewat Chocolately, dan yt-dlp juga saya pasang lewat choco, jadi versinya v2025.10.22
  • Baru-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 disengaja
    Menurut dokumentasi resmi, pihak yang melakukan embed harus memberikan HTTP Referer, kalau tidak layar “error 153” akan ditampilkan

    • Kebanyakan layanan embed makin lama makin berubah ke arah seperti ini. Tujuannya untuk memperkuat pelacakan. Bahkan ada yang sampai mewajibkan login
    • Sebenarnya ini bisa dilewati hanya dengan satu baris JS redirect sederhana. Biaya implementasinya ratusan ribu dolar, tapi biaya bypass-nya nol. Pada akhirnya ini terasa seperti pesan bahwa “kalau kami mau, kami bisa memblokir kapan saja”
  • 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 justru jauh lebih baik daripada dulu. Dulu orang sering merusak sistem karena memasang RealPlayer, Flash, codec pack, dan adware.
      Sekarang cukup pakai pemutar bawaan OS atau VLC untuk menyelesaikan sebagian besar kebutuhan
    • Awal 90-an adalah masa paling menarik bagi PC. Sekarang smartphone jadi arus utama, dan bagi pengguna umum, konsep salin/simpan praktis tinggal tersisa dalam bentuk screenshot atau rekam layar
    • Video punya kepadatan data tinggi, jadi biaya hosting-nya besar. Karena itu yang bertahan hanya platform besar seperti YouTube, sementara alternatif seperti Nebula, PeerTube, dan Odysee punya keterbatasan dari sisi kualitas atau biaya
    • Dulu targetnya adalah optimasi yang berpusat pada pengguna, tapi sekarang zamannya perusahaan bergerak dengan mendahulukan kepentingan sendiri
    • Standar siaran ATSC 3 juga menambahkan DRM belakangan sehingga menimbulkan masalah kompatibilitas pada perangkat penerima lama
  • 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

    • Bisa dibilang semacam kolektor digital. Akan menarik kalau ada fitur seperti Google Memories yang secara berkala mengingatkan kembali video-video lama
    • Banyak kanal yang sendiri menghapus atau mendelete videonya, jadi saya mulai menyimpan konten bagus sebelum lenyap
    • Semua hal di internet bisa hilang kapan saja. Yang penting harus disimpan sendiri kalau ingin bisa melihatnya lagi
    • Tidak menyangka akan melihat sesama penyimpan video sumo di sini. Ternyata orang seperti kita lumayan banyak
    • Di zaman konten melimpah seperti sekarang, saya kadang berpikir apakah perlu menyimpan semuanya. Dulu saya mengoleksi MP3 dan film, tapi sekarang saya hanya menyimpan foto di cloud
  • 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

    • Kalau benar-benar ingin memaksakan DRM, dibutuhkan perangkat keras khusus. Stream terenkripsi harus dibuat hanya bisa diputar di perangkat bersertifikasi L2
    • Web app mobile penuh bug sampai hampir tidak bisa dipakai. Komentar juga sering menghilang
    • Meski begitu, Google selama ini selalu mempertahankan strategi yang berpusat pada web
    • Generasi yang menonton YouTube lewat browser masih banyak, dan alternatif seperti bilibili di Tiongkok juga ada
    • Namun generasi dengan daya beli tetap banyak yang memakai browser, jadi saya rasa Google tidak akan sepenuhnya meninggalkan pasar itu
  • 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

    • Justru bagian “penyedianya membenci kita” itulah yang terasa menjadi daya tarik proyek ini
    • Saya sendiri rasanya tidak akan sanggup memelihara yt-dlp. Terlalu menguras tenaga
  • 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

    • Sebenarnya pelanggan sejati Google adalah pengiklan. Kita hanya produk mereka
      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
    • Belakangan ini terutama pada video anak-anak, iklan yang tidak bisa dilewati semakin sering muncul
    • Biaya operasional YouTube sangat besar, jadi saya bisa memahami bahwa ad blocker mungkin memengaruhi keberlangsungan layanan
    • Pada akhirnya UX yang kacau (enshittification) sekarang malah menjadi bagian dari model bisnis itu sendiri
  • Menurut wiki yt-dlp EJS, Deno direkomendasikan karena
    ia bisa menjalankan kode dengan izin terbatas dan mengambil dependensi EJS dari npm secara remote

    • Namun sandboxing Deno tidak boleh terlalu dipercaya sebagai mekanisme keamanan. Karena isolasi di level runtime lemah,
      lebih aman menggunakan isolasi tingkat OS/VM seperti Firecracker
    • Dulu yt-dlp menafsirkan JS hanya dengan Python, tetapi karena kebutuhan runtime makin kompleks, interpreter bawaannya mulai mencapai batas