Wie verwende ich youtube-dl aus einem Python-Programm?

81

Ich möchte auf das Ergebnis des folgenden Shell-Befehls zugreifen:

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

um die Ausgabe direct urlaus einem Python-Programm in eine Datei zu drucken . Folgendes habe ich versucht:

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

Ist das möglich? Ich habe versucht , den Mechanismus in der Quelle zu verstehen , aber verloren ging: youtube_dl/__init__.py, youtube_dl/youtube_DL.py, info_extractors...

JulienFr
quelle
1
Ordentliches
lollercoaster
2
@lollercoaster, diese URL ist tot ... Link hier behoben .
s3cur3

Antworten:

135

Es ist nicht schwierig und tatsächlich dokumentiert :

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)
jaimeMF
quelle
3
Ich erhalte diesen Fehler: import youtube_dl ImportError: Kein Modul namens youtube_dl
Ufoguy
8
Sie müssen die youtube_dl installieren: Wenn Sie das Dienstprogramm pip haben (um es zu installieren, sudo apt-get install python-pip), können Sie sudo pip youtube-dl installieren
JulienFr
Wenn Sie auf gentoo "Kein Modul mit dem Namen youtube_dl" haben, können Sie versuchen, "#! / Usr / bin / env python2.7" am Anfang der Python-Datei hinzuzufügen.
Puchu
9
Ich weiß, das ist alt und es gibt andere Antworten, aber nur um es zu klären. Auf neuen Versionen von youtube_dl gab es einige Änderungen und stattdessen wurde video['url']es zuvideo['webpage_url']
DarkXDroid
4
Was ist der Zweck von with ydl:?
HelloGoodbye
4

Hier ist ein Weg.

Wir richten die Zeichenfolge der Optionen in einer Liste genauso ein wie die Befehlszeilenargumente. In diesem Fall opts=['-g', 'videoID']. Rufen Sie dann auf youtube_dl.main(opts). Auf diese Weise schreiben wir unser benutzerdefiniertes .py-Modul import youtube_dlund rufen dann die main()Funktion auf.

Cogito ergo sum
quelle
Bei dieser Art von Arbeiten wird nichts von der Hauptfunktion zurückgegeben, sodass Sie den Wert noch nicht wirklich ermitteln können.
Anthony Chung
4

Für einfachen Code kann ich denken

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

Oben wird nur die Befehlszeile in Python ausgeführt.

Andere werden in der Dokumentation Verwenden von youtube-dl auf Python erwähnt. Hier ist der Weg

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'])
Nerd
quelle
-3

Wenn youtube-dles sich um ein Terminalprogramm handelt, können Sie mit dem subprocessModul auf die gewünschten Daten zugreifen.

Weitere Informationen finden Sie unter diesem Link: Aufrufen eines externen Befehls in Python

Gemeinschaft
quelle
50
Es ist ein bisschen traurig, ein Python-Programm von einem Python-Programm aus aufzurufen, nicht wahr?
JulienFr
11
Ich halte youtube-dles für ein in Python geschriebenes Befehlszeilenprogramm und sehe nichts Falsches daran, es über die Befehlszeile aufzurufen. Wenn Sie mit dem Quellcode herumspielen möchten, können Sie dies gerne tun.
10
@Xaranke Sie haben viel mehr Kontrolle, wenn Sie youtube-dl als Modul aus Python importieren. Das Parsen gedruckter Daten über die Befehlszeile ist nirgends so zuverlässig.
Wally
Außerdem wage ich Sie, tatsächlich zu versuchen, subprocess / os.system für diesen youtube-dl-Befehl zu verwenden. Es funktioniert weder sehr gut noch wie beabsichtigt, wenn versucht wird, Argumente zu übergeben.
Izaac Corbett
-6

das würde mir gefallen

from subprocess import call

command = "youtube-dl https://www.youtube.com/watch?v=NG3WygJmiVs -c"
call(command.split(), shell=False)
Krishna Deepak
quelle