27 คะแนน โดย GN⁺ 2025-09-25 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เพื่อให้ยังคง ใช้งานการดาวน์โหลด YouTube ได้ตามปกติ ใน yt-dlp ต่อไป ในเร็ว ๆ นี้จะมีการเปลี่ยนให้ต้องติดตั้ง Deno (หรือ JavaScript runtime ที่รองรับ) เป็นเงื่อนไขบังคับ
  • เนื่องจาก การเปลี่ยนแปลงล่าสุด ฝั่ง YouTube ทำให้ไม่สามารถ แก้ JS challenge ได้อีกต่อไป ด้วย JavaScript "interpreter" ที่ฝังมาในตัวเพียงอย่างเดียว
  • ผู้ใช้ไฟล์รันแบบ PyInstaller เพียงเตรียม Deno ก็พอ ส่วน การใช้งานแพ็กเกจจาก PyPI จะต้องติดตั้ง JavaScript component เพิ่มเติม
  • แม้จะเปิดโอกาสรองรับ JavaScript runtime อื่น ๆ (เช่น Node, Bun) แต่ในด้าน ความปลอดภัยและ sandboxing มีเพียง Deno ที่เหมาะสม
  • จะมีการจัดเตรียม ตัวเลือกและคำแนะนำแยกต่างหาก สำหรับวิธีติดตั้ง Deno และ dependency ที่เกี่ยวข้อง รวมถึงการระบุพาธ

ประกาศการเปลี่ยนแปลงการดาวน์โหลด YouTube ของ yt-dlp และข้อกำหนดใหม่

ที่มาของการเพิ่มข้อกำหนดใหม่

  • ในอนาคตอันใกล้ หากต้องการ ใช้งานฟังก์ชันดาวน์โหลด YouTube ได้ตามปกติ จะจำเป็นต้องติดตั้ง Deno หรือ JavaScript runtime อื่นที่รองรับ
  • ก่อนหน้านี้ yt-dlp ใช้ JavaScript interpreter ที่ฝังมาในตัว เพื่อแก้ JS challenge ของ YouTube แต่จาก การเปลี่ยนแปลงของตรรกะภายใน YouTube เมื่อไม่นานมานี้ วิธีเดิมไม่สามารถรับมือได้อีกต่อไป
  • เนื่องจากขอบเขตของการเปลี่ยนแปลงมีขนาดใหญ่มาก เพื่อให้ทำงานได้ตามปกติ yt-dlp จำเป็นต้องใช้อัลกอริทึมที่ทำงานบน JavaScript runtime แบบเต็มรูปแบบ จึงจะสามารถผ่านคำขอไปยัง YouTube ได้

วิธีเตรียมตัวและการรับมือสำหรับผู้ใช้แต่ละแบบ

  • ติดตั้ง Deno (หรือ JS runtime ที่รองรับ)
    • จะมีการแจ้ง runtime อื่นที่รองรับเพิ่มเติมผ่าน FAQ เป็นต้น
  • อาจจำเป็นต้องติดตั้ง JavaScript component บางส่วนที่ yt-dlp ต้องใช้
    • ความจำเป็นของขั้นตอนเพิ่มเติมจะแตกต่างกันไปตามวิธีติดตั้งและรูปแบบการแจกจ่ายของ yt-dlp

เช็กลิสต์ตามรูปแบบการแจกจ่ายอย่างเป็นทางการ

  • ไฟล์รันอย่างเป็นทางการที่แจกจ่ายผ่าน PyInstaller (yt-dlp.exe, yt-dlp_macos, yt-dlp_linux ฯลฯ)
    • เพียงติดตั้ง Deno ก็เพียงพอ โดย component เพิ่มเติมถูกรวมมาในไฟล์รันแล้ว
  • แพ็กเกจ PyPI (pip, pipx ฯลฯ)
    • ต้องติดตั้ง yt-dlp พร้อม dependency group ตัวเลือก default และอัปเกรดเป็นเวอร์ชันล่าสุด
    • ตัวอย่าง: pip install -U "yt-dlp[default]"
  • ไบนารี zipimport อย่างเป็นทางการ (yt-dlp สำหรับ Unix)
    • จำเป็นต้องเพิ่มแฟลกเพื่อให้ Deno ดาวน์โหลด npm dependency
    • หรืออาจต้องติดตั้งแพ็กเกจสำหรับ JS solving ของ yt-dlp แยกต่างหากในสภาพแวดล้อม Python (จะประกาศตัวเลือกและชื่อแพ็กเกจภายหลัง)
  • แพ็กเกจจากบุคคลที่สาม (pacman, brew ฯลฯ)
    • วิธีดำเนินการอาจต่างกันไปตามนโยบายของแต่ละดิสทริบิวชัน แต่สามารถใช้แนวทางเดียวกับผู้ใช้ไบนารี zipimport ได้

