การรับ URL ของวิดีโอ YouTube ด้วย `youtube-dl` นั้นช้าโดยไม่ต้องดาวน์โหลดวิดีโอ


10

ฉันต้องการรับ URL โดยใช้ youtube-dl และตัวเลือก "จำลอง" -gที่ไม่ได้ดาวน์โหลดวิดีโอ

ดังนั้นฉันจึงให้คำสั่งต่อไปนี้:

youtube-dl -g https://www.youtube.com/watch?v=k4JGSAmu4lg

มันให้ผลลัพธ์ต่อไปนี้หลังจาก 7 ถึง 8 วินาที

https://r20---sn-cvh7zn7d.googlevideo.com/videoplayback?initcwndbps=1113000&mt=1408702970&requiressl=yes&ipbits=0&sver=3&fexp=901454%2C902408%2C919145%2C924626%2C927622%2C927904%2C931330%2C931983%2C934024%2C934030%2C934804%2C945118%2C945308%2C946023%2C951914&ratebypass=yes&signature=38F111D46D72FFC50B47D50B3C9A631099BF5F83.FA134C91F407989B95ACADC1F1F6946B8F18C158&upn=tU0u5t7A2Uw&sparams=id%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Cmm%2Cms%2Cmv%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&mm=31&expire=1408724634&id=o-AJNPuDp9TKMKiwzUwvSk76W7JdA0cx0bRSum9mPJJ7Vo&mv=u&source=youtube&ms=au&key=yt5&ip=115.113.1.50&itag=18

แต่ปัญหาคือใช้เวลาประมาณ 7 ถึง 8 วินาทีในการสอบถาม URL
มีวิธีใดบ้างที่จะเร็วขึ้นไหม


คุณหมายถึงอะไรกับ "จำลอง" ใช่มั้ย
Volker Siegel

เมื่อเราให้ตัวเลือก -g ตามด้วย youtube-dl มันจะสร้าง URL (จำลอง) ตามที่ฉันพูดถึงว่าเป็นเอาต์พุต
bharath kumar reddy bojja

คำตอบ:


9

เวลาใช้ในการทำงาน

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

แค่เพียงเวลาดาวน์โหลด HTML ที่จำเป็นเท่านั้น
คำสั่งจำเป็นต้องทำการร้องขอ HTTP อย่างน้อยสองคำร้องต่อกันและอาจมากกว่า

ดังนั้นหากมีสิ่งใดที่ช้ามันจะถูกคูณด้วยจำนวนคำขอที่มีอยู่แล้ว

สำหรับฉันใช้เวลา 1.5 วินาทีบนสายที่เร็วมาก - ซึ่งไม่ไกลจาก 8 วินาที


วิธีการหา

ฉันจะแสดงคำสั่งที่ฉันใช้เพื่อค้นหา:

เพื่อให้ตัวอย่างเป็นระเบียบมากขึ้นเราใช้ตัวแปรสำหรับ URL:

$ u="https://www.youtube.com/watch?v=k4JGSAmu4lg"

เราต้องการวัดระยะเวลาของคำสั่ง; การใช้คำสั่งtimeต้องระวังไม่ให้มิกซ์คำสั่งกับเชลล์บิวด์อิน เราใช้ฟังก์ชั่นเล็ก ๆ เพื่อทำให้เส้นสั้นลง:

$ t(){/usr/bin/time -f 'Time: %es' "$@";}

คำสั่งของคุณเขียน URL ของไฟล์วิดีโอ (ตัดออกเป็น 80 คอลัมน์):

$ youtube-dl -g "$u"
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?signature=091F68E823

ลองวัดเวลาที่ใช้ในคอมพิวเตอร์ของฉัน:

$ t youtube-dl -g "$u"
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?signature=091F68E823
Time: 1.44s

ตกลงหนึ่งและครึ่งวินาที เร็วกว่าในคำถาม แต่ไม่เร็วเท่าไหร่ แต่มันใช้เวลาอย่างไร อาจจะดาวน์โหลดวิดีโอในทางที่ซ่อนอยู่และทิ้งมันไป? วิดีโอคือ 11 นาทีใน 360p เพียงดาวน์โหลดโดยไม่มีตัวเลือกใช้เวลาประมาณ 13 วินาที - นานกว่าสิบเท่า
จำเป็นต้องดูอย่างใกล้ชิดด้วยตัวเลือก verbose -v:

