- yt-dlp में YouTube डाउनलोड को सामान्य रूप से जारी रखने के लिए जल्द ही Deno (या समर्थित JavaScript runtime) इंस्टॉल करना अनिवार्य शर्त बन जाएगा
- YouTube की ओर से हुए हालिया बदलावों के कारण built-in JavaScript "interpreter" अब JS challenge को हल नहीं कर सकता
- PyInstaller executable उपयोगकर्ताओं को सिर्फ Deno तैयार रखना होगा, जबकि PyPI package उपयोग करने पर अतिरिक्त JavaScript components इंस्टॉल करने पड़ सकते हैं
- अन्य JavaScript runtime (Node, Bun आदि) के समर्थन की संभावना खुली है, लेकिन सुरक्षा और sandboxing के लिहाज़ से फिलहाल केवल Deno उपयुक्त माना गया है
- Deno और संबंधित dependencies की इंस्टॉलेशन विधि तथा path सेट करने के लिए अलग options और guidance दिए जाने वाले हैं
yt-dlp के YouTube डाउनलोड बदलाव और नई आवश्यकताओं की घोषणा
नई आवश्यकता लाने की पृष्ठभूमि
- निकट भविष्य में YouTube डाउनलोड फीचर का सामान्य उपयोग करने के लिए Deno या किसी अन्य समर्थित JavaScript runtime को इंस्टॉल करना अनिवार्य होगा
- अब तक yt-dlp, built-in JavaScript interpreter का उपयोग करके YouTube के JS challenge को हल करता रहा है, लेकिन हाल के YouTube internal logic changes के कारण पुराना तरीका अब पर्याप्त नहीं रहा
- बदलाव इतने बड़े हैं कि yt-dlp को सामान्य रूप से काम करने के लिए अब ज़रूरी रूप से औपचारिक JavaScript runtime आधारित algorithm का इस्तेमाल करना होगा, तभी YouTube requests पास हो सकेंगी
उपयोगकर्ताओं के लिए तैयारी और प्रतिक्रिया के तरीके
- Deno (या समर्थित JS runtime) इंस्टॉल करें
- FAQ आदि के माध्यम से अतिरिक्त समर्थित runtime की जानकारी बाद में दी जाएगी
- yt-dlp को जिन कुछ JavaScript components की ज़रूरत है, उन्हें भी इंस्टॉल करना पड़ सकता है
- इंस्टॉलेशन का तरीका और yt-dlp के distribution form के अनुसार अतिरिक्त काम की ज़रूरत अलग हो सकती है
आधिकारिक वितरण के अनुसार checklist
- PyInstaller से दिए गए आधिकारिक executable (yt-dlp.exe, yt-dlp_macos, yt-dlp_linux आदि)
- केवल Deno इंस्टॉल करना होगा; अतिरिक्त components executable में पहले से शामिल हैं
- PyPI package (pip, pipx आदि)
default option dependency group के साथ yt-dlp इंस्टॉल करना और उसे latest version पर upgrade करना ज़रूरी है
- उदाहरण:
pip install -U "yt-dlp[default]"
- आधिकारिक zipimport binary (Unix के लिए yt-dlp)
- Deno को npm dependencies डाउनलोड करने देने के लिए अतिरिक्त flag जोड़ना होगा
- या Python environment में yt-dlp के लिए अलग JS solving package इंस्टॉल करना होगा (option और package name की घोषणा बाद में होगी)
- थर्ड-पार्टी packages (pacman, brew आदि)
- संबंधित distribution policy के अनुसार कदम अलग हो सकते हैं, लेकिन zipimport binary उपयोगकर्ताओं वाले workaround का उपयोग किया जा सकता है
runtime और सुरक्षा से जुड़ी चर्चा
- Node, Bun जैसे वैकल्पिक JS runtime के समर्थन की संभावना है, लेकिन इस समय ये runtime, Deno जितनी security और sandboxing features नहीं देते
- भविष्य में अन्य JS runtime का समर्थन होगा या नहीं, इस पर चर्चा जारी है; अंतिम निर्णय तक guidance Deno को आधार मानकर दी जाएगी
Deno इंस्टॉलेशन पर अतिरिक्त मार्गदर्शन
- yt-dlp की तरह ही Deno को भी GitHub से दिए गए single executable को डाउनलोड करके path में रखकर इस्तेमाल किया जा सकता है
- आगे चलकर yt-dlp में --js-runtimes option जोड़ा जाएगा, जिससे Deno executable का path सीधे बताया जा सकेगा (option name और usage बदल सकते हैं)
- Deno को curl आदि से डाउनलोड करने के बाद, यदि उसे yt-dlp executable के उसी folder में रखा जाए, तो वह सामान्य रूप से काम कर सकेगा
FAQ और अतिरिक्त जानकारी
- उपयोग किए जा रहे OS या package manager के अनुसार PATH में जोड़ना आदि ज़रूरी हो सकता है
- Linux जैसे environment में Deno अपने-आप PATH में register हो सकता है
- अतिरिक्त सवालों और इंस्टॉलेशन से जुड़े issues के लिए FAQ या community के माध्यम से सहायता दी जाएगी
अन्य community प्रतिक्रियाएँ और आगे के updates
- कुछ उपयोगकर्ता 32bit system support बंद होने की संभावना, distribution options और अन्य प्रभावों पर सवाल उठा रहे हैं
- yt-dlp development team issue filing, patches और community feedback के आधार पर बेहतर guidance और support की तैयारी कर रही है
निष्कर्ष और सारांश
- YouTube की system structure में बदलाव के कारण yt-dlp की working structure और आवश्यक specifications में बड़ा परिवर्तन आ रहा है
- सबसे अहम बदलाव यह है कि यदि आप सामान्य YouTube डाउनलोड जारी रखना चाहते हैं, तो Deno जैसे JS runtime की तैयारी अनिवार्य होगी
- आधिकारिक distribution method के अनुसार दिए गए निर्देशों पर जल्द अमल करना ज़रूरी है
- आगे भी अतिरिक्त guidance, FAQ और installation guide लगातार दी जाएँगी
1 टिप्पणियां
Hacker News टिप्पणियाँ
मैं YouTube Premium का paid subscriber हूँ। पिछले वीकेंड ट्रेन में देखने के लिए वीडियो डाउनलोड करने की कोशिश की, लेकिन iPad और iPhone दोनों पर वह “डाउनलोड की प्रतीक्षा में..” चरण पर अटका रहा। रीस्टार्ट करने से भी कुछ हल नहीं हुआ, इसलिए 1 घंटे कोशिश करने के बाद छोड़ दिया। फिर yt-dlp से वीडियो लिया, उसे USB c flash drive में डाला और देखा। जल्द ही अगर “परिवार के बीच Premium sharing limit” नीति लागू हुई, तो मैं सच में cancel करने वाला हूँ। परिवार ad-free environment का अच्छा उपयोग कर रहा है
मैं भी Premium subscriber हूँ, लेकिन iPad app में ऐसा ही issue आया। बच्चे को दिखाने के लिए वीडियो डाउनलोड करने की कोशिश करूँ तो भी एक बार में ठीक से नहीं होता। झुंझलाहट में मैंने second-hand Samsung Galaxy Tab A7 खरीदा और उस पर LineageOS custom ROM डाल दिया। 1TB sd card में अपनी सारी media रखी है और VLC से अच्छी तरह चला रहा हूँ। इसके अलावा, F-Droid store से लिया गया NewPipe, official app की तुलना में YouTube वीडियो कहीं अधिक स्थिरता से डाउनलोड कर सकता है। शुरू में सोचा था कि yt-dlp जैसी किसी चीज़ से media भरूँगा, लेकिन अब उसकी ज़रूरत नहीं रही
मैं YouTube Premium के लिए पैसे देता हूँ, लेकिन smartphone पर auto-applied translation बंद करनी पड़ती है, इसलिए ReVanced से देखता हूँ। समझ नहीं आता कि official app में user settings बदलने का विकल्प क्यों नहीं है
YouTube पर वीडियो अपलोड करने के बाद, creator dashboard से उसे डाउनलोड करने की कोशिश करें तो (जैसे live stream किया हो और local backup न रखा हो, या computer पर बोझ न डालना चाहते हों) केवल 720p low quality में ही मिलता है। वहीं yt-dlp से लेने पर highest quality मिल जाती है
ad-free environment, YouTube Kids पर काम नहीं कर रहा था (ShieldTV इस्तेमाल कर रहा था), इसलिए subscription cancel कर दी। शायद bug रहा होगा, लेकिन customer support न होने के कारण कुछ कर नहीं सका। मैं Play Music का paid subscriber था, और YouTube में forced transition के बाद यह सच में आखिरी निराशा थी
अगर आप family sharing restriction policy लागू होने की खबर का इंतज़ार कर रहे थे, तो बता दूँ कि इससे जुड़ी खबरें पहले से हैं। मुझे भी YouTube से इस बारे में email मिला था। अभी तो ad-free उपयोग कर रहा हूँ, लेकिन यह वास्तव में कब लागू होगा, पता नहीं। संबंधित लेख देख सकते हैं
yt-dlp के “JavaScript interpreter” में डाली गई engineering effort वाकई प्रभावित करती है yt-dlp jsinterp.py
यह समस्या के लिए बिल्कुल उपयुक्त approach है। बिना अतिरिक्त overhead के इसे इस स्तर तक लागू करना सच में प्रभावशाली है
इस घोषणा का सबसे छिपा हुआ मुख्य बिंदु यही है। मुझे पता ही नहीं था कि यह पहले से इतना जटिल ढाँचा बन चुका है, और यह बेहद प्रभावित करता है
यह JavaScript के केवल एक हिस्से को interpret करने का तरीका है। संबंधित HN चर्चा लिंक देख सकते हैं
मैंने code को थोड़ी देर देखा और Python की ChainMap के बारे में जाना
यह वास्तव में JavaScript का कितना हिस्सा interpret करता है, और यह 1,000 lines से भी कम code है—सोच रहा हूँ कि क्या इसे compiler intro class में इस्तेमाल किया जा सकता है
मैं 30 साल से अधिक समय से digital media इकट्ठा करने वाला एक “digital hoarder” हूँ। VHS, DVD जैसी physical media नहीं है, सब कुछ digital रूप में रखा है। कुछ दुर्लभ या गायब हो सकने वाली सामग्री भी है। “घर में Netflix की तरह चलने” वाले मेरे system में मेरी पत्नी की भी रुचि बढ़ी, और उसने ad-free viewing का आनंद लिया। मुझे कभी नहीं लगा कि मैं कोई खास इंसान हूँ; लगा कि सब लोग streaming ही इस्तेमाल करेंगे। वर्षों से मैं आसपास के लोगों से कहता आया हूँ, “अगर मेरी media collection में तुम्हारा पसंदीदा कार्यक्रम हो, तो बता देना।” पिछले 2 वर्षों में परिवार और दोस्तों ने मेरे Jellyfin server की access माँगी या अपने TV के नीचे छोटा server बनाने को कहा। हाल में मैंने Jellyfin में YouTube channel archiving भी जोड़ दी है, और हर channel के लिए directory और yt-dlp command का उपयोग करके वीडियो अपने आप ले आता हूँ। बस, मेरे मनचाहे h264 codec में डाउनलोड नहीं होता, इसलिए re-encode करना पड़ता है। YouTube वीडियो AV1 codec में मिलते हैं, लेकिन मेरा smart TV अभी इस codec को support नहीं करता, इसलिए खुद encode करता हूँ
पहले मैं एक simple script चलाता था, लेकिन अब ytdltt ytdltt GitHub को Telegram bot के ज़रिए इस्तेमाल करता हूँ, ताकि जब माँ को audiobook जैसी YouTube वीडियो चाहिए हों, तो उन्हें directory के हिसाब से व्यवस्थित करके डाउनलोड कर सकूँ और Jellyfin से access दे सकूँ। माँ ने 3 साल में लगभग 1.2TB audiobooks जमा की हैं
इसी तरह के उपयोग के लिए tubesync भी आज़माने लायक है
अगर h264 content डाउनलोड नहीं हो रहा, तो yt-dlp docs मुझे कठिन लगे थे, लेकिन अभी जो तरीका काम कर रहा है वह कुछ ऐसा है
yt-dlp -f "bestvideo[width<800][vcodec~='^(avc|h264)']+bestaudio[acodec~='^((mp|aa))']"हाल में मुझे Pinchflat Pinchflat GitHub के बारे में पता चला, और यह *arr style का web alternative है जो backend में yt-dlp का उपयोग करता है। जिसे डाउनलोड करना हो, उसे playlist में जोड़ दो, यह अपने आप ले आता है
सोच रहा हूँ कि क्या bot detection से बचने के लिए cookie registration जैसी चीज़ें ज़रूरी हैं, और क्या VPN भी चाहिए
अब web से बस आसानी से data ले आने का दौर खत्म हो गया है; अब वह दौर है जहाँ हज़ारों lines के obfuscated JavaScript को चलाना पड़ता है। पहले 1kb json file आसानी से लेकर cache की जा सकती थी, लेकिन अब पूरे browser को चलाकर 100 requests में 10MB data भेजना-लेना पड़ता है, जिससे analysis environment और security profile दोनों बिगड़ जाते हैं। यह सबके लिए नुकसान है
सकारात्मक नज़रिये से देखें, तो ऐसे असुविधाजनक माहौल ने 10,000 scraping companies के लिए मौका बनाया है कि वे 10MB कचरा scrape करके उसे ठीक-ठाक API के रूप में पेश करें। लेकिन अब website content की quality भी गिर रही है, इसलिए ऐसे मुद्दे धीरे-धीरे कम महत्वपूर्ण होते जा रहे हैं
अब web के जटिल होने से scraping-anti-scraping-bypass का खेल अंतहीन चक्र जैसा हो गया है। लेकिन AI/LLMs के आने से (भले लागत ज़्यादा हो) किसी भी जानकारी को निकाला जा सकता है। जल्द ही LLM हर captcha भी पार कर लेगा। शायद वह समय आ रहा है जब “analog hole” हमेशा खुला रहेगा। सिर्फ camera और microphone से screen और audio की ओर इशारा कर दो, AI उसे इंसानों से बेहतर समझ सकेगा
शुक्र है कि yt-dlp जैसे छोटे पैमाने की scraping पहले से आसान हो गई है। 1-2 घंटे लगाकर headless Firefox और mitmproxy से आसानी से script बनाई जा सकती है, और जब तक मैं बड़े पैमाने पर कई VPS चलाकर पूरी website scrape नहीं कर रहा, तब तक अपनी मनचाही content को बिना दिक्कत archive कर सकता हूँ। Cloudflare भी कम मात्रा वाले सामान्य users को block नहीं करता। आधुनिक browser automation आसान है, इसलिए single user के लिए site SPA हो तब भी scraping आसान है। captcha भी छोटे पैमाने पर खुद हल किया जा सकता है। हाल में मैं captcha आने पर Discord notification लेता हूँ, laptop पर हल करता हूँ और scraping जारी रहने देता हूँ। मैंने पैसे देकर खरीदे webtoon को “World Garden” app के नियंत्रण में छोड़ना पसंद नहीं किया, इसलिए लगता है कि अपने data पर नियंत्रण मेरा होना चाहिए
1kb json भी असल में modern web में MB स्तर के JavaScript के बिना नहीं चलता; वही data दिखाने के लिए ज़रूरी होता है। मुझे तो बस 10-20kb HTML, थोड़ी CSS और image files चाहिए। वीडियो भी सीधे mp4 में डाउनलोड हो जाए तो बात खत्म। यह simple और efficient है, लेकिन अगर कुछ बेचना है तो बात अलग हो जाती है
इस सारी जटिलता का कारण सिर्फ अधिक ads बेचना है
Nsig/sig - API call में ज़रूर शामिल किया जाने वाला special token। यह base.js (player code) में बनता है, इसलिए yt-dlp जैसे third-party clients को इसे bypass करके निकालना पड़ता है। पहले regex वगैरह से code का हिस्सा निकालकर token मिल जाता था, लेकिन अब code इतना बिखरा हुआ है कि token पाने के लिए पूरा base.js चलाना पड़ता है
PoToken - origin proof token, जिसे हाल में Google ने और कड़ा किया है। इसके बिना 403 error आता है। Android पर DroidGuard, iOS पर app के लिए built-in module, और web पर JS code (challenge) चलाना पड़ता है। पहले इसे external tools से issue कराना पड़ता था, लेकिन yt-dlp के Deno-based update से जल्द ही built-in support आने का संकेत है
SABR - server-side adaptive bitrate streaming technology, जो Google के UMP protocol के साथ उपयोग होती है, और server playback position/buffer स्थिति लेकर buffering optimization से लेकर ad insertion तक नियंत्रित करता है। third-party clients का support अभी काम में है
Nsig/sig extraction examples:
PoToken guide:
SABR:
(अतिरिक्त code examples और guide links update)
अब समझ में आता है कि Google और Cloudflare web को केवल कुछ signed और integrity-verified browsers तक सीमित क्यों करना चाहते हैं
web के PoToken के बारे में सोच रहा हूँ कि सिर्फ JS snippet चलाने से यह कैसे साबित होता है कि आप bot नहीं हैं। अगर यह सिर्फ client JS है, तो क्या यह headless Chromium में भी नहीं चलेगा?
Google ने इसे अभी-अभी लागू किया, और bypass methods पहले से सामने आने लगीं। सच यही है कि अगर कोई बड़ी कंपनी client को content दे रही है, तो अंततः bypass संभव है। इसलिए वे सब एक बंद proprietary ecosystem बनाना चाहते हैं—ताकि ads अंत तक दिखा सकें या usage fee ले सकें
कुछ समय पहले HN पर एक बात आई थी कि YouTube चाहता है कि download tools चलते रहें संबंधित लेख1 संबंधित लेख2। YouTube दुनिया भर के 3 अरब users वाली global service चलाता है, और ऐसा लगता है कि वह downloads को पूरी तरह block नहीं करता, बस हमेशा “उचित स्तर” तक रोकता है। मुझे लगता है कि अगर दुनिया भर के users सभी latest iPhone या Android इस्तेमाल कर रहे होते, तो वह तुरंत DRM लगा देता
yt-dlp पुराने smart TV के लिए बने API का उपयोग करता है। इन devices को अब software updates नहीं मिलते, इसलिए अगर यह traffic गायब हो गया तो यह functionality भी खत्म हो सकती है
मुझे बिल्कुल तर्कसंगत नहीं लगता कि कोई content platform अपनी revenue model को नुकसान पहुँचाते हुए download support करना चाहेगा—यह conspiracy theory जैसी बात है
YouTube player और page इतने भारी हो गए हैं कि पुराने PC पर उल्टा और धीमे चलते हैं। हाल में मैंने “watch?v=” को “/embed/” में बदलकर 480p में देखा, और वही वीडियो डाउनलोड करके देखें तो CPU usage केवल लगभग 3% रहता है। लेकिन अब यह भी धीरे-धीरे कम काम करने लगा है। दूसरी ओर, कुछ दूसरी sites (जैसे porn sites) experience optimization पर ध्यान देती हैं, और download tools को block करने में खास दिलचस्पी नहीं दिखातीं
वीडियो (सामान्य)
वीडियो (एम्बेड)
GitHub भी उतना ही unoptimized है, यहाँ तक कि i5 8th gen PC पर भी लगभग इस्तेमाल लायक नहीं लगता। इसलिए मैं snapshot लेकर offline देखता हूँ
आजकल YouTube के performance issues की वजह यह है कि सबको latest भारी codecs इस्तेमाल करने पर मजबूर किया जा रहा है। मेरा laptop 4K h264 वीडियो बिना दिक्कत चला लेता है, लेकिन सिर्फ 720p YouTube वीडियो देखते ही गर्म होकर lag करने लगता है। browser extension h264ify से कुछ codecs को block किया जा सकता है, लेकिन अफसोस है कि इस basic behavior को खुद नियंत्रित नहीं किया जा सकता। बस वीडियो डाउनलोड करके देखना ज्यादा आसान और स्थिर है
यह सिर्फ मेरे साथ नहीं है। 2025 की पहली तिमाही में मैं embedded player से देखता था, लेकिन तीसरी तिमाही तक Google ने embedded player को जानबूझकर block कर दिया। अभी YouTube तक पहुँचने का तरीका सिर्फ yt-dlp ही रह गया है। yt-dlp और उसके developers अमर रहें
मैं YouTube छोड़कर PeerTube/peer-based platforms पर जाने की सोच रहा हूँ
रिपोर्ट है कि QuickJS (lightweight JS interpreter) इतना धीमा है कि हर वीडियो पर 20 मिनट से ज़्यादा लग जाते हैं। Deno कहीं ज़्यादा तेज़ है—सोच रहा हूँ कि अंतर इतना बड़ा कैसे हो सकता है
(संदर्भ issue#14404 / reply)
QuickJS bytecode-based interpreter है (Python की तरह धीमा), जो simplicity और stability को प्राथमिकता देता है। दूसरी ओर Deno, Chrome स्तर के efficient JIT compiler का उपयोग करता है, और इसी कारण खास code स्थितियों में execution speed का अंतर 20x से भी अधिक हो सकता है। QuickJIT (QuickJS का fork, जिसमें TCC से JIT जोड़ा गया है) Deno जितना तेज़ न हो, फिर भी सुधार की संभावना है
performance का इतना नाटकीय रूप से गिरना थोड़ा डरावना है; ऐसा भी लगता है कि Google ने जानबूझकर इसे दूसरे interpreters पर धीमा बनाया हो
दिलचस्प बात है। Minecraft (Bedrock, modding use) में QuickJS इस्तेमाल होता है, और वह V8 से धीमा तो है, लेकिन इतना ज़्यादा अंतर नहीं लगता
अब साफ संकेत हैं कि आसान ripping का दौर खत्म होने वाला है। अगर कोई YT वीडियो long-term preserve करना है, तो अभी tubearchivist जैसी चीज़ लगाकर backup कर लेना चाहिए
pinchflat Pinchflat GitHub भी एक recommended alternative है। यह tubearchivist जितना polished नहीं है, लेकिन मेरे अनुभव में bugs कम हैं
YT ने market dominance से जो मूल्यवान cultural और educational assets जमा किए हैं, उन्हें बचाकर रखने का शायद यही आखिरी मौका है। tubearchivist दिलचस्प लगता है, लेकिन setup और maintenance काफी झंझट भरे लगते हैं। ऊपर से इसका दृष्टिकोण पूरे subscribed channels को डाउनलोड करने का है। मेरे लिए तो बस इतना काफी है कि डाउनलोड किए गए folders हों, और कोई बहुत हल्का local webserver video names को समझकर link pages बना दे। अगर कुछ clicks में install होने वाला कोई ultra-light alternative हो, तो बताइए
YouTube Movies के लिए DRM solution पहले से लगा हुआ है; सोचता हूँ कि अभी तक इसे सभी channels पर क्यों नहीं लागू किया गया
Deno का चयन थोड़ा चौंकाने वाला था, लेकिन Deno को single executable के रूप में distribute करना आसान है, जिससे installation issues कम होते हैं। Python-based interpreter एक अद्भुत hack था, लेकिन उसकी सीमाएँ थीं, और यह विषय पुराने Youtube-dl project में भी पहले चर्चा में आ चुका है पुरानी HN चर्चा
Node में Deno जैसी security और isolation features नहीं हैं। उसी thread में maintainer की राय भी देखी जा सकती है
Deno की sandbox feature भी इसे चुनने का एक अहम कारण है। 100% भरोसेमंद न सही, लेकिन कुछ न होने से बेहतर है
yt-dlp सिर्फ YouTube ही नहीं, बल्कि कई दूसरे (कभी-कभी risky) video streaming sites को भी support करता है। इसलिए browser जैसे कम-से-कम sandboxing की ज़रूरत है। design के हिसाब से इसे untrusted code चलाना ही पड़ता है, इसलिए basic security सुनिश्चित करनी चाहिए