अजगर प्रोग्राम से youtube-dl का उपयोग कैसे करें?


81

मैं निम्नलिखित शेल कमांड के परिणाम को एक्सेस करना चाहूंगा,

youtube-dl -g "www.youtube.com/..."

direct urlएक अजगर कार्यक्रम के भीतर से, एक फ़ाइल के लिए अपने उत्पादन को मुद्रित करने के लिए । यही मैंने कोशिश की है:

import youtube-dl
fromurl="www.youtube.com/..."
geturl=youtube-dl.magiclyextracturlfromurl(fromurl)

क्या यह संभव है? मैं स्रोत में प्रणाली को समझने की कोशिश की लेकिन कहीं गुम हो गया: youtube_dl/__init__.py, youtube_dl/youtube_DL.py, info_extractors...



1
सभ्य लेख यहाँ: willdrevo.com/...
lollercoaster

2
@lollercoaster, वह URL मर चुका है ... यहां फिक्स्ड लिंक
s3cur3

जवाबों:


140

यह मुश्किल नहीं है और वास्तव में प्रलेखित है :

import youtube_dl

ydl = youtube_dl.YoutubeDL({'outtmpl': '%(id)s.%(ext)s'})

with ydl:
    result = ydl.extract_info(
        'http://www.youtube.com/watch?v=BaW_jenozKc',
        download=False # We just want to extract the info
    )

if 'entries' in result:
    # Can be a playlist or a list of videos
    video = result['entries'][0]
else:
    # Just a video
    video = result

print(video)
video_url = video['url']
print(video_url)

3
मुझे यह त्रुटि मिल रही है: youtube_dl आयात आयात करें: कोई भी मॉड्यूल जिसका नाम youtube_dl नहीं है
Ufoguy

8
आपको youtube_dl स्थापित करना होगा: यदि आपके पास पाइप उपयोगिता है (इसे स्थापित करने के लिए, sudo apt-get install python-pip), तो आप sudo pip को youtube-dl
JulienFr

यदि आपके पास gentoo पर "youtube_dl नाम का कोई मॉड्यूल नहीं है" तो आप पायथन फ़ाइल की शुरुआत में "#! / Usr / bin / env python2.7" जोड़ने का प्रयास कर सकते हैं।
पुचू

9
मुझे पता है कि यह पुराना है और अन्य उत्तर हैं लेकिन सिर्फ स्पष्ट करने के लिए। Youtube_dl के नए संस्करण पर कुछ परिवर्तन किया गया है और के बजाय video['url']यह करने के लिए बदलvideo['webpage_url']
DarkXDroid

4
का उद्देश्य क्या है with ydl:?
हैलोगूडबी

5

सरल कोड के लिए, मुझे लगता है कि हो सकता है

import os
os.system('youtube-dl [OPTIONS] URL [URL...]')

ऊपर सिर्फ अजगर के अंदर कमांड लाइन चल रही है।

अन्य दस्तावेज में उल्लेख किया गया है कि अजगर पर youtube-dl का उपयोग करना यहाँ है

from __future__ import unicode_literals
import youtube_dl

ydl_opts = {}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['https://www.youtube.com/watch?v=BaW_jenozKc'])

4

यहाँ एक तरीका है।

जैसे ही हम कमांड लाइन तर्क सेट करते हैं, हम सूची में विकल्पों का स्ट्रिंग सेट करते हैं। इस मामले में opts=['-g', 'videoID']। फिर, आह्वान करें youtube_dl.main(opts)। इस तरह, हम अपने कस्टम .py मॉड्यूल लिखते हैं, import youtube_dlऔर फिर main()फ़ंक्शन को लागू करते हैं।


इस तरह के कार्य, मुख्य फ़ंक्शन से कुछ भी नहीं लौटाए जाते हैं, इसलिए आपको वास्तव में अभी तक इसका मूल्य नहीं मिल सकता है।
एंथनी चुंग

-3

यदि youtube-dlएक टर्मिनल प्रोग्राम है, तो subprocessआप अपने इच्छित डेटा तक पहुंचने के लिए मॉड्यूल का उपयोग कर सकते हैं।

अधिक जानकारी के लिए इस लिंक को देखें: पायथन में एक बाहरी कमांड को कॉल करना


50
यह एक अजगर कार्यक्रम से एक अजगर कार्यक्रम को कॉल करने के लिए थोड़ा उदास है, है ना?
जुलिएफ़र

11
मैं youtube-dlपायथन में लिखा एक कमांड-लाइन प्रोग्राम मानता हूं और इसे कमांड-लाइन से कॉल करने में कुछ भी गलत नहीं दिखता। यदि आप स्रोत कोड के साथ चक्कर लगाना चाहते हैं, तो कृपया ऐसा करने के लिए स्वतंत्र महसूस करें।

10
अगर आप youtube-dl को अजगर से मॉड्यूल के रूप में आयात करते हैं, तो आपके पास बहुत अधिक नियंत्रण है। कमांड लाइन से मुद्रित डेटा को पार्स करना कहीं भी विश्वसनीय नहीं है।
वैली

इसके अलावा, मैं आपको वास्तव में इस youtube-dl कमांड पर उपप्रोसेस / ओएस.सिस्टम का उपयोग करने की कोशिश करता हूं। यह वास्तव में बहुत अच्छी तरह से काम नहीं करता है, न ही जैसा कि इरादा है, जब तर्कों को पारित करने की कोशिश की जाती है।
इजाक कॉर्बेट

-6

मुझे यह पसंद है

from subprocess import call

command = "youtube-dl https://www.youtube.com/watch?v=NG3WygJmiVs -c"
call(command.split(), shell=False)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.