การรัน 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 ทำหน้าที่ดาวน์โหลดและรีมักซ์สื่อ โดยปกติจะไม่ทรานส์โค้ดทุกไฟล์ นั่นทำให้ความต้องการ CPU และหน่วยความจำแบบต่อเนื่องของตัวดาวน์โหลดอยู่ในระดับไม่มาก ขณะที่การใช้พื้นที่ดิสก์จะแปรผันตามความยาววิดีโอ ความละเอียด ตัวแปลงสัญญาณ และรูปแบบที่เลือก
ให้ใช้ตัวเลขเหล่านี้เป็นจุดตั้งต้นแบบเผื่อไว้ ไม่ใช่ข้อกำหนดขั้นต่ำอย่างเป็นทางการ:
| การติดตั้ง | ทรัพยากรตั้งต้น | แนวทางเรื่องพื้นที่จัดเก็บ | ที่เหมาะสมที่สุด |
|---|---|---|---|
| yt-dlp ล้วน ๆ ร่วมกับ systemd | 2 vCPU, 2 GB RAM | กำหนดขนาดจากตัวอย่าง | ดาวน์โหลดตามกำหนดเวลาโดยไม่มีหน้าจอ |
| MeTube หรือ Pinchflat | 2 vCPU, 4 GB RAM | กำหนดขนาดจากตัวอย่าง | คิวผ่านเบราว์เซอร์ หรือการติดตามช่อง |
| Tube Archivist | 4 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 หมุนเปลี่ยนเซสชันที่ส่งออกไปแล้วในแท็บปกติที่ยังเปิดอยู่:
- เปิดหน้าต่างส่วนตัวหรือหน้าต่างไม่ระบุตัวตนเพียงหน้าต่างเดียว แล้วลงชื่อเข้าใช้ YouTube
- ในแท็บเดียวกันนั้น ให้เปิดไฟล์ robots.txt ของ YouTube
- ส่งออกเฉพาะคุกกี้ของ youtube.com ในรูปแบบ Netscape โดยใช้ส่วนขยายตัวใดตัวหนึ่งที่ระบุไว้ในคำถามที่พบบ่อยของ yt-dlp
- ปิดหน้าต่างส่วนตัวนั้น และอย่าเปิดเซสชันเดิมขึ้นมาอีก
- คัดลอกไฟล์ไปยัง 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 เป็นการแก้ปัญหาเฉพาะกรณี
Proof of Origin Token ไม่ใช่ข้อกำหนดที่ต้องมีเสมอในการติดตั้ง ปัจจุบัน YouTube บังคับใช้โทเค็นเหล่านี้กับบางชุดของไคลเอนต์และคำขอเท่านั้น และรายละเอียดที่แน่นอนก็เปลี่ยนแปลงอยู่เรื่อย ๆ
เมื่อไคลเอนต์เริ่มต้นใช้ไม่ได้ จะมีการแนะนำให้ใช้ปลั๊กอินผู้ให้บริการสำหรับไคลเอนต์ mweb ตามที่ระบุใน คู่มือ PO Token ของ yt-dlp. โดยระบุ bgutil-ytdlp-pot-provider ไว้เป็นหนึ่งในตัวเลือกเด่น แต่ปลั๊กอินนี้ต้องมีทั้งตัวให้บริการโทเค็นและปลั๊กอินฝั่ง yt-dlp การติดตั้งแพ็กเกจ Python เพียงอย่างเดียวยังไม่ถือว่าตั้งค่าครบ
เมื่อการดาวน์โหลดจาก YouTube ล้มเหลว ให้ทำตามลำดับนี้:
- อัปเดต yt-dlp, yt-dlp-ejs และรันไทม์ JavaScript
- ทำให้เกิดข้อผิดพลาดซ้ำด้วย --verbose โดยไม่ระบุไคลเอนต์แทนที่เพิ่มเติม
- เพิ่มคุกกี้เฉพาะเมื่อวิดีโอนั้นต้องมีบัญชีเท่านั้น
- หากข้อผิดพลาดชี้ไปที่การบังคับใช้ 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 VPS พร้อมสิทธิ์รูท, NVMe และพลัง AMD EPYC
ดูแพ็กเกจ Linuxคำถามที่พบบ่อย
yt-dlp ต้องใช้ GPU บน VPS หรือไม่
ไม่ต้อง yt-dlp ดาวน์โหลดและรีมักซ์สื่อได้โดยไม่ใช้ GPU สิ่งที่ทำให้ GPU มีความสำคัญคือเมื่อ Jellyfin หรือมีเดียเซิร์ฟเวอร์อื่นต้องทรานส์โค้ดวิดีโอให้ไคลเอนต์ที่ไม่รองรับ หรือให้การเชื่อมต่อที่แบนด์วิดท์ต่ำกว่า ส่วนการเล่นแบบตรงไม่ต้องแปลงแบบนั้น
yt-dlp ดาวน์โหลดต่อจากที่ค้างไว้ได้หรือไม่
ได้ yt-dlp เปิดใช้ไฟล์ที่ยังไม่เสร็จและการดาวน์โหลดต่อไว้เป็นค่าเริ่มต้น การรันครั้งถัดไปจึงมักทำต่อจากแฟรกเมนต์ที่โหลดไว้แล้ว แทนที่จะเริ่มใหม่ หากต้องการพฤติกรรมแบบนี้ อย่าเติม --no-continue, --no-part หรือ --force-overwrites
