Youtube-dl कमांड के साथ वीडियो के भाग को कैसे डाउनलोड करें?


61

मैं Ubuntu का उपयोग कर रहा हूं, और youtube-dl कमांड बिल्कुल ठीक काम कर रहा है।

मैं केवल उस हिस्से को डाउनलोड करना चाहता हूं जो बहुत लंबा है। इसलिए मैं वीडियो के केवल कुछ मिनट के हिस्से को डाउनलोड करना चाहता हूं। उदाहरण 13 मिनट से 17 मिनट तक।

क्या उसे करने का कोई तरीका है

जवाबों:


43

मुझे विश्वास नहीं है कि youtube-dlअकेले वही करेगा जो आप चाहते हैं। हालाँकि आप इसे ffmpeg की तरह कमांड लाइन उपयोगिता के साथ जोड़ सकते हैं।

पहले youtube-dl का उपयोग करके वास्तविक URL प्राप्त करें:

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

कमांड के आउटपुट को कॉपी करें और -iअगले कमांड के पैरामीटर के हिस्से के रूप में पेस्ट करें :

ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:00:15.00 -t 00:00:10.00 -c copy out.mp4

-ssइस स्थिति राज्यों में पैरामीटर वीडियो में 15 सेकंड तक सभी इनपुट अप त्यागने के लिए। -tविकल्प राज्यों 10 सेकंड के लिए कब्जा करने के लिए। बाकी कमांड इसे एक mp4 के रूप में संग्रहीत करने के लिए कहता है।

ffmpeg एक लोकप्रिय टूल है और यह किसी भी लोकप्रिय OS रिपॉजिटरी / पैकेज मैनेजर में होना चाहिए।


8
तो अनिवार्य रूप से, आपको अभी भी पूरे वीडियो को डाउनलोड करना होगा और इसे स्वयं क्रॉप करना होगा
एंटनी

12
यदि आप वीडियो स्लाइस को समाप्त करने के लिए समय निर्दिष्ट करना चाहते हैं, तो आप -t के बजाय -to विकल्प का उपयोग कर सकते हैं। ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:13:00.00 -to 00:17:00.00 -c copy out.mp4
ˆᵛˆ

5
@ एंटनी ffmpegवास्तव में आपके द्वारा निर्दिष्ट भाग को ही डाउनलोड करेगी।
एकैहौला २१'१ola को

17
ffmpeg $(youtube-dl -g 'https://www.youtube.com/watch?v=oHg5SJYRHA0' | sed "s/.*/-ss 00:05 -i &/") -t 01:00 -c copy out.mkv

5
क्या आप बता सकते हैं कि यह क्या करता है, यह कैसे काम करता है?
user259412

3
यह @godofgrunts उत्तर का एक और अधिक संक्षिप्त संस्करण है, कुछ समय बचाने के लिए sed का उपयोग करके मैन्युअल रूप से URL हथियाने और प्रारंभ समय (-ss 00:05) में कॉपी / पेस्ट करना है। @godofgrunts में कुछ अतिरिक्त झंडे हैं -map 0:v -map 1:a -c:v libx264 -c:a aacजो गुणवत्ता में सुधार कर सकते हैं। मुझे यह भी जोड़ना पसंद youtube-dl -f bestvideo+bestaudioहै कि मुझे उच्चतम गुणवत्ता वाला संस्करण मिल रहा है।
स्टीव गोरानसन

ffmpeg.zeranoe.com/ विंडोज के लिए।
वोल्फपैक'08

16

जॉनी के जवाब में जोड़ना:

youtube-dl -g "URL"वीडियो और ऑडियो स्ट्रीम प्राप्त करने के लिए उपयोग करें ।

अब उपयोग करें:

ffmpeg -ss 12:15 -i "1st-URL" -ss 12:15 -i "2nd-URL" -t 5:15 -map 0:v -map 1:a -c:v libx264 -c:a aac output.mkv

आपको -ssप्रत्येक स्ट्रीम के लिए विकल्प का उपयोग करना होगा । मैं इसे लगभग 30 सेकंड पहले करने की सलाह देता हूं और फिर -ss 30किसी भी महत्वपूर्ण फ्रेम को खोने से बचने के लिए दूसरे का उपयोग करता हूं । यहां मेरा एक YouTube वीडियो का उपयोग करके एक वास्तविक उदाहरण है।

