ข้ามไปที่เนื้อหา
yt-dlp

บันทึกสตรีมสด — ตัวสร้างคำสั่ง yt-dlp

ประกอบคำสั่ง yt-dlp เพื่อบันทึกสตรีมสด และเริ่มตั้งแต่ต้นในที่ที่แพลตฟอร์มยอมให้ทำ

ไม่บังคับ ถ้าเว้นว่างไว้ คำสั่งจะจบด้วยคำว่า URL ให้คุณเติมเอง

คำสั่งของคุณ

yt-dlp --merge-output-format mkv --no-playlist -N 4 --live-from-start --wait-for-video 60-300 'https://www.youtube.com/watch?v=live_stream_id'
พื้นฐาน

เฉพาะเสียงจะดึงแทร็กเสียงออกมาและทิ้งภาพไป

วิดีโอและคุณภาพ

จำกัดความสูงไว้ yt-dlp ยังคงเลือกสตรีมที่ดีที่สุดในระดับนั้นหรือต่ำกว่า

ชนิดไฟล์ที่ใช้รวมสตรีมภาพกับเสียงที่แยกกันไว้ด้วยกัน

ตัวเลือกขั้นสูง (3)

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

บรรจุสตรีมใหม่โดยไม่เข้ารหัสใหม่ เร็วและไม่สูญเสียคุณภาพ

เข้ารหัสวิดีโอใหม่ ช้าและคุณภาพลด — ใช้เมื่อ remux ไม่ไหวเท่านั้น

เสียง

ชนิดไฟล์ที่เสียงจะถูกแปลงไป

VBR ให้อัตราส่วนขนาดต่อคุณภาพดีที่สุด ส่วน bitrate คงที่คาดเดาขนาดได้ง่ายกว่า

คำบรรยาย

การฝังจะใส่คำบรรยายไว้ในตัววิดีโอ ส่วนการบันทึกจะเขียนไฟล์ .srt แยกไว้ข้าง ๆ

คั่นด้วยจุลภาค ใส่ all ถ้าต้องการทุกภาษาที่มี

เพลย์ลิสต์และช่อง

จะทำอย่างไรเมื่อลิงก์เป็นทั้งวิดีโอและเพลย์ลิสต์ในเวลาเดียวกัน

ใช้ได้ทั้งช่วงและรายการ เช่น 1-10,15 หรือ -5::2 เพื่อเอาเว้นหนึ่งรายการนับจากท้าย

ตัวเลือกขั้นสูง (1)

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

ช่วงและบท
ตัวเลือกขั้นสูง (2)

ช่วงเวลาแบบ *00:01:30-00:03:00 หรือชื่อบท เครื่องหมายดอกจันข้างหน้าหมายถึงเป็นเวลา

เมทาดาทาและภาพปก
ตัวเลือกขั้นสูง (3)
SponsorBlock

ตัดช่วงที่ชุมชนทำเครื่องหมายไว้ออกจากไฟล์ โดยอาศัยข้อมูลของ SponsorBlock

ตัวเลือกขั้นสูง (1)

คงช่วงเหล่านั้นไว้แต่ทำเครื่องหมายให้ เพื่อให้คุณข้ามเอง

ไฟล์และโฟลเดอร์

ชื่อฟิลด์เขียนไว้ใน %(...)s เครื่องหมายทับจะสร้างโฟลเดอร์

ตัวเลือกขั้นสูง (4)

ที่ที่จะเขียนไฟล์ลงไป ใช้ร่วมกับรูปแบบชื่อไฟล์ข้างบนจะได้โฟลเดอร์ย่อย

ความยาวสูงสุดของชื่อไฟล์ นับเป็นตัวอักษร

ตัวกรอง
ตัวเลือกขั้นสูง (5)

YYYYMMDD หรือวันที่แบบสัมพัทธ์อย่าง now-1month

YYYYMMDD หรือวันที่แบบสัมพัทธ์

ข้ามไฟล์ที่เล็กกว่านี้ รับค่าอย่าง 5M, 500K

ข้ามไฟล์ที่ใหญ่กว่านี้

จำนวนไฟล์ที่จะดาวน์โหลดก่อนหยุด

เครือข่าย

เช่น 2M หรือ 500K มีประโยชน์เมื่อคุณต้องการแบนด์วิดท์ที่เหลือไปทำอย่างอื่น

ตัวเลือกขั้นสูง (5)

ช่วยเร่งสตรีมที่แบ่งเป็นชิ้น เริ่มที่ 4 กำลังพอดี

จะลองชิ้นที่ล้มเหลวซ้ำกี่ครั้ง ใส่ infinite ก็ได้

ที่อยู่ proxy แบบ HTTP, HTTPS หรือ SOCKS

ทำให้คำขอดูเหมือนมาจากเบราว์เซอร์จริง เป็นวิธีแก้ที่ใช้กันเมื่ออยู่ ๆ ก็เจอ 403

