¿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...




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)

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.


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'])

-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


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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.