वीडियो

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

आउटपुट:

https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/80448722bbc8410a/itag/298/source/youtube/requiressl/yes/mn/sn-mv-cvne/ei/BgifWfmmL4iE8wSlv47oCA/mm/31/pl/23/mv/m/ms/au/initcwndbps/11447500/ratebypass/yes/mime/video%2Fmp4/otfp/1/gir/yes/clen/5231968228/lmt/1502479662079137/dur/18575.164/key/dg_yt0/signature/4FFB9B0B7E1703B31F5D07DAD579B55F17EF7BAA.0CB63905C89DD4D33F90CF3AAD728F1ECDFCB9B3/mt/1503594423/ip/206.34.122.70/ipbits/0/expire/1503616102/sparams/ip,ipbits,expire,id,itag,source,requiressl,mn,ei,mm,pl,mv,ms,initcwndbps,ratebypass,mime,otfp,gir,clen,lmt,dur/
https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/80448722bbc8410a/itag/140/source/youtube/requiressl/yes/mn/sn-mv-cvne/ei/BgifWfmmL4iE8wSlv47oCA/mm/31/pl/23/mv/m/ms/au/initcwndbps/11447500/ratebypass/yes/mime/audio%2Fmp4/otfp/1/gir/yes/clen/295235970/lmt/1502480001536214/dur/18575.243/key/dg_yt0/signature/4CD42047D1D5C714377350905C1CC5CBA37C0009.6EED1FC92D17A096235C32E48F4B15DEF7DD99B0/mt/1503594423/ip/206.34.122.70/ipbits/0/expire/1503616102/sparams/ip,ipbits,expire,id,itag,source,requiressl,mn,ei,mm,pl,mv,ms,initcwndbps,ratebypass,mime,otfp,gir,clen,lmt,dur/

मैं 43:00 से 50:10 तक कटौती करना चाहता था, इसलिए मैं -ss 42:30दोनों इनपुटों पर (मुझे एक अच्छा कीफ़्रेम पकड़ने के लिए कुछ सेकंड देने वाला) करने जा रहा हूं और फिर -ss 3043:00 बजे शुरू होने वाले इनपुट्स के बाद करूँगा ।

फिर मैं mapवीडियो 0:vऔर ऑडियो मैप करने के लिए उपयोग करूंगा 1:a(0 का अर्थ है पहला इनपुट, जो वीडियो है और 1 का अर्थ है दूसरा इनपुट, जो ऑडियो है) और फिर मेरे एन्कोडिंग विकल्प चुनें।

ffmpeg -ss 42:30 -i "https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/80448722bbc8410a/itag/298/source/youtube/requiressl/yes/pl/23/ei/5wCfWY6dBeOj8gSSxZaACQ/mv/m/initcwndbps/5055000/ms/au/mm/31/mn/sn-mv-cvne/ratebypass/yes/mime/video%2Fmp4/otfp/1/gir/yes/clen/5231968228/lmt/1502479662079137/dur/18575.164/key/dg_yt0/beids/%5B9466591%5D/mt/1503592562/signature/8CCFBF5CAB97341D0CB1F34E85AB6EE20FC7A03E.7679F39A8603CF41A95F10232E2A921EB0774101/ip/206.34.122.70/ipbits/0/expire/1503614279/sparams/ip,ipbits,expire,id,itag,source,requiressl,pl,ei,mv,initcwndbps,ms,mm,mn,ratebypass,mime,otfp,gir,clen,lmt,dur/" -ss 42:30 -i "https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/80448722bbc8410a/itag/140/source/youtube/requiressl/yes/pl/23/ei/5wCfWY6dBeOj8gSSxZaACQ/mv/m/initcwndbps/5055000/ms/au/mm/31/mn/sn-mv-cvne/ratebypass/yes/mime/audio%2Fmp4/otfp/1/gir/yes/clen/295235970/lmt/1502480001536214/dur/18575.243/key/dg_yt0/beids/%5B9466591%5D/mt/1503592562/signature/4AACC8E27F9036D36D4D623A771A9F2BAC4674BA.7E4F4FB4DC023E3FE491A991F0F9F2329648DE9D/ip/206.34.122.70/ipbits/0/expire/1503614279/sparams/ip,ipbits,expire,id,itag,source,requiressl,pl,ei,mv,initcwndbps,ms,mm,mn,ratebypass,mime,otfp,gir,clen,lmt,dur/" -map 0:v -map 1:a -ss 30 -t 7:10 -c:v libx264 -c:a aac gog-vs-triv.mkv

