You-get: ตัวดาวน์โหลดเรียบง่ายสำหรับดึงข้อมูลจากเว็บ
(github.com/soimort)- You-Get เป็นยูทิลิตีบรรทัดคำสั่งขนาดเล็กสำหรับดาวน์โหลดสื่อจากเว็บ เช่น วิดีโอ เสียง และรูปภาพ ใช้ในเวลาที่ไม่มีวิธีดาวน์โหลดที่สะดวกกว่านี้
- สามารถดาวน์โหลด วิดีโอ·รูปภาพ·เสียง จากหลายเว็บไซต์ เช่น YouTube, Youku, niconico, Tumblr, SoundCloud, Instagram, bilibili, TikTok และยังสตรีมวิดีโอออนไลน์ไปยังโปรแกรมเล่นสื่อได้
- ใช้
--infoเพื่อตรวจสอบคุณภาพและฟอร์แมตที่มีให้ และเลือกได้ด้วย--itagแต่การ เลือกฟอร์แมต ยังไม่ได้ถูกทำให้รองรับแบบทั่วไปในเว็บไซต์ส่วนใหญ่ที่รองรับ โดยค่าเริ่มต้นจะใช้คุณภาพสูงสุด - ติดตั้งได้ผ่าน
pip, การดาวน์โหลดหรือโคลนจาก GitHub, Homebrew,pkgของ FreeBSD, Flox ฯลฯ โดย dependency ที่แนะนำคือ Python 3.7.4 ขึ้นไป, FFmpeg 1.0 ขึ้นไป และ RTMPDump แบบเลือกติดตั้ง - รองรับทั้งการดาวน์โหลดจาก URL โดยตรง, การสแครปหน้าเว็บ, การดาวน์โหลดผ่านการค้นหา Google Videos, การหยุดชั่วคราว·เล่นต่อ, พร็อกซี, การโหลดคุกกี้, การแสดง URL ที่ดึงออกมาและ JSON แต่บางฟีเจอร์ยังเป็น experimental หรือยังไม่เสถียร
You-Get ทำอะไรได้บ้าง
- You-Get เป็นยูทิลิตีบรรทัดคำสั่งขนาดเล็กสำหรับดาวน์โหลด คอนเทนต์สื่อ จากเว็บ
- คอนเทนต์เป้าหมายคือวิดีโอ เสียง และรูปภาพ
- ใช้เมื่อไม่มีวิธีดาวน์โหลดจากเว็บที่สะดวกกว่านี้
- เหตุผลในการใช้งานที่ระบุไว้ ได้แก่ ดาวน์โหลดมาเก็บไว้ดูส่วนตัว, ควบคุมวิดีโอออนไลน์ที่ถูกปิดกั้นการบันทึก, หลีกเลี่ยงเทคโนโลยีแบบปิดหรือ JavaScript·Flash แบบ proprietary และแนวคิดแบบแฮ็กเกอร์รวมถึงซอฟต์แวร์เสรี
- ฟีเจอร์หลักมีดังนี้
- ดาวน์โหลด วิดีโอ·เสียง จากเว็บไซต์ยอดนิยมอย่าง YouTube, Youku, Niconico เป็นต้น
- สตรีมวิดีโอออนไลน์ในโปรแกรมเล่นสื่อโดยไม่ต้องใช้เว็บเบราว์เซอร์
- สแครปหน้าเว็บเพื่อดาวน์โหลดรูปภาพที่สนใจ
- ดาวน์โหลดคอนเทนต์ที่ไม่ใช่ HTML แบบใดก็ได้ เช่น ไฟล์ไบนารี
การติดตั้งและสภาพแวดล้อมการใช้งาน
- dependency ที่แนะนำคือ Python 3.7.4 ขึ้นไป, FFmpeg 1.0 ขึ้นไป และ RTMPDump แบบเลือกติดตั้ง
- ตามประกาศเมื่อวันที่ 30 พฤษภาคม 2022 การรองรับ Python 3.5, 3.6, 3.7 จะถูกยุติในที่สุด
- มีหลายวิธีในการติดตั้ง
- จาก PyPI ด้วย
pip install you-get - ผู้ใช้ Zsh ใช้ Antigen ด้วย
antigen bundle soimort/you-get - ดาวน์โหลด branch
masterที่เสถียรหรือ branchdevelopจาก GitHub - สำหรับนักพัฒนา แนะนำ
git clone git://github.com/soimort/you-get.git - บน macOS ใช้
brew install you-get - บน FreeBSD ใช้
pkg install you-get - บน Mac, Linux, Windows WSL ใช้
flox install you-get
- จาก PyPI ด้วย
- มี definition สำหรับ shell auto-completion ของ Bash, Fish, Zsh อยู่ใน
contrib/completion - การอัปเกรดทำได้ตามวิธีติดตั้ง เช่น
pip install --upgrade you-get, ดาวน์โหลดรีลีสล่าสุด หรือบังคับติดตั้งใหม่จาก branchdevelop
ขั้นตอนการดาวน์โหลดพื้นฐาน
- เวลาดาวน์โหลดวิดีโอ สามารถใช้
you-get -i URLหรือ--infoเพื่อตรวจสอบ คุณภาพและฟอร์แมต ที่มีให้ก่อนได้- เอาต์พุตจะแสดงเว็บไซต์ ชื่อเรื่อง สตรีม คอนเทนเนอร์ คุณภาพ ขนาด และตัวอย่าง
--itagที่ใช้ดาวน์โหลด - การดาวน์โหลดแบบปกติจะใช้รายการบนสุด
- เอาต์พุตจะแสดงเว็บไซต์ ชื่อเรื่อง สตรีม คอนเทนเนอร์ คุณภาพ ขนาด และตัวอย่าง
- หากต้องการฟอร์แมตอื่น ให้ใช้ค่า
--itagที่แสดงในเอาต์พุต- ตัวอย่างเช่น ในวิดีโอ YouTube
Me at the zooสามารถเลือก mp4 ด้วย--itag=18
- ตัวอย่างเช่น ในวิดีโอ YouTube
- หากวิดีโอ YouTube มีซับไตเติล ก็จะดาวน์โหลดมาในรูปแบบ SubRip subtitle format พร้อมกับไฟล์วิดีโอ
- การเลือกฟอร์แมตยังไม่ได้ถูกทำให้เป็นฟังก์ชันทั่วไปในเว็บไซต์ส่วนใหญ่ที่รองรับ
- ในกรณีนี้ ฟอร์แมตดาวน์โหลดเริ่มต้นคือคุณภาพสูงสุด
- FFmpeg จำเป็นสำหรับการดาวน์โหลดและรวมวิดีโอที่สตรีมมาเป็นหลายชิ้น รวมถึงวิดีโอ YouTube ความละเอียดสูง 1080p ขึ้นไป
- หากไม่ต้องการรวมชิ้นส่วนหลังดาวน์โหลด ให้ใช้
--no-mergeหรือ-n
- หากไม่ต้องการรวมชิ้นส่วนหลังดาวน์โหลด ให้ใช้
การดาวน์โหลดจาก URL, หน้าเว็บ และการค้นหา
- หากมี resource URL ที่ถูกต้องอยู่แล้ว สามารถดาวน์โหลดได้โดยตรงด้วย
you-get URL- ตัวอย่างเช่น หากใส่ URL ของภาพ JPEG ก็จะแสดงเว็บไซต์ ชื่อ ประเภท ขนาด และบันทึกไฟล์
- หากให้ URL ของหน้าเว็บแทน resource URL โดยตรง โปรแกรมจะพยายามสแครปหน้าเพื่อหาเนื้อหาที่สนใจ
- ฟีเจอร์นี้เป็น experimental และยังไม่สมบูรณ์
- ทำงานได้ดีที่สุดกับการสแครปรูปภาพขนาดใหญ่จากเว็บไซต์ยอดนิยมอย่าง Tumblr และ Blogger
- ไม่มีแพตเทิร์นสากลที่ใช้ได้กับทุกเว็บไซต์บนอินเทอร์เน็ต
- หากส่งข้อความที่ไม่ใช่ URL มา โปรแกรมจะค้นหาใน Google Videos และดาวน์โหลดวิดีโอที่เกี่ยวข้องมากที่สุด
- อาจไม่ตรงกับสิ่งที่ต้องการเป๊ะ แต่ระบุว่าอาจได้ผลลัพธ์ที่ใกล้เคียงมาก
การควบคุมการดาวน์โหลดและตัวเลือกการทำงาน
- ระหว่างดาวน์โหลดสามารถหยุดได้ด้วย
Ctrl+Cและจะมีไฟล์ชั่วคราวนามสกุล.downloadเหลืออยู่ในไดเรกทอรีเอาต์พุต- หากรันใหม่ด้วยอาร์กิวเมนต์เดิม จะ เล่นต่อ จากเซสชันล่าสุด
- หากมีไฟล์สมบูรณ์ที่ไม่มีนามสกุลชั่วคราวอยู่แล้ว จะข้ามการดาวน์โหลด
--forceหรือ-fจะบังคับดาวน์โหลดใหม่และเขียนทับไฟล์เดิมหรือไฟล์ชั่วคราวชื่อเดียวกัน
- สามารถระบุพาธบันทึกด้วย
--output-dirหรือ-oและระบุชื่อไฟล์ด้วย--output-filenameหรือ-O- มีประโยชน์เมื่อชื่อวิดีโอเริ่มต้นมีอักขระพิเศษที่ไม่เข้ากับ shell, ระบบปฏิบัติการ หรือระบบไฟล์ปัจจุบัน
- ยังมีประโยชน์เมื่อบันทึกลงโฟลเดอร์และชื่อที่กำหนดไว้ในสคริปต์ดาวน์โหลดแบบ batch
- สามารถระบุ HTTP proxy ด้วย
--http-proxyหรือ-x- โดยปกติจะใช้ค่าพร็อกซีของระบบจากตัวแปรสภาพแวดล้อม
http_proxy - หากต้องการปิดพร็อกซี ให้ใช้
--no-proxy - สำหรับบางเว็บไซต์อย่าง Youku ที่ต้องดึงข้อมูลวิดีโอซึ่งเข้าถึงได้เฉพาะในจีนแผ่นดินใหญ่ สามารถใช้
--extractor-proxyหรือ-y
- โดยปกติจะใช้ค่าพร็อกซีของระบบจากตัวแปรสภาพแวดล้อม
--playerหรือ-pจะส่งวิดีโอไปยังโปรแกรมเล่นสื่ออย่างmpv,vlcแทนการดาวน์โหลด- หากระบุเบราว์เซอร์เป็น player ก็สามารถดูผ่านเบราว์เซอร์โดยไม่มีโฆษณาหรือส่วนคอมเมนต์
- ยังใช้เพื่อเปิดตัวจัดการดาวน์โหลดอื่นได้ แต่บางครั้งอาจไม่เข้ากันนัก
การยืนยันตัวตน ข้อมูลที่ดึงออกมา และเว็บไซต์ที่รองรับ
- สำหรับคอนเทนต์ที่ต้องล็อกอิน เช่น วิดีโอที่ไม่เปิดสาธารณะ ต้องส่งคุกกี้จากเบราว์เซอร์ด้วย
--cookiesหรือ-c- ปัจจุบันรองรับรูปแบบคุกกี้ Mozilla
cookies.sqliteและ Netscapecookies.txt
- ปัจจุบันรองรับรูปแบบคุกกี้ Mozilla
--urlหรือ-uจะแสดงรายการ resource URL ที่สามารถดาวน์โหลดได้ซึ่งดึงออกมาจากหน้า--jsonจะแสดงสรุปข้อมูลที่ดึงออกมาในรูปแบบ JSON format- ฟีเจอร์นี้ยังไม่เสถียร และ JSON schema อาจมีการเปลี่ยนแปลงแบบไม่เข้ากันในอนาคต
- รายชื่อเว็บไซต์ที่รองรับมีทั้ง YouTube, X(Twitter), VK, Vimeo, Tumblr, SoundCloud, Pinterest, Internet Archive, Instagram, Facebook, Dailymotion, Bandcamp, niconico, bilibili, Youku, Naver, TikTok, Zhihu เป็นต้น
- การรองรับวิดีโอ รูปภาพ และเสียง แตกต่างกันไปในแต่ละเว็บไซต์
- สำหรับเว็บไซต์ที่ไม่อยู่ในรายการ generic extractor จะค้นหา resource ที่น่าสนใจในหน้าและดาวน์โหลดให้
การรายงานปัญหาและไลเซนส์
- หากไม่สามารถดาวน์โหลดคอนเทนต์ที่ต้องการได้ ให้ตรวจสอบ Known Bugs ก่อน
- ก่อนรายงานปัญหาใหม่หรือร่วมพัฒนา ควรอ่าน Contribution Guidelines
- หากมีคำถามสั้น ๆ สามารถถามได้ในช่อง Gitter #soimort/you-get
- ซอฟต์แวร์เผยแพร่ภายใต้ MIT license
- ซอฟต์แวร์ถูกให้มาแบบ “as is” โดยไม่มีการรับประกัน
- ผู้เขียนไม่รับผิดชอบต่อการละเมิดลิขสิทธิ์หรือการใช้งานที่ผิดกฎหมายอื่น ๆ
- ที่เก็บโค้ดมีไว้เพื่อแจกจ่ายโค้ดเท่านั้น และวิธีใช้งานขึ้นอยู่กับดุลยพินิจของผู้ใช้
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ช่วงหนึ่งอินเทอร์เน็ตแพงและแบนด์วิดท์ต่ำ แต่ฉันชอบฟังเพลงกับเลกเชอร์บน YouTube แล้วก็ได้ตระหนักในจุดหนึ่งว่า ถ้ารับมาแค่สตรีมเสียง ก็ลดค่าแบนด์วิดท์ได้ 90%
youtube-dlและyt-dlpมีแฟล็ก-Gที่จะแสดง URL ของฟอร์แมต/คุณภาพที่ร้องขอ และบนคอมพิวเตอร์ฉันก็เอา URL มาทางบรรทัดคำสั่งแล้วใส่ใน VLC เพื่อใช้งานบนมือถือ ตอนแรกฉันใช้วิธีอ้อมที่ซับซ้อนโดย SSH ไปยัง VPS เพื่อดาวน์โหลดไฟล์ก่อน แล้วค่อยดาวน์โหลดลงโทรศัพท์อีกที แต่ภายหลังพบว่าเบราว์เซอร์บนมือถือเล่น URL ได้โดยตรง จึงทำ PHP frontend สำหรับ
youtube-dl -G -f bestaudio {url}ขึ้นมาตอนนี้มันไม่อยู่บนออนไลน์แล้ว และโค้ดก็หายไปแล้ว แต่จริง ๆ แล้วแทบจะเป็น one-liner เลย
you-getก็ดูเหมือนจะรองรับการใช้งานแบบเดียวกันผ่าน--url/-uเลยอยากบอกว่าฟีเจอร์นี้มีประโยชน์แค่ไหนถ้าปิดหน้าจอแล้วเล่นต่อ จะ ประหยัดแบตเตอรี่ได้ 80% ด้วย YouTube เองก็น่าจะรู้เรื่องนี้ เลยทำให้การเล่นเบื้องหลังโดยดึงมาเฉพาะสตรีมเสียงเป็นฟีเจอร์แบบเสียเงิน
youtube-dlจะไม่ค่อยทำงานได้ดีอีกต่อไปแล้ว และฉันต้องใช้ฟอร์กอย่าง yt-dlp แทน การย้ายโปรเจ็กต์แบบนี้ทำให้รู้สึกไม่ค่อยสบายใจเสมอ แต่ดูเหมือนอย่างน้อยก็มีคนใช้อย่างแพร่หลายnode-redให้จัดการลิงก์ YouTube ที่แชร์มาลิงก์จะถูกส่งเข้า FIFO แล้วมีดีมอนตัวเล็กคอยดาวน์โหลดทีละรายการและเก็บไว้ในโฟลเดอร์ incoming โดยเฉพาะ บอตสามารถรับได้ทั้งเฉพาะเสียงหรือทั้งวิดีโอเต็ม แต่ตั้งให้ Telegram ID ของแม่รับได้เฉพาะเสียง
โฟลเดอร์นี้ถูก Jellyfin เฝ้าดูอยู่ ทำให้แม่จะดาวน์โหลดหรือฟังได้ทันทีเลย ตลอด 2 ปีที่ผ่านมาแม่ดาวน์โหลดหนังสือเสียงไปมากกว่า 1TB และชอบมาก
โค้ดดีมอน: https://gist.github.com/entropie/d265e94136b9777cc6b3190189b...
วิดีโอ 144p ให้ความรู้สึกสงบและผ่อนคลายอย่างประหลาด ไม่ถูกรบกวนด้วยสีสันฉูดฉาดหรือรายละเอียดซับซ้อน แค่มีสมาธิกับการฟังก็พอ
ส่วนใหญ่ใช้ตอนเล่นวิดีโอสำหรับสมาชิกเท่านั้น ซึ่งแม้มี YouTube Premium ก็ยังเล่นเบื้องหลังไม่ได้ ภาวนาให้ทุกครั้งที่ iOS อัปเดต อาการ “กลิช” นี้จะไม่ถูกปิดช่องโหว่
โปรเจ็กต์นี้ดูเหมือนไม่ต้องการให้รายงานแค่อิสชูโดยไม่มี PR สำหรับแก้ไข
ประมาณว่า “หากต้องการรายงานปัญหาที่พบระหว่างใช้ you-get คุณต้องเปิด Pull Request...” ซึ่งเป็นแนวทางที่ฉันไม่เคยเห็นมาก่อน
ข้อกำหนดคือคำอธิบายปัญหาอย่างละเอียด และอย่างน้อยหนึ่งคอมมิตที่ครอบคลุมปัญหานั้นในรูปแบบ unit test คำว่า “addressing” ตรงนี้ไม่ค่อยเหมาะ และน่าจะใช้ “demonstrating” มากกว่า
you-getกำลังทดลองแนวทางเชิงรุกในการจัดการอิสชูอยู่ในขณะนี้ และรายงานบั๊กควรถูกจัดการผ่าน pull request ในรูปของโค้ดhttps://github.com/soimort/you-get/commit/75b44b83826b3c2d9a...
น่าจะเป็นเพราะมีสแปมมากเกินไป อีกอย่าง
tests/test.pyก็ดูเหมือนจะรัน extractor กับหลายเว็บไซต์โดยตรง และฉันหาไม่เจอว่ามีการ mock network request/response กันตรงไหน อาจเป็นความตั้งใจที่จะทำให้ขั้นตอนง่ายขึ้นสำหรับคนที่จะส่ง PRyou-getเลยไม่รู้ว่าพวกเขาเจองานแบบไหนอยู่มันอาจเป็นวิธีที่มีประสิทธิภาพในการคัดกรองอิสชูถล่มจากคนที่รันโปรแกรมบรรทัดคำสั่งไม่เป็นและโพสต์ปัญหาซ้ำ ๆ ก็ได้
ถ้าสิ่งนี้ช่วยให้ดูแลโปรเจ็กต์ได้ง่ายขึ้นและอยู่ได้นานขึ้น ฉันก็คิดว่าโอเค
แค่ดูจากชื่อกับช่วงต้นของคำอธิบาย ฉันนึกว่าเป็น เครื่องมือแบบอาศัยฮิวริสติก ที่พยายามดึงอะไรก็ได้จากหน้าเว็บ
แบบที่มีประโยชน์ตอนยังไม่มีเครื่องมือรองรับเว็บนั้นโดยเฉพาะ หรือพูดอีกอย่างคือส่วนใหญ่คือ “ตอนที่ yt-dlp ยังไม่รองรับ”
แต่ที่จริงแล้วมันเป็นโครงสร้างแบบ extractor-based ที่มี extractor แยกสำหรับแต่ละแหล่งยอดนิยมอยู่พอสมควร สุดท้ายเลยรู้สึกว่าอาจจะใกล้เคียงกับ ร่างโคลนของ yt-dlp ที่เรียบง่ายกว่า
สงสัยว่ามีใครยังเจอข้อผิดพลาดนี้อยู่ไหม
ขึ้นต้นด้วย
you-get: [error] oops, something went wrong.แล้วแนะนำให้ตรวจสอบปัญหาเครือข่าย ตรวจสอบว่าเป็นเวอร์ชันล่าสุด ตรวจสอบบั๊กที่ทราบแล้ว และลองรันด้วยตัวเลือก--debugแต่ถึงจะใช้ debug flag ก็แทบไม่ช่วยอะไร และเจอ
TypeError: decoding to str: need a bytes-like object, NoneType foundที่pattern = str(pattern, 'latin1')ตอนแรกลองดูว่าสามารถข้ามการจำกัดอายุได้ไหม แต่แม้แต่วิดีโอที่ไม่มีการจำกัดอายุก็ยังเจอข้อผิดพลาดเดียวกัน
ใช้เครื่องมืออย่าง Pyenv เพื่อสลับไปใช้ Python เวอร์ชันใหม่ล่าสุด หรือจะรัน Docker image ประมาณ
docker run -it -v $(pwd):/mnt python:3.13 bashแล้วลองใช้ยูทิลิตีข้างในนั้นก็ได้อธิบายได้ไหมว่าทำไมสิ่งนี้ถึงดีกว่า yt-dlp?
เช่น มี mp4 joiner แบบเฉพาะทางด้วย ซึ่งก็น่าแปลกอยู่ เพราะถ้ามี ffmpeg อยู่แล้ว ก็คงแทบไม่มีทางทำเองให้ดีกว่านั้นได้
https://github.com/soimort/you-get/blob/develop/src/you_get/...
จะเรียก media downloader สไตล์ ytdl ที่มีทั้ง extractor และไลบรารีแปลงไฟล์รายเว็บไซต์ว่าเป็นเครื่องมือที่ “ทื่อ ๆ” ก็คงไม่ค่อยตรงนัก แต่ถึงอย่างนั้นการมีโปรเจกต์แบบ ytdl เพิ่มขึ้นอีกก็ยังเป็นเรื่องดี
ไม่ค่อยเข้าใจว่าทำไมรายการไซต์ที่รองรับถึงมี Bandcamp อยู่ด้วย เพราะ Bandcamp ให้คุณดาวน์โหลดไฟล์ได้ตรง ๆ อยู่แล้วถ้าคุณจ่ายเงินให้อาร์ทิสต์ก่อน
สิ่งที่เครื่องมือนี้ดาวน์โหลดได้ก็เป็นเพราะอาร์ทิสต์อนุญาตให้ฟังฟรีก่อนซื้ออยู่แล้ว การใช้เครื่องมือนี้ดาวน์โหลดจึงดูไม่จำเป็นเลย และออกจะเสียมารยาทนิด ๆ ด้วย เพราะ Bandcamp ส่วนใหญ่เป็นอาร์ทิสต์และค่ายเพลงอินดี้ขนาดเล็ก
ส่วนตัวก็มีกรณีที่อยากหรือจำเป็นต้องเสพสื่อแบบออฟไลน์ เพราะเครือข่ายไม่เสถียรหรือช้า หรือค่าบริการจากผู้ให้บริการแพง นั่นไม่ได้แปลว่าถ้าชอบแล้วจะไม่กลับมาจ่ายเงินทีหลัง
ดูเหมือนทำมาดี แต่ในฐานะผู้ใช้ก็ยังสงสัยว่ามีเหตุผลอะไรที่ควรใช้
you-getแทน yt-dlpมันมีจุดแข็งอะไรเมื่อเทียบกับ yt-dlp ที่ใช้งานได้ค่อนข้างดีบนเว็บไซต์จำนวนมหาศาล?
[1] https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites....
ในคู่มือมีข้อความว่า “ค้นหาและดาวน์โหลดจาก Google Videos:
$ you-get "Richard Stallman eats"”ปกติไม่ค่อยอ่านคู่มือเท่าไร แต่ครั้งนี้อ่านแล้วดันไปเจอ easter egg ที่ค่อนข้างน่าขยะแขยง
ชอบนะ นึกภาพว่าถ้ามี extension คู่หูสำหรับ Chrome/Firefox ที่ใช้
you-getเป็นแบ็กเอนด์และทำออกมาได้ลื่นไหลก็น่าจะดีถ้าคิดต่อไปอีกขั้น ก็อาจมี extension
you-getที่ ข้าม YouTube player แล้วเล่นคอนเทนต์ตรง ๆ แบบไม่มีโฆษณาได้เมื่อเข้า YouTube และไม่ใช่แค่ YouTube แต่ใช้กับแพลตฟอร์มอื่นได้ด้วยhttps://addons.mozilla.org/en-US/firefox/addon/faststream/?u...