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

ตัวสร้างคำสั่ง yt-dlp สำหรับ Bilibili

ประกอบคำสั่ง yt-dlp สำหรับ Bilibili โดยเริ่มจากการปลอมเป็นเบราว์เซอร์ซึ่งเลี่ยงข้อผิดพลาด 403 ได้เกือบหมด

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

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

yt-dlp -f 'bv*[height<=1080]+ba/b[height<=1080]' --merge-output-format mp4 --no-playlist --impersonate chrome --cookies-from-browser chrome https://www.bilibili.com/video/BV1xx411c7mD
พื้นฐาน

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

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

จำกัดความสูงไว้ 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)
ล้างค่า

ข้อผิดพลาด 403 และข้อจำกัดคุณภาพ

Bilibili ปฏิเสธคำขอที่ดูไม่เหมือนมาจากเบราว์เซอร์ คำสั่งธรรมดาจึงมักได้ 403 กลับมา ชุดสำเร็จรูปนี้เปิดการปลอมเบราว์เซอร์ไว้ตั้งแต่ต้น เพราะส่วนใหญ่นั่นคือคำตอบ

1080p ขึ้นไปมักสงวนไว้ให้บัญชีที่ล็อกอินแล้ว และบางครั้งต้องเป็นบัญชีเสียเงิน ที่นี่ cookies จึงมีผลกับคุณภาพ ไม่ใช่แค่การเข้าถึง วิดีโอหลายตอนจะปรากฏเป็นรายการในเพลย์ลิสต์

Bilibili คือแพลตฟอร์มที่ทำให้ yt-dlp ที่เก่าเกินไปพังเร็วที่สุด — เว็บนี้รื้อ API ของตัวเองบ่อยกว่าแพลตฟอร์มตะวันตกใด ๆ และการอัปเดตตัวดึงข้อมูลมาถึงในรุ่น yt-dlp ภายในไม่กี่วันหลังการเปลี่ยนแต่ละครั้ง เมื่อการดาวน์โหลดที่เดือนก่อนยังได้เริ่มล้มเหลว อัปเดตก่อนเลย: yt-dlp -U การปลอมเป็นเบราว์เซอร์ (เปิดเป็นค่าเริ่มต้นในชุดสำเร็จรูปนี้) คลุมส่วน headers ที่ต้องดูเหมือนเบราว์เซอร์ของปัญหา 403 ที่เหลือมักเป็นเซสชันที่ขาดหายหรือหมดอายุ

วิดีโอหลายตอน — โครงสร้าง P1/P2/P3 ที่คุ้นเคยของซีรีส์ — มาเป็นรายการในเพลย์ลิสต์ การจัดการทั้งเพลย์ลิสต์จึงดึงครบทุกตอน และเลขลำดับเพลย์ลิสต์ในเทมเพลตชื่อไฟล์ทำให้ตอนต่าง ๆ อยู่ในลำดับที่ถูกต้อง Danmaku (คอมเมนต์วิ่งข้ามจอ) เป็นแทร็กคำบรรยายในสายตา yt-dlp: --write-subs เซฟมันเป็นไฟล์ .ass ซึ่งเป็นรูปแบบเดียวที่มันมีอยู่ ไม่ต้องการก็ไม่ต้องทำอะไร — มันไม่ถูกรวมเข้าไปเว้นแต่คุณจะขอ

ระดับคุณภาพเฉพาะบางเงื่อนไข — บันได "dolby" และ premium — มีอยู่เฉพาะบัญชีที่ถือมัน และไม่มีแฟล็กใดไปถึงได้ถ้าไม่มี cookies จากบัญชีแบบนั้น เนื้อหาล็อกภูมิภาคเป็นกำแพงอีกด้าน บางการอัปโหลดมองเห็นได้เฉพาะจากแผ่นดินใหญ่จีน และ proxy ในภูมิภาคคือทางเดียวเมื่อการปิดกั้นถูกบังคับที่ CDN ไม่ใช่ที่หน้าเว็บ การเลี่ยงภูมิภาคบางทีเวิร์กกับการปิดกั้นระดับหน้า แต่ไม่เคยเวิร์กกับระดับ CDN

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

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

ทำไม Bilibili ถึงตอบ 403
Bilibili ปฏิเสธคำขอที่ดูไม่เหมือนมาจากเบราว์เซอร์ --impersonate chrome แก้ได้เกือบทุกครั้ง ถ้าเป็นเนื้อหาเฉพาะสมาชิกก็ใส่ cookies เพิ่ม
เอา 1080p ขึ้นไปจาก Bilibili อย่างไร
ความละเอียดสูงกว่านั้นสงวนไว้ให้บัญชีที่ล็อกอินแล้ว และบางครั้งต้องเป็นบัญชีเสียเงิน ให้ใช้ --cookies-from-browser กับบัญชีแบบนั้น
เอาทุกตอนของวิดีโอหลายตอนอย่างไร
ตั้งการจัดการเพลย์ลิสต์เป็นทั้งเพลย์ลิสต์ — แต่ละตอนจะปรากฏเป็นรายการในเพลย์ลิสต์