ข้ามไปยังเนื้อหาหลัก
ลด 50% ทุกแพลน เวลาจำกัด เริ่มต้นที่ $2.48/mo
เหลือ 11 นาที
เกมและสื่อ

รัน yt-dlp บน VPS เพื่อเก็บคลังวิดีโอส่วนตัวแบบไม่มีหน้าจอ

S โดย Sajjad 11 นาทีในการอ่าน
yt-dlp running headless on a VPS, feeding scheduled downloads into an organized video library that a media server can scan

การรัน yt-dlp บน VPS ทำให้งานดาวน์โหลดยาว ๆ มีเครื่องที่ยังออนไลน์อยู่แม้คุณจะปิดโน้ตบุ๊กไปแล้ว ทั้งยังสร้างเส้นทางที่ชัดเจนจากการดึงช่องตามกำหนดเวลา ไปสู่คลังสื่อที่ Jellyfin สแกนได้

เซิร์ฟเวอร์เปลี่ยนสามส่วนของกระบวนการทำงาน คือ การติดตั้งต้องใช้ส่วนประกอบของ YouTube รุ่นปัจจุบัน วิดีโอที่ต้องมีบัญชีต้องใช้การส่งคุกกี้อย่างปลอดภัย และการทำงานอัตโนมัติต้องกำหนดจังหวะการส่งคำขออย่างตั้งใจ การตั้งค่าด้านล่างจัดการครบทั้งสามส่วน โดยไม่เหมาเอาว่าทุกการดาวน์โหลดต้องใช้คุกกี้ หน้าเว็บ หรือผู้ให้บริการ PO Token

TL;DR (สรุปย่อ)

  • ติดตั้ง yt-dlp ในสภาพแวดล้อมเสมือนของ Python พร้อมกับ ffmpeg, ffprobe, yt-dlp-ejs และรันไทม์ JavaScript ที่รองรับ โดยรันไทม์ที่โครงการแนะนำในตอนนี้คือ Deno
  • เริ่มโดยยังไม่ใช้คุกกี้ของบัญชี แล้วค่อยเพิ่มเฉพาะกรณีเพลย์ลิสต์ส่วนตัว วิดีโอที่จำกัดอายุ เนื้อหาเฉพาะสมาชิก หรือกรณีอื่นที่ต้องใช้บัญชี
  • คงพฤติกรรมเริ่มต้นของ yt-dlp ที่ดาวน์โหลดทีละแฟรกเมนต์ไว้ก่อน จนกว่าจะมีเหตุผลจากการวัดผลจริงให้เปลี่ยน ใช้ตัวเลือกหน่วงเวลาและจัดตารางเวลาให้เหลื่อมกัน เพื่อลดแรงกดดันจากคำขอ
  • การใช้ CLI ล้วน ๆ ร่วมกับ systemd คือชุดที่เรียบง่ายและพึ่งพาได้ที่สุด เลือก Pinchflat หากต้องการกฎสำหรับช่องที่ทำงานเองโดยไม่ต้องดูแล เลือก MeTube หากอยากได้คิวผ่านเบราว์เซอร์ หรือเลือก Tube Archivist หากต้องการหน้าจอรับชมที่ค้นหาได้
  • ให้ถือว่าพื้นที่จัดเก็บคือตัวแปรหลักในการกำหนดขนาด ทดสอบด้วยตัวอย่างที่เป็นตัวแทนก่อนจะซื้อความจุดิสก์สำหรับคลังทั้งชุด

ใช้ yt-dlp อย่างมีความรับผิดชอบ

ให้เก็บสื่อไว้ก็ต่อเมื่อคุณได้รับอนุญาต และการใช้งานของคุณเป็นไปตามข้อกำหนดของแพลตฟอร์มและกฎหมายที่เกี่ยวข้อง

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

สิ่งที่ต้องมีก่อนเริ่ม