การเข้าสู่ระบบและ cookies

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

ตัวเลือกขั้นสูง (1)

ไฟล์ cookies.txt รูปแบบ Netscape ที่ส่งออกมาจากเบราว์เซอร์ของคุณ

สตรีมสด
ตัวเลือกขั้นสูง (2)

คอยตรวจจนกว่าสตรีมที่นัดไว้จะเริ่ม MIN-MAX คือช่วงวินาทีระหว่างการตรวจแต่ละครั้ง

วิธีเลี่ยงปัญหา
ตัวเลือกขั้นสูง (3)

เลิกใช้แล้ว ให้ใช้ --add-headers แทน ที่ยังเก็บไว้เพราะคู่มือเก่าจำนวนมากยังใช้อยู่

เลิกใช้แล้ว ให้ใช้ --add-headers แทน

ตัวเลือกเฉพาะของแต่ละเว็บ เช่น youtube:player_client=web

ผลลัพธ์และการดีบัก
ตัวเลือกขั้นสูง (2)
ล้างค่า

บันทึกสดอย่างปลอดภัย

บันทึกตั้งแต่ต้นจะเก็บสตรีมจากจุดเริ่ม ไม่ใช่จากตอนที่คุณสั่งรัน ตราบใดที่แพลตฟอร์มยังเก็บช่วงก่อนหน้าไว้ ส่วนรอสตรีมจะคอยตรวจสตรีมที่นัดไว้และเริ่มทันทีที่ขึ้นถ่ายทอด

เลือก MKV เถอะ การบันทึกที่หยุดกะทันหัน — และการบันทึกสดก็หยุดกะทันหันอยู่แล้ว — มักยังเหลือไฟล์ MKV ที่เล่นได้ ขณะที่ MP4 ที่ถูกตัดระหว่างเขียนมักเปิดไม่ขึ้นเลย การบันทึกสดทำต่อไม่ได้ การเลือก container จึงเป็นเกราะป้องกันทั้งหมดที่คุณมี

การรอสตรีมที่นัดไว้เป็นโหมดคนละแบบกับการบันทึกสตรีมที่กำลังถ่ายทอด wait-for-video สำรวจ URL ซ้ำ ๆ จนกระทั่งสตรีมเปิด แล้วเริ่มบันทึก — ปล่อยเทอร์มินัลทิ้งไว้วิ่งต่อและมันจะจับได้ตั้งแต่นาทีแรก ช่วงเวลาระหว่างการตรวจคือหน่วยนาที ไม่ใช่วินาที เริ่มคำสั่งให้เร็วไว้ก่อน การไปถึงสายหนึ่งตาเช็กคือเสียสตรีมไปหลายนาที และไม่มีตัวเลือกใดกู้นาทีที่ไม่เคยถูกบันทึกไว้กลับมาได้

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

ไลฟ์สตรีมคือ HLS โดยนิยาม: segment สั้น ๆ หลายร้อยชิ้นที่ไหลเข้ามาแบบเรียลไทม์ ถูก ffmpeg ต่อเข้า container ไปเรื่อย ๆ ตามที่มันมาถึง นี่คือเหตุที่การบันทึกไลฟ์คือกรณีที่ MKV สำคัญที่สุด — MP4 ต้องเขียนดัชนีตอนท้าย รายงานที่โดนฆ่าตายนาทีที่สามของสตรีมสองชั่วโมงจึงไม่มีดัชนีเลยแม้แต่ชิ้นเดียว พื้นที่ดิสก์เป็นข้อจำกัดจริงอีกด้าน การบันทึกไลฟ์โตเท่าบิตเรตของสตรีมตลอดเวลาที่มันวิ่งอยู่ และขีดจำกัดขนาดปกป้องดิสก์ไว้จากสตรีมที่วิ่งสิบสองชั่วโมงเพราะเจ้าของไปลืมกดหยุด

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

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

บันทึกสตรีมสดตั้งแต่ต้นได้ไหม
เปิดบันทึกตั้งแต่ต้น ใช้ได้เฉพาะที่แพลตฟอร์มยังเก็บช่วงก่อนหน้าของสตรีมไว้
บันทึกสตรีมที่ยังไม่เริ่มอย่างไร
ใช้รอสตรีมพร้อมช่วง MIN-MAX yt-dlp จะคอยตรวจและเริ่มทันทีที่สตรีมขึ้นถ่ายทอด
บันทึกสดควรใช้ container อะไร
MKV เพราะทนต่อการเขียนที่ถูกตัดกลางคัน ขณะที่ MP4 ที่ถูกตัดระหว่างบันทึกอาจเปิดไม่ขึ้นเลย
ถ้าการบันทึกหลุดกลางคันจะเป็นอย่างไร
ถ้าใช้ MKV คุณมักได้ทุกอย่างที่เขียนไปแล้วไว้ครบ การบันทึกสดทำต่อไม่ได้ — ส่วนที่ขาดหายไปก็หายไปเลย