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

รัน 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 และปริมาณข้อมูลขาออกเพียงพอสำหรับทั้งสองงาน แต่ควรแยกกัน เมื่อการเล่นวิดีโอหรือการทรานส์โค้ดต้องแย่งทรัพยากรกับการดาวน์โหลดก้อนใหญ่ เมื่อคุณต้องการช่วงเวลาบำรุงรักษาที่แยกอิสระ หรือเมื่อคลังข้อมูลควรอยู่บนพื้นที่จัดเก็บที่ถูกกว่าเครื่องที่ใช้สตรีม

แชร์

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

อ่านต่อ

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 วัน