ตัวติดตั้งพื้นฐานมีขนาดเล็ก แต่ไฟล์สื่อไม่เล็ก เตรียมเซิร์ฟเวอร์และเส้นทางจัดเก็บให้พร้อมก่อนดาวน์โหลดทั้งช่อง

  • VPS ที่ใช้ Ubuntu 22.04 ขึ้นไป หรือ Debian รุ่นปัจจุบัน พร้อมการเข้าถึงผ่าน SSH
  • Python 3.10 ขึ้นไป
  • พื้นที่จัดเก็บที่พอสำหรับตัวอย่างที่เป็นตัวแทน บวกที่ว่างเผื่อไฟล์ที่ยังไม่เสร็จและการประมวลผลหลังดาวน์โหลด
  • เบราว์เซอร์แยกอีกตัวบนเครื่องของคุณ เฉพาะกรณีที่ต้องใช้คุกกี้ของบัญชี
  • ไม่บังคับ: Jellyfin, Emby หรือมีเดียเซิร์ฟเวอร์อื่นที่อ่านไดเรกทอรีของคลังได้

ทำไมถึงควรเอา yt-dlp ไปไว้บน VPS

VPS มีประโยชน์เมื่องานต้องเดินหน้าต่อไปโดยไม่ขึ้นกับคอมพิวเตอร์ที่คุณใช้ประจำ มันให้โปรเซสที่คงอยู่ ระบบไฟล์ที่คาดเดาได้ และตัวจัดตารางเวลาที่ไม่หยุดเมื่อโน้ตบุ๊กเข้าสู่โหมดสลีปหรือเปลี่ยนเครือข่าย

ข้อแลกเปลี่ยนมีความสำคัญ โควตาการรับส่งข้อมูลรายเดือนของเซิร์ฟเวอร์อาจกลายเป็นข้อจำกัดเมื่อคุณสตรีมคลังนั้นออกไป และ IP ของ VPS อาจชนขีดจำกัดคำขอเร็วกว่าอินเทอร์เน็ตที่บ้าน อีกทั้งคุณต้องดูแลการอัปเดต การจัดการข้อมูลรับรอง การสำรองข้อมูล การเคลียร์พื้นที่ และความปลอดภัยของมีเดียเซิร์ฟเวอร์เอง หากดาวน์โหลดครั้งเดียวจบ ใช้โน้ตบุ๊กง่ายกว่า แต่ถ้าต้องดึงซ้ำ ๆ หรือมีคลังสื่อที่ใช้ร่วมกัน VPS จะดูแลง่ายกว่า

กำหนดขนาด VPS โดยยึดพื้นที่จัดเก็บและการเล่นวิดีโอ

yt-dlp VPS sizing guide: starting allocations of 2 vCPU and 2 GB RAM for raw yt-dlp with systemd, 2 vCPU and 4 GB RAM for MeTube or Pinchflat, and 4 vCPU and 8 GB RAM for Tube Archivist, beside a method for projecting storage from a sample download

yt-dlp ทำหน้าที่ดาวน์โหลดและรีมักซ์สื่อ โดยปกติจะไม่ทรานส์โค้ดทุกไฟล์ นั่นทำให้ความต้องการ CPU และหน่วยความจำแบบต่อเนื่องของตัวดาวน์โหลดอยู่ในระดับไม่มาก ขณะที่การใช้พื้นที่ดิสก์จะแปรผันตามความยาววิดีโอ ความละเอียด ตัวแปลงสัญญาณ และรูปแบบที่เลือก

ให้ใช้ตัวเลขเหล่านี้เป็นจุดตั้งต้นแบบเผื่อไว้ ไม่ใช่ข้อกำหนดขั้นต่ำอย่างเป็นทางการ:

การติดตั้งทรัพยากรตั้งต้นแนวทางเรื่องพื้นที่จัดเก็บที่เหมาะสมที่สุด
yt-dlp ล้วน ๆ ร่วมกับ systemd2 vCPU, 2 GB RAMกำหนดขนาดจากตัวอย่างดาวน์โหลดตามกำหนดเวลาโดยไม่มีหน้าจอ
MeTube หรือ Pinchflat2 vCPU, 4 GB RAMกำหนดขนาดจากตัวอย่างคิวผ่านเบราว์เซอร์ หรือการติดตามช่อง
Tube Archivist4 vCPU, 8 GB RAMดิสก์ในเครื่องที่เผื่อพื้นที่ให้โตต่อได้คลังที่ค้นหาได้พร้อมการเล่นในตัว