धन्यवाद। मुझे यकीन नहीं था कि कैसे ध्वनि मिल सकती है, @ जॉनी पोस्ट के लिए। आपकी पोस्ट ने इसका उत्तर दिया।
मन्नी_मार

वाह, मुझे नहीं पता था कि ffmpeg का -iझंडा URL ले सकता है। साफ
Geremia

12

यह सुविधा अनुरोध अभी तक youtube-dl में लागू नहीं किया गया है। # 622 अंक और जीथूब पर इसके कई डुप्लिकेट देखें ।


9

youtube-dl अंतर्निहित पोस्टप्रोसेसर को पास करने के तर्क का समर्थन करता है (संस्करण 2017.08.27.1 के साथ परीक्षण किया गया):

youtube-dl -x --postprocessor-args "-ss 00:13:00.00 -t 00:04:00.00" https://youtu.be/...

यह मूल रूप से ffmpegपहले फ़ाइल डाउनलोड करने के बाद खुद के साथ पोस्टप्रोसेसिंग करने के समान है ।


4
लेकिन इसके बाद भी पूरे वीडियो को डाउनलोड करने की आवश्यकता होगी, फिर वांछित भाग को काटें
कास्परोवॉव

मुझे unable to obtain file audio codec with ffprobeत्रुटि हो रही है। क्या आप कृपया मेरी मदद कर सकते हैं मैं
हसन

3
ध्यान दें कि -xध्वज केवल ऑडियो डाउनलोड करता है। यदि आप ऑडियो और वीडियो दोनों चाहते हैं तो इसे कमांड से ओमिट करें। :)
नाली

2

आप पूरी बात और संपादन को डाउनलोड किए बिना स्टार्ट अप से एक बिंदु तक डाउनलोड कर सकते हैं । यह सवाल जो पूछता है उसका आधा हिस्सा:

के साथ डाउनलोड बाधित ^C

  • मैंने केवल इसके साथ प्रयास किया है mp4
  • अलग वीडियो और ऑडियो के साथ काम नहीं करेंगे, आपको दोनों के साथ एक प्रारूप की आवश्यकता है। डिफ़ॉल्ट रूप से ytdl को अक्सर अलग-अलग वीडियो और ऑडियो मिलते हैं, फिर उन्हें मर्ज कर देता है। -Fउपलब्ध प्रारूपों को देखने के लिए उपयोग करें , और mp4दोनों को चुनें। जैसे -f18या -f22आमतौर पर होते हैं।
  • आपको डाउनलोड किए गए प्रतिशत से अनुमान लगाना होगा (जो रैखिक नहीं है; समय के साथ संपीड़न दर भिन्न होती है)।

हाँ। यह हैक है

आगे सवाल: यदि आप अलग-अलग वीडियो और ऑडियो प्रारूप चाहते हैं, तो क्या आप प्रत्येक का अलग-अलग हिस्सा ( ^cजैसे यहां उपयोग कर रहे हैं) डाउनलोड कर सकते हैं , और फिर उन्हें मैन्युअल रूप से मर्ज कर सकते हैं? मुझे नहीं लगता कि यह कुछ प्रारूपों के लिए काम करेगा।


1

यह पूरी तरह से ओपी के सवाल का जवाब नहीं देता है, लेकिन एक स्ट्रीम को शुरू से एक विशिष्ट अवधि तक डाउनलोड करने का एक तरीका है बिना पूरी स्ट्रीम डाउनलोड किए। चूंकि YouTube रिज्यूम सपोर्ट प्रदान करता है, हम Rangeहेडर का उपयोग करके आंशिक सामग्री के लिए अनुरोध कर सकते हैं ।

हम पहले स्ट्रीम URL लाते हैं:

$ youtube-dl -g https://www.youtube.com/watch?v=yysk8s2vih8
https://r1---sn-npoeenee.googlevideo.com/videoplayback?source=youtu...
https://r1---sn-npoeenee.googlevideo.com/videoplayback?source=youtu...