ประเด็นเรื่อง runtime และความปลอดภัย

  • แม้จะมีความเป็นไปได้ในการรองรับ JS runtime ทางเลือกอย่าง Node, Bun เป็นต้น แต่ ณ ตอนนี้ runtime เหล่านี้ยังไม่มี ความสามารถด้านความปลอดภัยและ sandboxing เทียบเท่า Deno
  • ขณะนี้ยังอยู่ระหว่างการหารือว่าจะรองรับ JS runtime อื่นเพิ่มเติมหรือไม่ และจนกว่าจะมีข้อสรุปสุดท้าย จะอ้างอิง Deno เป็นหลัก ในคำแนะนำ

คำแนะนำเพิ่มเติมเกี่ยวกับการติดตั้ง Deno

  • เช่นเดียวกับ yt-dlp นั้น Deno สามารถใช้งานได้เพียงดาวน์โหลดไฟล์รันเดี่ยวจาก GitHub แล้ววางไว้ในพาธ
  • ภายหลังมีแผนเพิ่ม ตัวเลือก --js-runtimes ใน yt-dlp เพื่อให้สามารถระบุพาธของไฟล์รัน Deno ได้ (ชื่อออปชันและวิธีใช้อาจเปลี่ยนแปลงได้)
  • หากดาวน์โหลด Deno ผ่าน Curl เป็นต้น แล้วนำไปวางไว้ใน โฟลเดอร์เดียวกับไฟล์รัน yt-dlp ก็จะสามารถทำงานได้ตามปกติ

FAQ และคำแนะนำเพิ่มเติม

  • อาจต้องมีการ เพิ่ม PATH เป็นต้น ทั้งนี้ขึ้นอยู่กับ OS หรือ package manager ที่ใช้งาน
  • ในบางสภาพแวดล้อม เช่น Linux อาจมีการลงทะเบียน Deno ลงใน PATH โดยอัตโนมัติ
  • คำถามเพิ่มเติมและปัญหาเกี่ยวกับการติดตั้งจะมีการรองรับผ่าน FAQ หรือคอมมูนิตี้

ปฏิกิริยาจากคอมมูนิตี้และอัปเดตในอนาคต

  • ผู้ใช้บางส่วนกำลังสอบถามถึงผลกระทบในวงกว้าง เช่น การยุติรองรับ ระบบ 32 บิต ตัวเลือกในการแจกจ่าย และประเด็นอื่น ๆ
  • ทีมพัฒนา yt-dlp กำลังเตรียมแนวทางคำแนะนำและการสนับสนุนที่ดียิ่งขึ้น โดยอาศัยการ รายงาน issue, patch และฟีดแบ็กจากคอมมูนิตี้

บทสรุปและสรุปย่อ

  • จากการเปลี่ยนแปลงโครงสร้างระบบของ YouTube ทำให้ โครงสร้างการทำงานและข้อกำหนดของ yt-dlp เปลี่ยนไปอย่างมาก
  • การเปลี่ยนแปลงสำคัญคือ หากต้องการ ใช้งานการดาวน์โหลด YouTube ได้ตามปกติ จำเป็นต้องเตรียม JS runtime อย่าง Deno
  • ควรดำเนินการตามคำแนะนำของรูปแบบการแจกจ่ายอย่างเป็นทางการแต่ละแบบโดยเร็ว
  • จะมีคำแนะนำเพิ่มเติม FAQ และคู่มือการติดตั้งออกมาอย่างต่อเนื่อง