การทดสอบขนาดเล็กต้องใช้หน่วยความจำว่างราว 2 GB ส่วนการติดตั้งขนาดกลางถึงใหญ่ราว 4 GB ตามที่ระบุใน คู่มือการติดตั้ง Tube Archivist. การเริ่มต้นสูงกว่าเกณฑ์ขั้นต่ำนั้นจะเหลือที่ให้ระบบปฏิบัติการ Docker การทำงานของ Elasticsearch และบริการอื่นอย่าง Jellyfin

ก่อนกำหนดขนาดของคลังทั้งชุด ให้ลองจำลองหรือดาวน์โหลดกลุ่มตัวอย่างที่เป็นตัวแทนด้วยความละเอียดที่คุณเลือก จากนั้นตรวจไดเรกทอรีที่ได้ด้วย du หารด้วยจำนวนวิดีโอที่ดาวน์โหลดเสร็จ และเผื่อสำหรับคลิปที่ยาวผิดปกติด้วย

du -sh ~/archive
find ~/archive -type f \( -name '*.mp4' -o -name '*.mkv' \) | wc -l
df -h ~/archive

การใช้ตัวอย่างจริงมีประโยชน์กว่าการประมาณแบบกว้าง ๆ ว่ากี่กิกะไบต์ต่อวิดีโอ เพราะสะท้อนความยาวและส่วนผสมของรูปแบบไฟล์ที่ช่องนั้นใช้จริง

ติดตั้ง yt-dlp และส่วนประกอบที่จำเป็นรุ่นปัจจุบัน

โครงการ yt-dlp รองรับ Python 3.10 ขึ้นไป โดย รายการส่วนประกอบที่จำเป็นของ yt-dlp แนะนำอย่างยิ่งให้ใช้ ffmpeg, ffprobe, yt-dlp-ejs และรันไทม์ JavaScript ที่รองรับ เพื่อให้รองรับ YouTube ได้เต็มรูปแบบ

เริ่มจากแพ็กเกจของระบบและสภาพแวดล้อม Python ที่แยกออกมา:

sudo apt update
sudo apt install -y python3 python3-venv ffmpeg curl nano
python3 -m venv ~/yt-dlp-venv
source ~/yt-dlp-venv/bin/activate
python -m pip install -U --pre "yt-dlp[default]"

Deno ถูกเปิดใช้งานเป็นค่าเริ่มต้นใน yt-dlp และเป็นรันไทม์ที่ คู่มือ EJS คู่มือ EJS ของโครงการแนะนำอยู่ในตอนนี้ ให้ติดตั้ง เพิ่มลงในพาธของเชลล์ แล้วตรวจสอบทุกส่วนประกอบ:

curl -fsSL https://deno.land/install.sh | sh
export PATH="$HOME/.deno/bin:$PATH"
echo 'export PATH="$HOME/.deno/bin:$PATH"' >> ~/.profile
yt-dlp --version
ffmpeg -version | head -1
deno --version
yt-dlp --simulate --verbose "https://www.youtube.com/watch?v=VIDEO_ID"

ผลลัพธ์แบบละเอียดจะแสดงรายการส่วนประกอบที่ yt-dlp มองเห็น หากไม่มี ffmpeg ตัว yt-dlp จะเตือน และจะรวมสตรีมวิดีโอกับเสียงคุณภาพสูงสุดที่แยกกันไม่ได้ อีกทั้งยังทำขั้นตอนประมวลผลหลังดาวน์โหลดหลายอย่างไม่ได้ด้วย

หากติดตั้งด้วย pip ให้อัปเดตโดยรัน pip ซ้ำภายในสภาพแวดล้อมเสมือน ส่วนคำสั่ง yt-dlp -U ที่มีมาในตัวนั้นใช้กับไฟล์ไบนารีของรุ่นที่เผยแพร่ ไม่ใช่แพ็กเกจ pip

source ~/yt-dlp-venv/bin/activate
python -m pip install -U --pre "yt-dlp[default]"

ช่องทางการอัปเดตอธิบายไว้ใน บันทึกการอัปเดตของ yt-dlp. มีทั้งช่องทาง stable, nightly และ master ให้เลือก โดยโครงการแนะนำ nightly สำหรับผู้ใช้ทั่วไป เพราะการแก้ไขตัวดึงข้อมูลจะมาถึงช่องทางนี้ก่อนรุ่นเสถียรถัดไป