यह दो URL (प्रत्येक वीडियो और ऑडियो स्ट्रीम के लिए) आउटपुट होना चाहिए।

अब इस स्ट्रीम की कुल सामग्री लंबाई लाने के लिए पहले URL (जो वीडियो स्ट्रीम से लिंक करता है) के लिए एक हेड रिक्वेस्ट भेजें:

$ curl "1st-URL" -sI | grep Content-Length
Content-Length: 64380504

अब, हम इस कुल सामग्री की लंबाई को वीडियो में कुल सेकंड से विभाजित करते हैं (YouTube वीडियो की अवधि 4 मिनट और 7 सेकंड है जो 247 सेकंड है।) लगभग 1 सेकंड की सामग्री लंबाई प्राप्त करने के लिए:

64380504 / 247 ≈ 260650

हम इस मूल्य को गुणा करते हैं (शुरुआत से 1 सेकंड के लिए हम चाहते हैं कि कितने सेकंड)

(हम मेटाडाटा द्वारा ली गई अतिरिक्त जगह के लिए एक खाता भी जोड़ते हैं जो धारा की शुरुआत में रखा गया है)

उदाहरण के लिए लगभग 10 सेकंड पहले लाने के लिए, आपको पहले 260650 * 11 = 2867150बाइट लाने की आवश्यकता होगी , इसलिए हम Rangeशीर्ष लेख के साथ एक अनुरोध करते हैं :

$ curl "1st-URL" -H "Range: bytes=0-2867150" -o ten_secs.mp4

यह केवल पहले 10 सेकंड डाउनलोड करना चाहिए। डाउनलोड की गई फ़ाइल को चलाने में सक्षम होना चाहिए लेकिन सबसे अच्छा FFmpeg को गलत मेटाडेटा को ठीक करने देना चाहिए:

$ ffmpeg -i ten_secs.mp4 -c copy corrected_ten_secs.mp4

हम ऑडियो के शुरुआती भाग (2-URL) को भी इसी तरह से डाउनलोड कर सकते हैं (सामग्री-लंबाई भिन्न होगी लेकिन कुल सेकंड शेष रहेगा)।

वीडियो से किसी भी मध्य भाग को डाउनलोड करना इस तरह से भी संभव होना चाहिए, लेकिन संभवत: बहुत मुश्किल हो रहा है क्योंकि YouTube स्ट्रीम की शुरुआत में मेटाडेटा रखता है (पहले कुछ बाइट्स में) और इसके बिना डाउनलोड मीडिया में मौजूद नहीं है, स्ट्रीम बिल्कुल नहीं चलेगी।

EDIT: यह केवल रिज्यूम सपोर्ट वाली वेबसाइटों पर काम करेगा, YouTube का कहना है। यह अन्य वेबसाइटों के लिए काम नहीं करेगा।


0

ऑडियो / वीडियो आउटपुट को ffmpeg में एडिट करने के लिए (प्रोसेसर) पास करने के लिए --postprocessor-args पैरामीटर का उपयोग करें , इसलिए ffmpeg को इनस्टॉल करना होगा।

--postprocessor-args में 3 तर्क और मान होते हैं (उदाहरण के लिए, थेरेपी अधिक है, ffppeg के मैनुअल पेज की जाँच करें):

  • -एसएस एचएच: एमएम: एसएस: लेने के लिए समय शुरू करें
  • -हो HH: MM: SS: अंत समय
  • -एच एचएच: एमएम: एसएस: लेने के लिए समय

उदाहरण:

  • 15 सेकंड पर एन्कोडिंग शुरू करें और 1 मिनट 20 सेकंड पर रोकें

$ youtube-dl --postprocessor-args "-ss 0: 0: 15 -to 0: 1: 20" '[video_URL]'

  • 15 सेकंड पर एन्कोडिंग शुरू करें और केवल अगले 3 मिनट 5 सेकंड लें

$ youtube-dl --postprocessor-args "-ss 0: 0: 15 -t 0: 3: 5" '[video_URL]'

पुनश्च: youtube-dl इसे संसाधित करने से पहले पूरे मीडिया को डाउनलोड करेगा, और इसके बाद हटा देगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.