$ t youtube-dl -v -g "$u"
[debug] System config: []
[debug] User config: []
[debug] Command-line args: ['-v', '-g', 'https://www.youtube.com/watch?v=k4J
[debug] Encodings: locale 'UTF-8', fs 'UTF-8', out 'UTF-8', pref: 'UTF-8'
[debug] youtube-dl version 2014.02.06
[debug] Python version 2.7.6 - Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14
[debug] Proxy map: {}
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?sparams=id%2Cinitcwn
Time: 1.40s

โอ้มีความล่าช้าก่อนที่จะพิมพ์บรรทัด '[debug]' ดูเหมือนว่าyoutube-dlใช้เวลาในการตั้งค่าการกำหนดค่าของตัวเอง มันเป็นหนึ่งในสี่ของวินาทีหรือมากกว่านั้นไม่ใช่ความล่าช้าที่เรากำลังมองหา แต่สิ่งที่เราสามารถเรียนรู้ได้จากมันคือการyoutube-dlใช้งานเองอาจช้า
หลังจากข้อความแล้วจะไม่มีอะไรเกิดขึ้นจนกว่าจะพิมพ์ URL ผลลัพธ์ ดังนั้นเรายังไม่เห็นส่วนที่น่าสนใจ
ตัวเลือก-gคือ "จำลอง" การดาวน์โหลดวิดีโอในแง่ที่ว่ามันเป็นส่วนที่ซับซ้อนในการค้นหา URL กึ่งลับนั้นพิมพ์ออกมา แต่จากนั้นข้ามการดาวน์โหลดจริงในตอนท้าย มีตัวเลือกที่คล้ายกัน-sที่ไม่ได้ส่งออก URL และดูเหมือนว่าจะเป็นอย่างอื่น สมมติว่ามันคล้ายกันมากถ้าใช้เวลาประมาณเดียวกัน เราต้องตรวจสอบสิ่งนั้น

$ t youtube-dl -v -s "$u"
[debug] System config: []
[debug] User config: []
[debug] Command-line args: ['-v', '-s', 'https://www.youtube.com/watch?v=k4J
[debug] Encodings: locale 'UTF-8', fs 'UTF-8', out 'UTF-8', pref: 'UTF-8'
[debug] youtube-dl version 2014.02.06
[debug] Python version 2.7.6 - Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14
[debug] Proxy map: {}
[youtube] Setting language
[youtube] k4JGSAmu4lg: Downloading webpage
[youtube] k4JGSAmu4lg: Downloading video info webpage
[youtube] k4JGSAmu4lg: Extracting video information
Time: 1.45s

ตกลง-sใช้เวลาเหมือนกัน-gดังนั้นจึงเป็นการดีที่จะแทนที่พวกเขาสำหรับการทดสอบ
ที่น่าสนใจกว่าคือตอนนี้เราได้ผลผลิตเพิ่มขึ้นแล้ว และมันถูกพิมพ์โดยมีช่วงเวลาที่น่าสนใจ: เส้นที่พิมพ์ออกมามีความล่าช้าคล้าย ๆ กันดังนั้นดูเหมือนว่าพวกมันจะเกี่ยวกับการกระทำที่ใช้เวลาจริงในการค้นหา
จากข้อความจะมีการดาวน์โหลดหน้าเว็บอย่างน้อยสองหน้า แต่เราสามารถสันนิษฐานได้ว่าคำว่า "หน้า" จะไม่หมายถึงคำขอ HTTP เดียวและเอกสาร HTML เดียว

เราเรียนรู้อะไร

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

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

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


ไม่เหนื่อยเหรอ?

ต้องการรายละเอียดเพิ่มเติมเพื่อทำความเข้าใจว่าเวลาจริง ๆ ใช้เวลาเท่าไร?
ขั้นตอนต่อไปคือการติดตามการเชื่อมต่อ HTTP; ฉันสงสัยว่ามันอาจแสดง roundtrips มากกว่าสองตัวอย่างเช่นการเปลี่ยนเส้นทาง คุณสามารถใช้wiresharkหรือพร็อกซี HTTP การบันทึกหรือstraceเพียงแค่นับการเรียกระบบสำหรับการเชื่อมต่อหรือการเขียน

สำหรับวันนี้เราทั้งคู่มองลึกเข้าไปในโพรงกระต่ายของเครือข่าย


ดังนั้นอะไรคือสาเหตุของเวลานานขนาดนี้? มันเป็นเพราะการเชื่อมต่อเครือข่ายช้าหรือไม่
bharath kumar reddy bojja

ขึ้นอยู่กับว่าช้า - คำถามคืออะไร รอสักครู่เพื่อดูรายละเอียดของตัวอย่างของฉันฉันกำลังเขียน
Volker Siegel

คำถามของฉันคือ: ความล่าช้าเกิดจากการเชื่อมต่อเครือข่ายช้าหรือไม่
bharath kumar reddy bojja

ใช่บางส่วน คำถามนั้นเรียบง่ายกว่าฟังดูเหมือน;) มันไม่เกี่ยวกับปริมาณงานของการเชื่อมต่อ ความหน่วงแฝงเป็นสิ่งสำคัญที่นี่ จากสิ่งที่ฉันสามารถบอกได้มีอย่างน้อยสามรอบ HTTP - แต่อาจจะมากกว่า ความล่าช้าทั้งหมดจะถูกคูณด้วยจำนวนนี้ซึ่งเพิ่มขึ้น ฉันไม่รู้เกี่ยวกับการเชื่อมต่อของคุณ มันอาจช้าในตอนท้ายของ YouTube ยากที่จะบอกโดยไม่ต้องวัด ลองทำสิ่งอื่น ๆ บนอินเทอร์เน็ตที่คุณรู้ว่ามันเร็วแค่ไหนและตรวจสอบว่ามันรู้สึกช้าลงหรือปกติ
Volker Siegel

ดังนั้นฉันจะเพิ่มรายละเอียดบางอย่าง :)
Volker ซีเกล


1

อาจมีสาเหตุอื่น youtube-dlถูกแจกจ่ายเป็นแอปพลิเคชัน Python แบบซิป ทุกครั้งที่คุณเรียกใช้มันจะแยกและเรียกใช้

คุณสามารถแตกไฟล์มันเองด้วยunzipคำสั่ง จากนั้นเรียกตามที่คุณจะวิ่ง__main__.py youtube-dlบนคอมพิวเตอร์ที่มีกำลังไฟต่ำเช่น Pi ที่เห็นได้ชัดว่าจะเพิ่มประสิทธิภาพของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.