เพิ่มคุกกี้เฉพาะเนื้อหาที่ต้องใช้บัญชีเท่านั้น

ให้ลองเปิด URL เป้าหมายโดยไม่ใช้คุกกี้ก่อน คู่มือ YouTube ของ yt-dlp ระบุว่าคุกกี้จำเป็นเฉพาะกับเนื้อหาที่ต้องมีบัญชีเท่านั้น ซึ่งรวมถึงเพลย์ลิสต์ส่วนตัว วิดีโอที่จำกัดอายุ และเนื้อหาเฉพาะสมาชิก ส่วนการเข้าสู่ระบบด้วย OAuth นั้นใช้กับ yt-dlp ไม่ได้อีกแล้ว

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

  1. เปิดหน้าต่างส่วนตัวหรือหน้าต่างไม่ระบุตัวตนเพียงหน้าต่างเดียว แล้วลงชื่อเข้าใช้ YouTube
  2. ในแท็บเดียวกันนั้น ให้เปิดไฟล์ robots.txt ของ YouTube
  3. ส่งออกเฉพาะคุกกี้ของ youtube.com ในรูปแบบ Netscape โดยใช้ส่วนขยายตัวใดตัวหนึ่งที่ระบุไว้ในคำถามที่พบบ่อยของ yt-dlp
  4. ปิดหน้าต่างส่วนตัวนั้น และอย่าเปิดเซสชันเดิมขึ้นมาอีก
  5. คัดลอกไฟล์ไปยัง VPS แล้วจำกัดสิทธิ์การเข้าถึงของไฟล์นั้น
scp cookies.txt your-user@your-vps-ip:~/cookies.txt
ssh your-user@your-vps-ip 'chmod 600 ~/cookies.txt'

ทดสอบไฟล์นั้นด้วย URL ที่ต้องมีบัญชี:

~/yt-dlp-venv/bin/yt-dlp \
  --cookies ~/cookies.txt \
  --simulate \
  "https://www.youtube.com/watch?v=VIDEO_ID"

ไฟล์คุกกี้คือข้อมูลรับรองของเซสชัน และการเลือกส่วนขยายเบราว์เซอร์ต้องทำอย่างระมัดระวัง ตามที่ระบุใน คำถามที่พบบ่อยเรื่องคุกกี้ของ yt-dlp. คู่มือตัวดึงข้อมูลของ YouTube ยังเตือนด้วยว่า การใช้บัญชีร่วมกับ yt-dlp อาจนำไปสู่การถูกระงับชั่วคราวหรือถาวร ให้ใช้คุกกี้เฉพาะเมื่อเป้าหมายต้องการเท่านั้น เก็บไฟล์ไว้เป็นความลับ และใช้บัญชีแยกต่างหากแทนบัญชี Google หลักของคุณ

อย่าใส่ --cookies ไว้ในไฟล์ตั้งค่าส่วนกลาง หากเป้าหมายส่วนใหญ่เป็นเนื้อหาสาธารณะ ให้ใช้ไฟล์ตั้งค่าอีกไฟล์หนึ่ง หรือเติมแฟล็กนี้เฉพาะงานที่จำเป็นจริง ๆ

ให้มอง PO Token เป็นการแก้ปัญหาเฉพาะกรณี

yt-dlp access troubleshooting flow: simulate the URL first, then branch to no cookies needed for a working public video, a cookie export for account-gated content, or a dependency update and PO Token check when failures continue

Proof of Origin Token ไม่ใช่ข้อกำหนดที่ต้องมีเสมอในการติดตั้ง ปัจจุบัน YouTube บังคับใช้โทเค็นเหล่านี้กับบางชุดของไคลเอนต์และคำขอเท่านั้น และรายละเอียดที่แน่นอนก็เปลี่ยนแปลงอยู่เรื่อย ๆ

