¿Cómo usar youtube-dl desde un programa de Python?

81

Me gustaría acceder al resultado del siguiente comando de shell,

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

para imprimir su salida direct urlen un archivo, desde dentro de un programa de Python. Esto es lo que he probado:

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

¿Es eso posible? Traté de entender el mecanismo de la fuente, pero se perdió: youtube_dl/__init__.py, youtube_dl/youtube_DL.py, info_extractors...

JulienFr
fuente
1
Escritura
lollercoaster
2
@lollercoaster, esa URL está muerta ... Enlace fijo aquí .
s3cur3

Respuestas:

135

No es difícil y está realmente documentado :

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
fuente
3
Recibo este error: import youtube_dl ImportError: Ningún módulo llamado youtube_dl
Ufoguy
8
Tienes que instalar youtube_dl: si tienes la utilidad pip (para instalarla, sudo apt-get install python-pip) puedes sudo pip install youtube-dl
JulienFr
Si tiene "Ningún módulo llamado youtube_dl" en gentoo, puede intentar agregar "#! / Usr / bin / env python2.7" al inicio del archivo python.
Puchu
9
Sé que esto es antiguo y hay otras respuestas, pero solo para aclarar. En las nuevas versiones de youtube_dl hubo algunos cambios y en lugar de video['url']cambiar avideo['webpage_url']
DarkXDroid
4
¿Cuál es el propósito de with ydl:?
Hola
4

He aquí una forma.

Configuramos la cadena de opciones, en una lista, tal como configuramos los argumentos de la línea de comandos. En este caso opts=['-g', 'videoID']. Luego, invoca youtube_dl.main(opts). De esta manera, escribimos nuestro módulo .py personalizado import youtube_dly luego invocamos la main()función.

cogito ergo sum
fuente
este tipo de funciona, no se devuelve nada de la función principal, por lo que todavía no puede obtener el valor de la misma.
Anthony Chung
4

Para un código simple, creo que

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

Arriba solo se ejecuta la línea de comando dentro de Python.

Otro se menciona en la documentación Usando youtube-dl en Python Aquí está la forma

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
fuente
-3

Si youtube-dles un programa de terminal, puede utilizar el subprocessmódulo para acceder a los datos que desee.

Consulte este enlace para obtener más detalles: Llamar a un comando externo en Python

Comunidad
fuente
50
Es un poco triste llamar a un programa de Python desde un programa de Python, ¿no?
Julien viernes
11
Considero youtube-dlque es un programa de línea de comandos escrito en Python y no veo nada de malo en llamarlo desde la línea de comandos. Si desea jugar con el código fuente, no dude en hacerlo.
10
@Xaranke Tienes mucho más control si importas youtube-dl como un módulo de python. Analizar datos impresos desde la línea de comando no es tan confiable en ninguna parte.
Wally
Además, te reto a que pruebes a usar subprocess / os.system en este comando youtube-dl. En realidad, no funciona muy bien, ni como se esperaba, cuando se intenta pasar argumentos.
Izaac Corbett
-6

me gustaría esto

from subprocess import call

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