1 ความคิดเห็น

 
GN⁺ 2025-09-25
ความคิดเห็นบน Hacker News
  • ฉันเป็นสมาชิกจ่ายเงินของ YouTube Premium เมื่อสุดสัปดาห์ก่อนพยายามดาวน์โหลดวิดีโอบนรถไฟไว้ดู แต่ทั้งบน iPad และ iPhone มันค้างอยู่ที่ขั้น “กำลังรอดาวน์โหลด..” รีสตาร์ตก็ไม่ช่วย พยายามอยู่ชั่วโมงหนึ่งแล้วก็ยอมแพ้ สุดท้ายใช้ yt-dlp ดาวน์โหลดวิดีโอ แล้วย้ายไปแฟลชไดรฟ์ USB c เพื่อดูแทน ถ้าอีกไม่นานมีนโยบาย “จำกัดการแชร์ Premium ในครอบครัว” จริง ตอนนั้นฉันคงยกเลิกแน่นอน เพราะครอบครัวก็ใช้งานแบบไม่มีโฆษณากันได้ดีอยู่

    • ฉันก็เป็นสมาชิก Premium เหมือนกัน แต่เจอปัญหาคล้ายกันในแอป iPad พยายามดาวน์โหลดวิดีโอให้ลูกดู แต่ก็ไม่เคยทำงานดีในครั้งเดียว ด้วยความหงุดหงิดเลยไปซื้อ Samsung Galaxy Tab A7 มือสอง แล้วแฟลช custom ROM เป็น LineageOS ตอนนี้ใส่มีเดียทุกอย่างที่ต้องการไว้ใน sd card 1TB แล้วเปิดด้วย VLC ได้สบาย ๆ เพิ่มเติมคือ NewPipe ที่ได้มาจาก F-Droid store ดาวน์โหลดวิดีโอ YouTube ได้เสถียรกว่าแอปทางการมาก เดิมทีฉันตั้งใจจะใช้พวก yt-dlp มาช่วยเติมมีเดีย แต่ตอนนี้ไม่จำเป็นแล้ว

    • ฉันจ่าย YouTube Premium อยู่ แต่บนสมาร์ตโฟนต้องใช้ ReVanced เพราะอยากปิดการใช้คำแปลอัตโนมัติ ไม่เข้าใจเลยว่าทำไมแอปทางการถึงไม่ให้ผู้ใช้เปลี่ยนค่าตรงนี้ได้

    • ถ้าอัปโหลดวิดีโอขึ้น YouTube แล้วพยายามดาวน์โหลดจาก creator dashboard เอง (เช่น ตอนทำไลฟ์สตรีมแล้วไม่ได้เก็บแบ็กอัปไว้ในเครื่อง หรือคอมพิวเตอร์ทำงานหนักเกินไป) จะโหลดได้แค่คุณภาพต่ำ 720p แต่ถ้าใช้ yt-dlp จะได้คุณภาพสูงสุด

    • ฉันยกเลิกการสมัครเพราะโหมดไม่มีโฆษณาไม่ทำงานใน YouTube Kids (ใช้งานบน ShieldTV) น่าจะเป็นบั๊ก แต่ไม่มีฝ่ายซัพพอร์ตให้ติดต่อเลยทำอะไรไม่ได้ เดิมทีฉันสมัคร Play Music แบบเสียเงินอยู่ แล้วโดนบังคับย้ายมา YouTube นี่เลยกลายเป็นความผิดหวังครั้งสุดท้ายจริง ๆ

    • ถ้าคุณกำลังรอข่าวนโยบายจำกัดการแชร์แบบครอบครัว ก็ขอบอกว่ามีข่าวเกี่ยวกับเรื่องนี้ออกมาแล้ว ฉันเองก็ได้รับอีเมลจาก YouTube เกี่ยวกับเรื่องนี้เหมือนกัน ตอนนี้ยังใช้งานแบบไม่มีโฆษณาอยู่ แต่ไม่รู้ว่าจะบังคับใช้จริงเมื่อไร ดู บทความที่เกี่ยวข้อง ได้

  • ฉันทึ่งกับความพยายามทางวิศวกรรมที่ใส่ลงไปใน “JavaScript interpreter” ของ yt-dlp yt-dlp jsinterp.py

    • นี่เป็นแนวทางที่ตรงกับปัญหามาก ประทับใจจริง ๆ ที่ทำได้ถึงระดับนี้โดยไม่มี overhead เพิ่มเติมมากมาย

    • ประเด็นนี้ต่างหากที่เป็นหัวใจสำคัญแบบซ่อนอยู่ของประกาศครั้งนี้ ไม่รู้มาก่อนเลยว่ามันกลายเป็นโครงสร้างที่ซับซ้อนถึงขนาดนี้ น่าทึ่งมาก

    • มันเป็นวิธีตีความแค่บางส่วนของ JavaScript ดูการคุยใน HN ที่เกี่ยวข้องได้ที่ลิงก์

    • ลองเปิดโค้ดดูแวบหนึ่งแล้วได้รู้จัก ChainMap ของ Python

    • สงสัยว่าจริง ๆ แล้วมันตีความ JavaScript ไปได้มากแค่ไหน และเมื่อโค้ดมีไม่ถึง 1,000 บรรทัด จะเอาไปใช้ในคลาส intro compiler ได้ไหม

  • ฉันเป็น “digital hoarder” ที่สะสมสื่อดิจิทัลมานานกว่า 30 ปี ไม่มีสื่อกายภาพอย่าง VHS หรือ DVD เลย เก็บทุกอย่างแบบดิจิทัลทั้งหมด มีของหายากหรือของที่อาจหายไปจากโลกนี้อยู่บ้าง ภรรยาฉันก็เริ่มสนใจระบบที่ฉันทำไว้แบบ “รัน Netflix เองที่บ้าน” และชอบการดูแบบไม่มีโฆษณา ฉันไม่เคยคิดว่าตัวเองพิเศษอะไร และคิดว่าทุกคนก็คงใช้สตรีมมิงกันหมด หลายปีมานี้ฉันมักบอกคนรอบตัวว่า “ถ้ามีรายการที่ชอบอยู่ในมีเดียที่ฉันมี ก็บอกมาได้” ช่วง 2 ปีหลังมานี้ ครอบครัวกับเพื่อนเริ่มอยากเข้าถึงเซิร์ฟเวอร์ Jellyfin ของฉัน หรือขอให้ช่วยตั้งเซิร์ฟเวอร์เล็ก ๆ ไว้ใต้ทีวีของพวกเขาเอง ไม่นานมานี้ฉันยังเพิ่มการทำ archive ช่อง YouTube ลงใน Jellyfin ด้วย โดยใช้ไดเรกทอรีแยกแต่ละช่องและคำสั่ง yt-dlp เพื่อดึงวิดีโออัตโนมัติ แต่ยังดาวน์โหลดด้วย codec h264 ที่ต้องการไม่ได้ เลยต้อง re-encode เอง วิดีโอ YouTube ถูกปล่อยมาใน codec AV1 แต่สมาร์ตทีวีของฉันยังไม่รองรับ เลยต้องเข้ารหัสใหม่เอง

    • เมื่อก่อนฉันใช้สคริปต์ง่าย ๆ แต่ตอนนี้ใช้ ytdltt GitHub ของ ytdltt ผ่าน Telegram bot เพื่อให้แม่สามารถขอวิดีโอ YouTube อย่างพวกหนังสือเสียง แล้วให้มันดาวน์โหลดแยกตามไดเรกทอรีและเปิดผ่าน Jellyfin ได้ ตอนนี้หนังสือเสียงที่แม่สะสมมา 3 ปีมีประมาณ 1.2TB

    • สำหรับจุดประสงค์คล้ายกัน tubesync ก็น่าลองเหมือนกัน

    • ถ้าดาวน์โหลดคอนเทนต์ h264 ไม่ได้ เอกสารของ yt-dlp อาจดูยาก แต่ตอนนี้วิธีที่ใช้ได้ดีเป็นแบบนี้
      yt-dlp -f "bestvideo[width<800][vcodec~='^(avc|h264)']+bestaudio[acodec~='^((mp|aa))']"

    • ไม่นานมานี้ฉันเพิ่งรู้จัก Pinchflat GitHub ของ Pinchflat ซึ่งเป็นทางเลือกแบบเว็บสไตล์ *arr ที่ใช้ yt-dlp เป็น backend แค่เพิ่มวิดีโอที่อยากดาวน์โหลดเข้า playlist มันก็จะดึงให้เองอัตโนมัติ

    • สงสัยว่าต้องหลบการตรวจจับบอตด้วยการใส่คุกกี้หรือเปล่า และต้องใช้ VPN ด้วยไหม

  • ตอนนี้ยุคที่ดึงข้อมูลจากเว็บได้แบบง่าย ๆ จบไปแล้ว กลายเป็นยุคที่ต้องรัน JavaScript แบบ obfuscated หลายพันบรรทัดแทน เมื่อก่อนดึงไฟล์ json ขนาด 1kb มา cache ได้ง่าย ๆ แต่ตอนนี้ต้องรันทั้งเบราว์เซอร์เพื่อแลกข้อมูล 10MB ผ่าน 100 คำขอ ทำให้ทั้งสภาพแวดล้อมการวิเคราะห์และโปรไฟล์ความปลอดภัยเละเทะ เป็นผลเสียกับทุกคน

    • มองในแง่ดีก็คือ สภาพแวดล้อมที่ยุ่งยากแบบนี้เปิดโอกาสธุรกิจให้บริษัท scraping 10,000 แห่งไปขูดขยะ 10MB แล้วทำเป็น API ดี ๆ มาขายได้ แต่ตอนนี้คุณภาพคอนเทนต์ของเว็บไซต์ก็แย่ลงด้วย จนประเด็นพวกนี้เริ่มสำคัญน้อยลงเรื่อย ๆ

    • ตอนนี้เว็บซับซ้อนขึ้นจนเหมือนเกมวนลูปไม่รู้จบของการ scrape-ป้องกัน-หลบเลี่ยง แต่พอมี AI/LLMs เข้ามา ก็กลายเป็นว่าแม้จะมีต้นทุนสูงขึ้น ก็สามารถดึงข้อมูลอะไรก็ได้ออกมาได้ ในไม่ช้า LLM ก็น่าจะผ่าน captcha ได้ทั้งหมด มันอาจเป็นช่วงเวลาที่ “analog hole” เปิดอยู่ตลอดก็ได้ แค่เอากล้องกับไมค์ไปจ่อหน้าจอและเสียง AI ก็อาจตีความได้ดีกว่ามนุษย์แล้ว

    • โชคดีที่การ scrape ขนาดเล็กแบบ yt-dlp ยังง่ายกว่าที่เคย แค่ลงทุนสักหนึ่งหรือสองชั่วโมง ก็ใช้ headless Firefox กับ mitmproxy ทำสคริปต์ได้สบาย ๆ และตราบใดที่ไม่ได้เอา VPS หลายตัวมารัน scrape ทั้งเว็บไซต์ในระดับใหญ่ การ archive คอนเทนต์ที่ฉันต้องการก็ยังทำได้ไม่มีปัญหา Cloudflare เองก็ไม่ได้บล็อกผู้ใช้ทั่วไปที่ใช้ปริมาณต่ำ เบราว์เซอร์อัตโนมัติสมัยนี้ก็ใช้ง่ายมาก ต่อให้เป็นเว็บแบบ SPA ผู้ใช้คนเดียวก็ scrape ได้ไม่ยาก captcha ถ้ามีในระดับเล็กก็ยังแก้เองได้ ฉันเองช่วงหลังก็ตั้งให้ถ้ามี captcha โผล่มาจะส่งแจ้งเตือนผ่าน Discord แล้วฉันค่อยมาแก้บนโน้ตบุ๊ก จากนั้นก็ scrape ต่อ เพราะแอป “Woldeu Gadeun” พยายามควบคุมเว็บตูนที่ฉันซื้อแบบเสียเงินไว้ เลยคิดว่าข้อมูลของฉันก็ควรเป็นสิ่งที่ฉันควบคุมเอง

    • จริง ๆ แล้วแม้แต่ json 1kb บนเว็บสมัยใหม่ก็มักต้องโหลด JavaScript ระดับ MB มารันก่อนถึงจะแสดงข้อมูลที่ต้องการได้ สิ่งที่ฉันอยากได้จริง ๆ ก็แค่ HTML 10-20kb กับ CSS นิดหน่อย และไฟล์ภาพเท่านั้นเอง วิดีโอก็ดาวน์โหลดเป็น mp4 ตรง ๆ จบ เรียบง่ายและมีประสิทธิภาพ แต่ถ้าจะขายอะไรสักอย่าง เรื่องมันก็เปลี่ยนไป

    • เหตุผลของความซับซ้อนพวกนี้ทั้งหมดก็เพื่อขายโฆษณาให้ได้มากขึ้น

  • Nsig/sig - เป็นโทเคนพิเศษที่ต้องแนบมากับการเรียก API สร้างจาก base.js (โค้ดของ player) และไคลเอนต์ภายนอกอย่าง yt-dlp ต้องดึงออกมาแบบอ้อม ๆ เพื่อใช้งาน แต่ก่อนใช้วิธีอย่าง regex ดึงบางส่วนของโค้ดเพื่อเอาโทเคนได้ ตอนนี้โค้ดถูกกระจายจนต้องรัน base.js ทั้งไฟล์เพื่อให้ได้โทเคน
    PoToken - เป็น token สำหรับ proof-of-origin ที่ Google เพิ่งเสริมความเข้มงวด ถ้าไม่มีจะเจอ error 403 บน Android ใช้ DroidGuard, บน iOS ใช้โมดูลฝังในแอป, และบนเว็บต้องรันโค้ด JS (challenge) เมื่อก่อนต้องออกโทเคนด้วยเครื่องมือภายนอก แต่มีประกาศว่าอีกไม่นานจะฝังใน yt-dlp ได้จากการอัปเดตที่ใช้ Deno
    SABR - เทคโนโลยี server-side adaptive bitrate streaming ใช้งานคู่กับโปรโตคอล UMP ของ Google โดยเซิร์ฟเวอร์จะรับตำแหน่งการเล่น/สถานะบัฟเฟอร์ แล้วควบคุมทั้งการบัฟเฟอร์ที่เหมาะสมและการแทรกโฆษณา การรองรับจากไคลเอนต์ภายนอกยังอยู่ระหว่างพัฒนา
    ตัวอย่างการดึง Nsig/sig:

    • ตอนนี้ก็เข้าใจแล้วว่าทำไม Google กับ Cloudflare ถึงอยากจำกัดเว็บให้เหลือแค่เบราว์เซอร์ไม่กี่ตัวที่มีการเซ็นและตรวจสอบความสมบูรณ์ได้

    • เรื่อง PoToken บนเว็บนี่ ฉันสงสัยว่าแค่รัน JS snippet แล้วมันพิสูจน์ได้อย่างไรว่าตัวนั้นไม่ใช่บอต ถ้าเป็นแค่ client-side JS ปกติ มันก็น่าจะทำงานบน headless Chromium ได้ไม่ใช่หรือ

    • Google เพิ่งเริ่มบังคับใช้ แต่ก็มีวิธีหลบออกมาแล้ว จริง ๆ ต่อให้เป็นบริษัทยักษ์ใหญ่ ถ้าส่งคอนเทนต์ไปถึงฝั่งไคลเอนต์ สุดท้ายก็เลี่ยงได้อยู่ดี เพราะงั้นพวกเขาจึงอยากสร้างระบบนิเวศปิดแบบผูกขาดทั้งหมด เพื่อจะได้บังคับให้ดูโฆษณาจนจบหรือเก็บค่าบริการได้

  • ไม่นานก่อนหน้านี้มีโพสต์ใน HN ที่อ้างว่า YouTube อยากให้เครื่องมือดาวน์โหลดใช้งานได้ด้วย โพสต์ที่เกี่ยวข้อง 1 โพสต์ที่เกี่ยวข้อง 2 YouTube ให้บริการระดับโลกกับผู้ใช้ 3 พันล้านคนทั่วโลก แต่กลับให้ความรู้สึกว่าไม่ได้พยายามบล็อกการดาวน์โหลดให้สิ้นซาก แค่ “ขัดขวางพอประมาณ” เท่านั้น ฉันคิดว่าถ้าผู้ใช้ทั่วโลกใช้ iPhone หรือ Android รุ่นใหม่ทั้งหมด พวกเขาอาจเปิด DRM ทันทีเลยก็ได้

    • yt-dlp ใช้ API สำหรับสมาร์ตทีวีรุ่นเก่า อุปกรณ์พวกนั้นไม่ได้รับอัปเดตซอฟต์แวร์อีกแล้ว ดังนั้นถ้าทราฟฟิกนี้หายไป ฟีเจอร์นี้ก็อาจถูกปิดตามไปด้วย

    • ฉันคิดว่าทฤษฎีสมคบคิดที่ว่าแพลตฟอร์มคอนเทนต์อยากสนับสนุนการดาวน์โหลดทั้งที่มันทำลายโมเดลรายได้นั้นไม่มีเหตุผลเลยแม้แต่น้อย

  • ตัว player และหน้าเว็บ YouTube หนักขึ้นเรื่อย ๆ จนเกิดภาพประหลาดคือบนพีซีเก่ากลับยิ่งช้าลง ช่วงหลังฉันถึงกับเปลี่ยน “watch?v=” เป็น “/embed/” เพื่อดูที่ 480p แต่ถ้าดาวน์โหลดวิดีโอเดียวกันมาดู CPU ใช้แค่ราว 3% เท่านั้น ถึงอย่างนั้นวิธีนี้เองก็เริ่มใช้ได้ผลน้อยลงเรื่อย ๆ ในขณะที่เว็บอื่น ๆ (เช่น เว็บโป๊) กลับใส่ใจการปรับประสบการณ์ใช้งานให้ดีขึ้น และไม่ได้สนใจบล็อกเครื่องมือดาวน์โหลดมากนัก
    วิดีโอ(ปกติ)
    วิดีโอ(แบบฝัง)

    • GitHub เองก็ไม่ต่างกัน คือไม่ได้ optimize จนแทบใช้งานไม่ได้แม้บนพีซี i5 เจน 8 เพราะงั้นฉันเลยใช้วิธีเก็บ snapshot มาดูแบบออฟไลน์แทน

    • สาเหตุของประสิทธิภาพ YouTube ที่แย่ลงทุกวันนี้คือมันบังคับให้ทุกคนใช้ codec หนัก ๆ รุ่นใหม่ทั้งหมด โน้ตบุ๊กของฉันเล่นวิดีโอ 4K h264 ได้ไม่มีปัญหา แต่แค่เปิดวิดีโอ YouTube 720p เครื่องก็ร้อนและกระตุกอย่างรวดเร็ว มีส่วนขยายเบราว์เซอร์อย่าง h264ify ที่ใช้บล็อก codec บางตัวได้ แต่ก็เสียดายที่ผู้ใช้กลับไม่มีทางปรับพฤติกรรมเริ่มต้นพวกนี้ได้ สุดท้ายดาวน์โหลดวิดีโอมาดูเองกลับสะดวกและเสถียรกว่า

    • ไม่ใช่แค่ฉันคนเดียว ช่วงไตรมาส 1 ปี 2025 ฉันยังดูผ่าน embed player ได้ แต่พอถึงไตรมาส 3 Google ก็จงใจบล็อก embed player บางส่วน ตอนนี้เข้าถึง YouTube ได้ผ่าน yt-dlp เท่านั้น ขอให้ yt-dlp และนักพัฒนาอยู่ยืนยงตลอดไป

    • ฉันกำลังคิดจะย้ายออกจาก YouTube ไปสู่ PeerTube/แพลตฟอร์มแบบเพียร์

  • มีรายงานว่า QuickJS (JS interpreter ขนาดเบา) ช้าเกินไปจนใช้เวลากับวิดีโอแต่ละรายการเกิน 20 นาที Deno เร็วกว่ามาก เลยสงสัยว่ามันต่างกันได้ขนาดนี้อย่างไร
    (อ้างอิง issue#14404 / คำตอบ)

    • QuickJS เป็น interpreter แบบ bytecode (ช้าในลักษณะคล้าย Python) ที่ให้ความสำคัญกับความเรียบง่ายและความเสถียร ส่วน Deno ใช้ JIT compiler ประสิทธิภาพสูงระดับ Chrome ความต่างนี้ทำให้ในบางลักษณะของโค้ด ความเร็วอาจต่างกันเกิน 20 เท่าได้ QuickJIT (fork ของ QuickJS ที่เพิ่ม JIT โดยใช้ TCC) อาจยังช้ากว่า Deno แต่ก็มีโอกาสพัฒนาได้

    • ประสิทธิภาพที่แย่ลงอย่างรุนแรงขนาดนี้น่ากลัวจนเหมือน Google ตั้งใจทำให้มันช้าบน interpreter ตัวอื่นโดยเฉพาะ

    • น่าสนใจดี ฉันใช้ QuickJS ใน Minecraft (Bedrock, สำหรับงาน modding) มันช้ากว่า V8 ก็จริง แต่ไม่น่าจะต่างกันรุนแรงถึงระดับนี้

  • ตอนนี้สัญญาณชัดเจนมากว่ายุคของการ ripping แบบง่าย ๆ กำลังจะจบลง ถ้ามีวิดีโอ YT ที่อยากเก็บระยะยาว แนะนำให้ติดตั้งอะไรอย่าง tubearchivist แล้วแบ็กอัปไว้ตั้งแต่ตอนนี้

    • pinchflat GitHub ของ Pinchflat ก็เป็นอีกทางเลือกที่แนะนำได้ แม้ความสมบูรณ์อาจน้อยกว่า tubearchivist แต่จากประสบการณ์ของฉันมันมีบั๊กน้อยกว่า

    • ฉันคิดว่าสินทรัพย์ทางวัฒนธรรมและการศึกษาที่มีคุณค่าซึ่ง YT ได้มาจากการผูกขาดตลาด ตอนนี้อาจเป็นโอกาสสุดท้ายในการเก็บรักษาไว้ tubearchivist ก็ดูน่าสนใจ แต่ดูเหมือนจะติดตั้งและดูแลค่อนข้างยุ่งยากเลยรู้สึกหนักใจ อีกอย่างมันมองจากมุมการดาวน์โหลดทั้งช่องที่ติดตามเท่านั้น สำหรับฉัน ถ้ามีแค่โฟลเดอร์ที่เก็บไฟล์ดาวน์โหลดไว้ แล้วมี local webserver แบบเบามากที่ช่วยอ่านชื่อวิดีโอและสร้างหน้าลิงก์ให้ได้ก็เพียงพอแล้ว ถ้ามีทางเลือกที่เบาเป็นพิเศษและติดตั้งได้ในไม่กี่คลิกก็อยากให้แนะนำ

    • สำหรับหนังบน YouTube มี DRM ใช้อยู่แล้ว เลยสงสัยว่าทำไมเทคโนโลยีนี้ยังไม่ถูกใช้กับทุกช่องทั้งหมด

  • ฉันแปลกใจที่เลือก Deno แต่ Deno แจกจ่ายเป็นไฟล์ executable เดียวได้ง่าย จึงลดปัญหาเรื่องการติดตั้งได้ Python-based interpreter เป็นการแฮ็กที่น่าทึ่งก็จริง แต่ก็มีข้อจำกัด และประเด็นนี้ก็เคยถูกคุยกันมาแล้วในโครงการ Youtube-dl เดิม HN discussion เก่า

    • Node ไม่มีฟีเจอร์ด้านความปลอดภัยและการแยกการทำงานแบบ Deno ดูความเห็นของ maintainer ในเธรดเดียวกันได้

    • ฟีเจอร์ sandbox ของ Deno ก็เป็นอีกเหตุผลสำคัญในการเลือก ถึงจะเชื่อถือได้ไม่ 100% แต่ก็ยังดีกว่าไม่มีเลย

    • yt-dlp ไม่ได้รองรับแค่ YouTube แต่ยังรองรับเว็บสตรีมวิดีโออื่น ๆ อีกมากมายซึ่งบางครั้งก็อาจอันตรายได้ ดังนั้นการมี sandbox ขั้นต่ำแบบเบราว์เซอร์จึงเป็นสิ่งจำเป็น เพราะโดยการออกแบบแล้วมันต้องรันโค้ดที่ไม่น่าเชื่อถือ จึงควรมีความปลอดภัยพื้นฐานติดมาด้วย