เมื่อไคลเอนต์เริ่มต้นใช้ไม่ได้ จะมีการแนะนำให้ใช้ปลั๊กอินผู้ให้บริการสำหรับไคลเอนต์ mweb ตามที่ระบุใน คู่มือ PO Token ของ yt-dlp. โดยระบุ bgutil-ytdlp-pot-provider ไว้เป็นหนึ่งในตัวเลือกเด่น แต่ปลั๊กอินนี้ต้องมีทั้งตัวให้บริการโทเค็นและปลั๊กอินฝั่ง yt-dlp การติดตั้งแพ็กเกจ Python เพียงอย่างเดียวยังไม่ถือว่าตั้งค่าครบ

เมื่อการดาวน์โหลดจาก YouTube ล้มเหลว ให้ทำตามลำดับนี้:

  1. อัปเดต yt-dlp, yt-dlp-ejs และรันไทม์ JavaScript
  2. ทำให้เกิดข้อผิดพลาดซ้ำด้วย --verbose โดยไม่ระบุไคลเอนต์แทนที่เพิ่มเติม
  3. เพิ่มคุกกี้เฉพาะเมื่อวิดีโอนั้นต้องมีบัญชีเท่านั้น
  4. หากข้อผิดพลาดชี้ไปที่การบังคับใช้ PO Token ให้ทำตามคำแนะนำล่าสุดของผู้ให้บริการที่ลิงก์ไว้จากคู่มืออย่างเป็นทางการ

วิธีนี้ช่วยกันไม่ให้วิธีแก้ขัดที่เปลี่ยนแปลงบ่อย เข้าไปปะปนกับการติดตั้งพื้นฐานที่เสถียรอยู่แล้ว

เลือกหน้าจอใช้งานตามรูปแบบการทำงาน

การตัดสินใจหลักไม่ใช่ว่าหน้าจอไหนมีรายการฟีเจอร์ยาวกว่ากัน แต่ให้ตัดสินว่าคุณต้องการคิวผ่านเบราว์เซอร์ การติดตามแบบมีกฎเกณฑ์ หรือคลังในเครื่องที่ครบเครื่องแบบ YouTube

ตัวเลือกวิธีการปรับใช้จุดแข็งข้อแลกเปลี่ยนหลัก
CLI ล้วน ๆไม่มีหน้าจอใช้งานสคริปต์ ไฟล์ตั้งค่า systemd และการควบคุมตัวเลือกได้อย่างละเอียดไม่มีหน้าจอผ่านเบราว์เซอร์
MeTubeคอนเทนเนอร์ Docker เดียวดาวน์โหลดผ่านเบราว์เซอร์ พร้อมการติดตามช่องและเพลย์ลิสต์จัดการคลังหลังดาวน์โหลดได้จำกัด
Pinchflatคอนเทนเนอร์ Docker เดียวกฎสำหรับช่องและเพลย์ลิสต์ RSS การเก็บรักษา และไฟล์ที่จัดรูปแบบให้มีเดียเซ็นเตอร์ออกแบบมาเพื่อจัดการดาวน์โหลด ไม่ใช่เพื่อดูภายในแอป
Tube Archivistคอนเทนเนอร์ของแอป, Redis และ Elasticsearchการค้นหา ข้อมูลกำกับ คิวงาน หน้าช่อง และการเล่นวิดีโอใช้หน่วยความจำและมีภาระในการดูแลสูงที่สุด

สำหรับการทำงานผ่านเบราว์เซอร์แบบเบา ๆ MeTube รองรับการติดตามช่องและเพลย์ลิสต์ ซึ่งจะคอยตรวจรายการใหม่เป็นระยะแล้วเพิ่มเข้าคิวให้อัตโนมัติ มันยังเป็นตัวเลือกที่ง่ายที่สุดเมื่อคุณต้องการเพียงแบบฟอร์มบนเว็บกับคิวดาวน์โหลด

Pinchflat เหมาะที่สุดกับการเก็บสะสมช่องอย่างต่อเนื่อง เพื่อนำไปดูผ่าน Jellyfin, Plex, Kodi หรือโปรแกรมอ่าน RSS มันทำงานได้ครบในตัว คอยตรวจแหล่งที่มาเป็นระยะ รองรับกฎการเก็บรักษา และตั้งใจปล่อยเรื่องการเล่นวิดีโอให้แอปอื่นจัดการ

