- MeTube เป็นเว็บ UI แบบโฮสต์เองสำหรับ
yt-dlp ช่วยให้ดาวน์โหลดสื่อจาก YouTube และเว็บไซต์ที่รองรับอีกหลายสิบแห่งผ่านเบราว์เซอร์ได้
- รองรับการดาวน์โหลดวิดีโอ เสียง คำบรรยาย และภาพขนาดย่อ รวมถึงดาวน์โหลด เพลย์ลิสต์และช่อง ได้โดยปรับรูปแบบผลลัพธ์และตัวเลือกการดาวน์โหลด
- สามารถ สมัครติดตาม ช่องและเพลย์ลิสต์เพื่อตรวจสอบรายการใหม่เป็นระยะ และเพิ่มอัปโหลดใหม่เข้าคิวโดยอัตโนมัติ
- รันด้วย Docker หรือ docker-compose และตั้งค่าจำนวนการดาวน์โหลดพร้อมกัน พาธจัดเก็บ เทมเพลตชื่อไฟล์ HTTPS, CORS, ธีม ระดับล็อก ฯลฯ ผ่าน ตัวแปรสภาพแวดล้อม
- ตัวเลือก
yt-dlp จะถูกรวมตามลำดับ: ตัวเลือกส่วนกลาง, พรีเซ็ต, และการ override ต่อรายการดาวน์โหลด โดยการ override ต่อรายการดาวน์โหลดอนุญาตให้ป้อนตัวเลือกใดก็ได้ จึงควรเปิดใช้เฉพาะใน สภาพแวดล้อมที่เชื่อถือได้ เท่านั้น
MeTube ทำอะไรได้บ้าง
- MeTube เป็นเว็บ UI แบบโฮสต์เองที่ใช้
yt-dlp
- ดาวน์โหลดสื่อจาก YouTube และเว็บไซต์อีกหลายสิบแห่งที่
yt-dlp รองรับได้
- ฟีเจอร์หลักมีดังนี้
- ดาวน์โหลด วิดีโอ เสียง คำบรรยาย และภาพขนาดย่อ จาก UI บนเบราว์เซอร์
- ดาวน์โหลด เพลย์ลิสต์และช่อง
- กำหนดพาธผลลัพธ์และตัวเลือกการดาวน์โหลด
- สมัครติดตามช่อง·เพลย์ลิสต์ แล้วตรวจสอบรายการใหม่เป็นระยะ
- เพิ่มอัปโหลดใหม่เข้า queue ดาวน์โหลดโดยอัตโนมัติ
วิธีรัน
docker run -d -p 8081:8081 -v /path/to/downloads:/downloads ghcr.io/alexta69/metube
- ตัวอย่าง docker-compose ใช้อิมเมจ
ghcr.io/alexta69/metube และ mount /downloads ของคอนเทนเนอร์ไปยังไดเรกทอรีดาวน์โหลดบนโฮสต์
services:
metube:
image: ghcr.io/alexta69/metube
container_name: metube
restart: unless-stopped
ports:
- "8081:8081"
volumes:
- /path/to/downloads:/downloads
การตั้งค่าดาวน์โหลดและพื้นที่จัดเก็บ
- MAX_CONCURRENT_DOWNLOADS จำกัดจำนวนดาวน์โหลดที่รันพร้อมกันได้ ค่าเริ่มต้นคือ
3
- หาก DELETE_FILE_ON_TRASHCAN เป็น
true เมื่อส่งรายการไปถังขยะจากส่วน “Completed” ใน UI ไฟล์ดาวน์โหลดบนเซิร์ฟเวอร์จะถูกลบด้วย
- DEFAULT_OPTION_PLAYLIST_ITEM_LIMIT กำหนดจำนวนรายการสูงสุดที่ดาวน์โหลดได้จากเพลย์ลิสต์ โดยค่าเริ่มต้น
0 หมายถึงไม่จำกัด
- ค่าเริ่มต้นที่เกี่ยวกับการสมัครติดตามก็ปรับได้ด้วยตัวแปรสภาพแวดล้อม
- SUBSCRIPTION_DEFAULT_CHECK_INTERVAL: ช่วงเวลาตรวจสอบอัตโนมัติต่อการสมัครติดตาม ค่าเริ่มต้น
60 นาที
- SUBSCRIPTION_SCAN_PLAYLIST_END: จำนวนรายการเพลย์ลิสต์·ช่องสูงสุดที่จะดึงมาตอนตรวจสอบการสมัครติดตาม ค่าเริ่มต้น
50
- SUBSCRIPTION_MAX_SEEN_IDS: เพดานจำนวน ID วิดีโอที่จะเก็บต่อการสมัครติดตาม ค่าเริ่มต้น
50000
- DOWNLOAD_DIR คือพาธจัดเก็บดาวน์โหลด และในอิมเมจ Docker ค่าเริ่มต้นคือ
/downloads
- การดาวน์โหลดเฉพาะเสียงสามารถมีพาธจัดเก็บแยกต่างหากได้ด้วย AUDIO_DOWNLOAD_DIR
- ผ่าน CUSTOM_DIRS และ CREATE_CUSTOM_DIRS สามารถเลือกไดเรกทอรีย่อยสำหรับดาวน์โหลดใน UI หรือสร้างโดยอัตโนมัติได้
- STATE_DIR เก็บไฟล์สถานะถาวร เช่น
queue.json, pending.json, completed.json, subscriptions.json
- TEMP_DIR คือพาธไฟล์ดาวน์โหลดชั่วคราว การใช้ SSD หรือ RAM filesystem อาจช่วยด้านประสิทธิภาพได้ แต่ RAM filesystem อาจทำให้ไม่สามารถ resume ดาวน์โหลดได้
ชื่อไฟล์และตัวเลือก yt-dlp
- OUTPUT_TEMPLATE คือเทมเพลตชื่อไฟล์ดาวน์โหลด ค่าเริ่มต้นคือ
%(title)s.%(ext)s
- สามารถตั้งค่าเทมเพลตสำหรับการดาวน์โหลด chapter, เพลย์ลิสต์ และช่อง แยกกันได้
-
OUTPUT_TEMPLATE_CHAPTER
-
OUTPUT_TEMPLATE_PLAYLIST
- OUTPUT_TEMPLATE_CHANNEL
- ตัวเลือก
yt-dlp ระบุเป็นอ็อบเจ็กต์ JSON
- ลำดับชั้นของตัวเลือกจะถูกใช้จากขอบเขตกว้างไปแคบ
- ตัวเลือกส่วนกลาง: ค่าเริ่มต้นสำหรับทุกดาวน์โหลด
- พรีเซ็ต: ชุดตัวเลือกที่มีชื่อ ซึ่งเลือกต่อรายการดาวน์โหลดใน UI
- override ต่อรายการดาวน์โหลด: ตัวเลือกแบบป้อนอิสระที่ใช้เฉพาะกับดาวน์โหลดใดดาวน์โหลดหนึ่ง
- หากมี key ที่ชนกัน การตั้งค่าที่เฉพาะเจาะจงกว่าจะมีลำดับความสำคัญสูงกว่า
- override ต่อรายการดาวน์โหลดมีลำดับความสำคัญสูงกว่าพรีเซ็ต
- พรีเซ็ตมีลำดับความสำคัญสูงกว่าตัวเลือกส่วนกลาง
- หากตั้งค่าตัวเลือกใน JSON เป็น
null ตัวเลือกนั้นจะถูกลบออกจากดาวน์โหลดนั้น
YTDL_OPTIONS_FILE และ YTDL_OPTIONS_PRESETS_FILE จะคอยตรวจการเปลี่ยนแปลงไฟล์และโหลดใหม่อัตโนมัติ จึงไม่ต้องรีสตาร์ตคอนเทนเนอร์
- หากใช้ไฟล์และตัวแปรสภาพแวดล้อมร่วมกัน แล้วกำหนด key เดียวกันหรือชื่อพรีเซ็ตเดียวกัน การตั้งค่าจากไฟล์ จะมีลำดับความสำคัญสูงกว่า
พรีเซ็ตและ override
- พรีเซ็ตจะแสดงเป็น “Option Presets” ใต้ Advanced Options ใน UI
- พรีเซ็ตตัวอย่างทำงานดังนี้
- sponsorblock: ลบเซกเมนต์ sponsor, selfpromo, interaction
- embed-subs: ดาวน์โหลดคำบรรยายภาษาอังกฤษและเยอรมัน แล้วฝังลงในไฟล์วิดีโอ
- limit-rate: จำกัดความเร็วดาวน์โหลดไว้ประมาณ 5 MB/s
- หากเลือกหลายพรีเซ็ต ระบบจะใช้ตามลำดับ และตัวเลือกเดียวกันจะถูกพรีเซ็ตที่อยู่หลัง override พรีเซ็ตก่อนหน้า
- หากตั้ง ALLOW_YTDL_OPTIONS_OVERRIDES เป็น
true ใน UI จะมีช่อง JSON แบบป้อนอิสระ “Custom yt-dlp Options” ปรากฏขึ้น
- override ต่อรายการดาวน์โหลดถูกปิดใช้งานโดยค่าเริ่มต้น
- หากเปิดฟีเจอร์นี้ ผู้ที่เข้าถึง UI จะสามารถส่งตัวเลือก API ของ
yt-dlp ใดก็ได้ และบางตัวเลือกอาจทำให้รันคำสั่งใดก็ได้ภายในคอนเทนเนอร์ ดังนั้นควรเปิดใช้เฉพาะใน สภาพแวดล้อมที่เชื่อถือได้ เท่านั้น
- MeTube บังคับการทำงาน
extract_flat, noplaylist ของตัวเองในขั้นตอนดึง metadata เริ่มต้น และพรีเซ็ตไม่สามารถ override key ในขั้นตอนนี้ได้
คุกกี้ การเชื่อมต่อเบราว์เซอร์ และทางลัด
- เมื่อต้องดาวน์โหลดวิดีโอที่ถูกจำกัดหรือเป็นส่วนตัว สามารถใช้คุกกี้ของเบราว์เซอร์ได้
- ส่งออกคุกกี้เป็น
cookies.txt ด้วยส่วนขยาย Firefox หรือ Chrome
- อัปโหลดผ่าน Upload Cookies ใน Advanced Options ของ MeTube
- ลบคุกกี้ที่อัปโหลดด้วย Delete Cookies ในส่วนเดียวกัน
- ส่วนขยายเบราว์เซอร์ช่วยให้คลิกขวาที่วิดีโอแล้วส่งไปยัง MeTube ได้โดยตรง
- หากต้องใช้จากหน้า HTTPS อินสแตนซ์ MeTube ต้องอยู่หลัง HTTPS reverse proxy
- ส่วนขยายจะส่งคำขอจาก origin
chrome-extension://... หรือ moz-extension://... จึงจำเป็นต้องตั้งค่า CORS_ALLOWED_ORIGINS=*
- ส่วนขยาย Chrome ติดตั้งได้จาก Google Chrome Webstore หรือจาก ซอร์ส
- ส่วนขยาย Firefox ติดตั้งได้จาก Firefox Addons หรือใช้ ซอร์ส
- iOS Shortcut สามารถส่ง URL จากเมนูแชร์ของ Safari ไปยัง MeTube ได้
- Bookmarklet จะส่งเว็บเพจที่เปิดอยู่ไปยัง MeTube และบนหน้า HTTPS ต้องตั้งค่า MeTube เป็น HTTPS หรืออยู่หลัง HTTPS reverse proxy
- Bookmarklet จะส่งคำขอข้าม origin จาก origin ของหน้าปัจจุบันไปยัง MeTube ดังนั้นต้องเพิ่ม origin ของไซต์ที่จะใช้เข้าไปใน CORS_ALLOWED_ORIGINS
- MeTube extension สำหรับ Raycast ช่วยให้เพิ่มวิดีโอได้โดยตรงจาก Raycast
เว็บเซิร์ฟเวอร์, HTTPS, reverse proxy
- การตั้งค่าเกี่ยวกับเว็บเซิร์ฟเวอร์ปรับด้วยตัวแปรสภาพแวดล้อม
- HOST ค่าเริ่มต้นคือ
0.0.0.0
- PORT ค่าเริ่มต้นคือ
8081
- URL_PREFIX ใช้สำหรับ deploy ใต้ subpath หลัง reverse proxy
- PUBLIC_HOST_URL และ PUBLIC_HOST_AUDIO_URL เปลี่ยน URL ฐานของลิงก์ดาวน์โหลดไฟล์ที่เสร็จแล้ว
- หากตั้ง HTTPS เป็น
true และระบุ CERTFILE, KEYFILE MeTube จะรันในโหมด HTTPS
- reverse proxy ใช้สำหรับ HTTPS termination หรือการยืนยันตัวตนได้
- อิมเมจ
linuxserver/swag มีชิ้นส่วนการตั้งค่า subfolder, subdomain สำหรับ MeTube และการตั้งค่า authentication ของ Authelia รวมอยู่ด้วย
- ตัวอย่าง NGINX proxy พาธ
/metube/ ไปยัง http://metube:8081 และตั้ง header Upgrade กับ Connection เพื่อให้ WebSocket ทำงานได้
- ยังมีตัวอย่าง reverse proxy สำหรับ Apache และ Caddy ด้วย
การอัปเดต การแก้ปัญหา และการพัฒนาในเครื่อง
- MeTube พึ่งพา yt-dlp และเนื่องจากเลย์เอาต์ของเว็บไซต์วิดีโอเปลี่ยนแปลงบ่อย
yt-dlp จึงต้องอัปเดตบ่อย
- เมื่อมี stable release ใหม่ของ
yt-dlp อิมเมจ Docker ใหม่ของ MeTube จะถูกเผยแพร่อัตโนมัติ
- สามารถใช้ watchtower เป็นวิธีทำให้คอนเทนเนอร์เป็นเวอร์ชันล่าสุดอยู่เสมอได้
- หากต้องการติดตาม nightly channel ของ
yt-dlp ให้ตั้งเวลาในรูปแบบ HH:MM ที่จะอัปเกรดทุกวันและรีสตาร์ต MeTube ไว้ใน YTDL_NIGHTLY_UPDATE_TIME
- สำหรับปัญหา authentication, post-processing, permission และ
YTDL_OPTIONS แนะนำให้ debug โดยตรงกับ yt-dlp ก่อน แล้วจึงนำตัวเลือกที่ใช้งานได้มาใช้กับ MeTube
- การ build และรันในเครื่องต้องใช้ Node.js 22+ และ Python 3.13
- UI build ด้วย
pnpm ติดตั้ง dependency ของ Python ด้วย uv sync แล้วรันด้วย uv run python3 app/main.py
- อิมเมจ Docker build ในเครื่องได้ด้วย
docker build -t metube . และในกระบวนการนี้ UI จะถูก build ไปพร้อมกัน
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
Tube Archivist ก็น่าพิจารณาเหมือนกัน ถ้าแค่ต้องการดาวน์โหลดวิดีโอไม่กี่รายการก็อาจจะเกินความจำเป็น แต่ผมใช้มันเก็บถาวรและทำดัชนีช่องเทคโนโลยีที่ชอบอยู่
นอกจากทรานสคริปต์/ซับไตเติลแล้ว ยังสามารถ ค้นหาข้อความทั้งหมดและเมทาดาทา ได้ทั้งความคิดเห็น ชื่อเรื่อง และคำอธิบายด้วย ซึ่งน่าหงุดหงิดตรงที่มันดีกว่าสิ่งที่ Alphabet ให้มาเสียอีก
https://www.tubearchivist.com/
https://github.com/kieraneglin/pinchflat
ถ้าเป็นที่เก็บชั่วคราวก็พอเข้าใจได้ แต่ถ้าเครื่องมือที่เรียกตัวเองว่าเป็นซอฟต์แวร์ “เก็บถาวร” ก็ควรสมมติไว้ด้วยว่าตัวมันเองอาจอยู่ไม่ยืนยาวกว่าข้อมูลที่พยายามจะเก็บรักษา
ตอนแรกคาดหวังเพราะดูเหมือน PeerTube clone ที่มีฟังก์ชันดาวน์โหลด แต่พอเห็นผลลัพธ์แล้วก็หมดสนใจ ใช้
yt-dlpพร้อมคอนฟิกและสคริปต์ฉลาด ๆ ยังทำงานเก็บถาวรได้ถูกต้องกว่าhttps://news.ycombinator.com/item?id=41100820
โชคดีที่ยังมีสตริงรูปแบบที่ใช้ตอนบันทึกชื่อไฟล์อยู่ และ TubeSync ใช้ Django กับ PostgreSQL เป็นแบ็กเอนด์ จึงอาจเชื่อมโยงกับ YouTube ID ได้ แต่ถึงอย่างนั้นการย้ายระบบก็ดูเป็นฝันร้ายพอสมควร
สิ่งที่อยากได้จริง ๆ คือ YouTube TiVo
มีช่องราว 100 ช่องที่ติดตามดูแทบจะเป็นพิธีกรรม แต่ไม่ค่อยอัปโหลดบ่อย และผมไม่อยากพลาดวิดีโอจากช่องเหล่านี้เด็ดขาด
ผมก็ไม่อยากไล่ค้นหาวิดีโอใหม่เป็นร้อย ๆ รายการจากช่องที่อัปวันละสี่ครั้งบน YouTube เพื่อหา 1–2 รายการที่อยากดูจริง ๆ สุดท้ายก็พลาดอยู่ดี
อยากได้ ฟีดลำดับความสำคัญ ที่รวมเฉพาะสิ่งที่อยากดูหรือควรดูจริง ๆ และจะยิ่งดีถ้าดาวน์โหลดทั้งหมดมาดูผ่าน DLNA ได้
การทำให้เราไม่พลาดสิ่งที่เราชอบไม่ใช่วิธีดำเนินงานของ YouTube วิธีของ YouTube คือทำให้เราดูวิดีโอที่ยืดจาก 3 นาทีเป็น 18–22 นาที พร้อมตรึงฟีดแบ็กไว้กับใบหน้าเรา
ถ้าไม่อยากสร้างบัญชีก็เข้าใจได้ และ NewPipe ก็น่าจะเหมาะ แต่ในเมื่อมีหน้าเฉพาะที่แสดงวิดีโอจากช่องที่เลือกเองตามลำดับเวลาอยู่แล้ว การบอกว่า “การทำให้เราไม่พลาดสิ่งที่เราชอบไม่ใช่วิธีของ YouTube” ก็ดูแปลกนิดหน่อย
การค้นพบคอนเทนต์ใหม่ ๆ ไม่ค่อยดีนัก แต่ถ้านั่นไม่ใช่กรณีใช้งานที่ต้องการ ก็น่าลองดู
https://fraidyc.at/
มีอย่างหนึ่งที่ไม่เข้าใจ ทำไมต้องโฮสต์ไว้บนเซิร์ฟเวอร์ด้วย? ทำเป็น แอปแบบสแตนด์อโลน ที่รันบน Windows/Linux/mac ก็ได้ไม่ใช่หรือ
ช่วงนี้เพิ่งเริ่มใช้
yt-dlpและกำลังคิดว่าจะลองทำแอปง่าย ๆ ดู น่าลองไหม? มีทางเลือกแนวนี้อยู่แล้วหรือเปล่า?หลายคนรันแอปแบบ self-hosting บนเซิร์ฟเวอร์ภายนอก โฮมแล็บ หรือผสมกัน แล้วตั้งค่าทรัพยากรเหล่านั้นให้เป็นเหมือนโครงสร้างพื้นฐานที่มีแบ็กอัป ฯลฯ ส่วน PC/โน้ตบุ๊ก/แท็บเล็ต/โทรศัพท์ปล่อยให้เป็นไคลเอนต์หรือแคชที่ค่อนข้างเรียบง่าย ถ้าหายหรือเสียหายก็เปลี่ยนเครื่องได้ง่าย เพราะแค่ดึงคอนเทนต์ในเครื่องที่ซิงก์กับเซิร์ฟเวอร์กลับมาใหม่ นี่เป็นหนึ่งในเหตุผลที่ self-hosting แบบนี้ได้รับความนิยม
เคยเห็นแอปเดสก์ท็อปที่ครอบ
yt-dlpอยู่บ้าง ไม่เคยลองเองเลยพูดเรื่องเสถียรภาพหรือความน่าเชื่อถือได้ยาก แต่ถ้าไม่ได้อยากทำใหม่เพื่อความสนุก ก็ควรค้นหาก่อน อาจมีสิ่งที่ต้องการอยู่แล้วyt-dlpเพื่อสตรีมโดยอัตโนมัติ ส่วน Parabolic เป็นเครื่องมือดาวน์โหลดเฉพาะทางที่ใช้yt-dlphttps://flathub.org/apps/details/io.github.celluloid_player....
https://flathub.org/apps/org.nickvision.tubeconverter
yt-dlpด้วยซ้ำ ทำได้ด้วยโค้ดและความซับซ้อนน้อยกว่านั้นมาก และผมใช้เป็นโปรแกรม C ขนาดเล็กมากอยู่ สคริปต์เชลล์เล็ก ๆ ก็ทำงานได้ดีพอสิ่งที่ไม่มีใครพูดถึงคือ ตอนนี้
yt-dlpดาวน์โหลด itag 22 ไม่ได้แล้ว และ itag 18 ถูกจำกัดความเร็ว ดังนั้นyt-dlpจึงต้องดาวน์โหลดไฟล์เสียงกับไฟล์วิดีโอแยกกัน แล้วค่อยรวมด้วยffmpegรายได้โฆษณาของ YouTube เพิ่งพลาดประมาณการตามฉันทามติไป การเข้าถึงวิดีโอ YouTube อาจแย่ลงอีกในอนาคต
ถ้าไม่ได้มีนิสัยเลือกฟอร์แมตเฉพาะ ก็คงมีโอกาสสูงที่จะไม่ค่อยรู้สึกถึงเรื่องนี้ ตัวอย่างเช่น บางคนใช้แต่ itag 18 กับ 22 มาหลายปี
https://freetubeapp.io/
เว็บแอปที่ทำเป็น Docker ทำและดูแลรักษาง่ายกว่าการทำไคลเอนต์เดสก์ท็อป/มือถือแยกสำหรับ Windows, macOS, Android, iOS, Linux มาก
ถ้ามีอินเทอร์เฟซที่ทำงานร่วมกับ Jellyfin ได้ก็คงดี อยากให้ค้นหา YouTube แล้วดาวน์โหลดด้วย
yt-dlpจากนั้นสตรีมผ่าน Jellyfin แบบไม่มีโฆษณาyt-dlpยังทำเอง ถ้ามี ปลั๊กอิน Jellyfin ก็คงยอดเยี่ยมค่อนข้างเจ๋ง ตอนนี้ใช้ https://cobalt.tools อยู่ ซึ่งอันนี้ก็ใช้ได้ดีเหมือนกัน
เพิ่งรู้ว่า Brave บน iOS มีปุ่มเพลย์ลิสต์สำหรับดาวน์โหลดวิดีโอ YouTube มาเก็บไว้ในเครื่องได้ ใช้ PiP และเล่นออฟไลน์ได้ แถมไม่มีโฆษณา
ใช้ไลเซนส์แบบเปิดบนแบ็กเอนด์ Mozilla iOS เลยสงสัยว่าทำไมแอปอื่น ๆ ไม่ทำแบบนี้มากกว่านี้ พวกเขาหาวิธีให้ Apple ยอมรับได้ และ CEO ก็เคยโพสต์ปกป้องเทคนิคนี้ที่นี่ว่าเหมาะสม
โดยแก่นแล้วมันจะทำงานก็ต่อเมื่อโหลดวิดีโอภายในเว็บไซต์ YouTube ปกติก่อน และเป็นเหมือนปุ่มโหมดอ่านที่ใช้ได้กับคอนเทนต์วิดีโอใด ๆ ไม่ใช่แค่ YouTube
แปลกใจนิดหน่อยที่มีเครื่องมือมิเรอร์ YouTube มากขนาดนี้ ถ้าใช้เครื่องมือแบบนี้ เหตุผลที่ต้อง ดาวน์โหลด/เก็บถาวร วิดีโอ แทนที่จะสตรีมจาก YouTube โดยตรงคืออะไร?
เข้าใจว่าบางครั้งการเก็บไว้เผื่อกรณีถูกลบจาก YouTube ก็เป็นเรื่องดี แต่สำหรับผมมันเกิดขึ้นน้อยมาก ดูวิดีโอจบแล้วก็จบ ต่อให้กลับไปดูไม่ได้ก็ไม่ค่อยเป็นไร
อย่างแรก การกำจัดโฆษณา เป็นเหตุผลใหญ่ทีเดียวสำหรับหลายคน
อย่างที่สอง ตามที่เขียนไว้แล้ว ถ้าวิดีโอหรือทั้งช่องถูกถอดลงเพราะการร้องเรียนลิขสิทธิ์หรือรายงานอื่น ๆ ก็สตรีมอีกไม่ได้แล้ว ขึ้นอยู่กับคอนเทนต์ที่ดู เรื่องนี้อาจสำคัญกับบางคนมากกว่าคุณมาก
อย่างที่สาม ดาวน์โหลดไว้เพื่อเล่นออฟไลน์ได้ แอป YouTube ทางการก็ทำได้ แต่ต้องจ่าย Premium ซึ่งราคาดูสูงเกินไป และยังได้รับผลกระทบจากปัญหาการลบอยู่ดี
อย่างที่สี่คือ การทำดัชนีในเครื่อง ถ้าจะอ้างอิงวิดีโอเพื่อกลับมาดูหรือแชร์ในภายหลัง การจัดเก็บตามโครงสร้างของตัวเองอาจสะดวกกว่าการเก็บบุ๊กมาร์กไปยังสำเนาบน YouTube หรือค้นหาใหม่ทุกครั้ง
เหตุผลข้างต้นอาจผสมกัน และน่าจะมีเหตุผลอื่นที่ผมไม่ได้พิจารณาหรือจำไม่ได้ด้วย
ส่วนใหญ่ที่ผมดาวน์โหลด ดูครั้งเดียวแล้วก็ลบ
แถมยังมีเวลาที่สตรีม YouTube ไม่ได้ด้วย เช่น อินเทอร์เน็ตล่ม ใช้แพ็กเกจมือถือในต่างประเทศที่ค่าใช้จ่ายหนัก หรือแค่อยากกำจัดโฆษณาห่วย ๆ
ที่เกี่ยวข้อง: Yark: YouTube Archiver with Offline UI
https://news.ycombinator.com/item?id=41100820
หากนำเซิร์ฟเวอร์ตัวใดตัวหนึ่งที่ใช้
yt-dlpมาครอบด้วย เครื่องมือสร้างอิมเมจแบบง่าย ๆ คล้าย Pi-hole และแอปไคลเอนต์ฟรอนต์เอนด์สำหรับเล่นที่พอใช้ได้ ผมคิดว่ามันอาจดังขึ้นมาได้มากเหมือนที่ Pi-hole แพร่หลายในหมู่ผู้ใช้ที่ไม่ค่อยถนัดเทคนิคแนวทางคือซื้อ Raspberry Pi, เขียนอิมเมจลงการ์ด microSD, เลือกช่อง YouTube ที่ชอบ แล้วติดตั้งแอปไคลเอนต์ จากนั้นคอนเทนต์ YouTube ที่ชอบทั้งหมดก็จะพร้อมใช้งานแบบโลคัลโดยไม่มีโฆษณา
ตอนนี้ผมใช้ TubeSync อยู่ ฟังก์ชันเรียบง่ายและมีบั๊กเยอะ แต่สำหรับผมมันทำงานได้ดีพอ
สิ่งที่ต้องทำก็แค่สมัครติดตามช่องหรือเพลย์ลิสต์, ดาวน์โหลดวิดีโอลงพาธที่กำหนด และตรวจสอบคอนเทนต์ใหม่วันละครั้ง
UX ที่จำเป็นมีแค่การตั้งค่าช่อง จากนั้นก็แค่เก็บไฟล์ไว้แล้วปล่อยให้ Plex จัดการเอง มีใครรู้ตัวเลือกที่ดีกว่านี้ไหม?