Tube Archivist จะคุ้มกับบริการส่วนเกินที่ต้องรัน ก็ต่อเมื่อคุณอยากให้ตัวคลังเองทำตัวเหมือนเว็บวิดีโอที่ค้นหาได้ หาก Jellyfin ทำหน้าที่เป็นหน้าจอรับชมให้อยู่แล้ว ให้เริ่มจาก CLI ล้วน ๆ หรือ Pinchflat ก่อน แล้วค่อยเพิ่ม Tube Archivist เมื่อระบบค้นหาและข้อมูลกำกับของมันแก้ปัญหาที่คุณเจอจริง ๆ

สร้างไฟล์ตั้งค่าสำหรับเก็บคลังที่ใช้ซ้ำได้

เก็บตัวเลือกที่ใช้ประจำไว้ในไฟล์เดียว แล้วส่ง URL ของช่องเข้ามาทางบรรทัดคำสั่งหรือตัวจัดตารางเวลา ตัวอย่างนี้จำกัดผลลัพธ์ไว้ที่ 1080p บันทึกรหัสวิดีโอที่ดาวน์โหลดเสร็จแล้ว เพิ่มการเว้นจังหวะคำขอเล็กน้อย และเขียนข้อมูลกำกับที่ยังใช้ประโยชน์ได้แม้อยู่นอก yt-dlp

สร้างไดเรกทอรีและไฟล์ตั้งค่า:

mkdir -p ~/.config/yt-dlp ~/archive
nano ~/.config/yt-dlp/archive.conf

เพิ่มตัวเลือกเหล่านี้:

-P "~/archive"
-o "%(channel)s/%(upload_date>%Y-%m-%d)s - %(title)s [%(id)s].%(ext)s"
-f "bv*[height<=1080]+ba/b[height<=1080]"
--merge-output-format mp4
--download-archive ~/archive/downloaded.txt
--sleep-requests 1
--sleep-interval 5
--max-sleep-interval 10
--write-info-json
--write-thumbnail
--write-subs
--write-auto-subs
--sub-langs en.*
--embed-subs
--embed-thumbnail
--embed-metadata
--sponsorblock-mark all

ทดสอบกับวิดีโอเดียวก่อน แล้วค่อยให้ yt-dlp ทำงานกับทั้งช่อง:

~/yt-dlp-venv/bin/yt-dlp \
  --config-location ~/.config/yt-dlp/archive.conf \
  "https://www.youtube.com/watch?v=VIDEO_ID"

จากนั้นสั่งรัน URL ของช่องหรือเพลย์ลิสต์ด้วยไฟล์ตั้งค่าเดียวกัน:

~/yt-dlp-venv/bin/yt-dlp \
  --config-location ~/.config/yt-dlp/archive.conf \
  "https://www.youtube.com/@CHANNEL/videos"

ไฟล์ --download-archive จะบันทึกรหัสของวิดีโอที่ดาวน์โหลดสำเร็จ การรันครั้งถัดไปจึงข้ามรายการเหล่านั้นไป ช่วงแรกให้คงค่าเริ่มต้น --concurrent-fragments 1 ไว้ก่อน คู่มือ YouTube ของ yt-dlp แนะนำให้เว้นระยะระหว่างวิดีโอเมื่อเซสชันชนขีดจำกัดคำขอ แต่ไม่ได้ประกาศเพดานความขนานของแฟรกเมนต์ที่ปลอดภัยเป็นสากลสำหรับ IP ของ VPS

ตั้งเวลาดาวน์โหลดด้วย systemd

ตัวจับเวลาของ systemd ระดับผู้ใช้ ให้การตั้งเวลาที่คงอยู่และมีบันทึกให้ดู โดยไม่ต้องยัดคำสั่งยาว ๆ ลงใน cron ส่วนการหน่วงแบบสุ่มยังช่วยไม่ให้ทุกแหล่งที่ตั้งเวลาไว้เริ่มพร้อมกันในวินาทีเดียว และเพื่อไม่ต้องพึ่ง PATH ของตัวจัดการระดับผู้ใช้ ตัวเซอร์วิสจึงชี้ yt-dlp ไปยังตำแหน่งติดตั้งเริ่มต้นของ Deno โดยตรง

สร้างเซอร์วิส:

mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/yt-dlp-archive.service
[Unit]
Description=Archive a YouTube channel with yt-dlp

[Service]
Type=oneshot
ExecStart=%h/yt-dlp-venv/bin/yt-dlp --js-runtimes deno:%h/.deno/bin/deno --config-location %h/.config/yt-dlp/archive.conf https://www.youtube.com/@CHANNEL/videos

สร้างตัวจับเวลา:

nano ~/.config/systemd/user/yt-dlp-archive.timer
[Unit]
Description=Run the yt-dlp archive daily

[Timer]
OnCalendar=*-*-* 04:00:00
RandomizedDelaySec=30m
Persistent=true

[Install]
WantedBy=timers.target

เปิดใช้งานตัวจับเวลา และอนุญาตให้เซอร์วิสระดับผู้ใช้ทำงานได้แม้คุณไม่ได้ล็อกอินอยู่:

systemctl --user daemon-reload
systemctl --user enable --now yt-dlp-archive.timer
sudo loginctl enable-linger "$USER"
systemctl --user list-timers
journalctl --user -u yt-dlp-archive.service -n 100 --no-pager

หากมีหลายช่อง ให้สร้างเซอร์วิสแยกหนึ่งชุดต่อหนึ่งช่อง หรือใช้ตัวจับเวลาแยกกัน แล้วจัดเวลาให้เหลื่อมกัน แทนที่จะสั่งดึงงานใหญ่หลายรายการพร้อมกัน

เชื่อมคลังเข้ากับ Jellyfin

เมานต์หรือเปิดให้ Jellyfin เข้าถึงไดเรกทอรี ~/archive เดียวกันนั้น แล้วเพิ่มเป็นไลบรารี สำหรับโครงสร้างดิบแบบช่อง/วันที่ ไลบรารีแบบ Music Videos ของ Jellyfin รองรับโฟลเดอร์ซ้อนกันและชื่อไฟล์ตามใจ โดยไม่ไปจับคู่ข้อมูลกำกับจากออนไลน์ ป้ายชื่อนี้อาจไม่ตรงนักสำหรับคลังที่ไม่ใช่เพลง แต่เข้ากับโครงสร้างไฟล์ได้ดีกว่าประเภท "Shows" ซึ่งคาดหวังโฟลเดอร์ซีรีส์และซีซัน พร้อมชื่อตอนแบบ SxxEyy และควรเลี่ยง Mixed Content เว้นแต่คุณยอมรับคำเตือนของ Jellyfin ว่าผลลัพธ์ข้อมูลกำกับอาจเชื่อถือไม่ได้

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

หากอยากได้ชื่อไฟล์และข้อมูลกำกับที่เข้ากับ Jellyfin โดยลงมือเองน้อยลง Pinchflat มีค่าตั้งสำเร็จสำหรับมีเดียเซ็นเตอร์ที่รองรับแนวทางนี้ ส่วนการเลือกระหว่างมีเดียเซิร์ฟเวอร์ในภาพกว้างกว่านั้น บทเปรียบเทียบ Jellyfin กับ Plex ของเรา ครอบคลุมข้อแลกเปลี่ยนเรื่องการเล่นวิดีโอ การเข้าถึงระยะไกล และการทรานส์โค้ด

ย้ายทั้งชุดไปไว้บนเซิร์ฟเวอร์ที่เปิดตลอด

เมื่อกระบวนการทำงานได้ผลกับชุดทดสอบเล็ก ๆ แล้ว ให้ย้ายไปไว้บน Linux VPS ของ Cloudzy เพื่อให้การดาวน์โหลดตามกำหนดเวลาและคลังสื่อของคุณออนไลน์อยู่ได้ โดยไม่ต้องผูกคอมพิวเตอร์ที่ใช้ประจำไว้ นอกจากนี้คุณยังติดตั้ง Jellyfin แบบแอปติดตั้งคลิกเดียว แล้วชี้ไลบรารีของมันไปยังไดเรกทอรีปลายทางของ yt-dlp

ดูแพ็กเกจ Linux

พัฒนาบน Linux VPS พร้อมสิทธิ์รูท, NVMe และพลัง AMD EPYC

ดูแพ็กเกจ Linux

คำถามที่พบบ่อย

yt-dlp ต้องใช้ GPU บน VPS หรือไม่

ไม่ต้อง yt-dlp ดาวน์โหลดและรีมักซ์สื่อได้โดยไม่ใช้ GPU สิ่งที่ทำให้ GPU มีความสำคัญคือเมื่อ Jellyfin หรือมีเดียเซิร์ฟเวอร์อื่นต้องทรานส์โค้ดวิดีโอให้ไคลเอนต์ที่ไม่รองรับ หรือให้การเชื่อมต่อที่แบนด์วิดท์ต่ำกว่า ส่วนการเล่นแบบตรงไม่ต้องแปลงแบบนั้น

yt-dlp ดาวน์โหลดต่อจากที่ค้างไว้ได้หรือไม่

ได้ yt-dlp เปิดใช้ไฟล์ที่ยังไม่เสร็จและการดาวน์โหลดต่อไว้เป็นค่าเริ่มต้น การรันครั้งถัดไปจึงมักทำต่อจากแฟรกเมนต์ที่โหลดไว้แล้ว แทนที่จะเริ่มใหม่ หากต้องการพฤติกรรมแบบนี้ อย่าเติม --no-continue, --no-part หรือ --force-overwrites

ควรให้ yt-dlp กับ Jellyfin ใช้ VPS เครื่องเดียวกันหรือไม่

ใช้ VPS เครื่องเดียวกันได้ หากพื้นที่จัดเก็บ CPU และปริมาณข้อมูลขาออกเพียงพอสำหรับทั้งสองงาน แต่ควรแยกกัน เมื่อการเล่นวิดีโอหรือการทรานส์โค้ดต้องแย่งทรัพยากรกับการดาวน์โหลดก้อนใหญ่ เมื่อคุณต้องการช่วงเวลาบำรุงรักษาที่แยกอิสระ หรือเมื่อคลังข้อมูลควรอยู่บนพื้นที่จัดเก็บที่ถูกกว่าเครื่องที่ใช้สตรีม

แชร์

การสนทนา

ความคิดเห็น

เข้าสู่ระบบเพื่อร่วมสนทนา

บทความเพิ่มเติมจากบล็อก

อ่านต่อ

ภาพประกอบ BlueStacks ที่กำลังรันแอปและเกม Android บนคอมพิวเตอร์ตั้งโต๊ะ
เกมและสื่อ

BlueStacks คืออะไร และคุ้มที่จะติดตั้งหรือไม่?

BlueStacks คืออะไร? โปรแกรมจำลอง Android ฟรีสำหรับ PC รีวิวนี้ครอบคลุมโฆษณา Prime ข้อกำหนดของ PC และความคุ้มค่าในการติดตั้งบนเครื่องของคุณ

Flint 14 นาทีในการอ่าน
AI chat window returning a diagnosis next to a Minecraft crash log and KubeJS recipe script
เกมและสื่อ

ห้าวิธีใช้งาน ChatGPT อย่างได้ผลจริงสำหรับการพัฒนา Modpack ของ Minecraft

ห้าพรอมต์ ChatGPT ที่ระบุเวอร์ชันชัดเจนสำหรับการพัฒนา Modpack ของ Minecraft: วิเคราะห์ crash log, สูตร KubeJS, FTB Quests, การคัดเลือกม็อด & changelog

Bill 14 นาทีในการอ่าน
A Minecraft player facing an AI companion as stored memories shift between limited recall, bot-data deletion, and account deletion
เกมและสื่อ

ม็อด Minecraft ที่จดจำคุณได้ และจะเกิดอะไรขึ้นเมื่อคุณลบความทรงจำของมัน

ดูว่าความทรงจำ VoxelMind ใน Minecraft จะเป็นอย่างไรเมื่อคุณยกเลิกแพ็กเกจ ลบข้อมูลบอท หรือลบบัญชีของคุณ

Dan 9 นาทีในการอ่าน

พร้อมติดตั้งหรือยัง? เริ่มต้น $2.48/เดือน

คลาวด์อิสระ ตั้งแต่ปี 2008 AMD EPYC, NVMe, 40 Gbps คืนเงินภายใน 14 วัน