Як використовувати youtube-dl з програми python?


81

Я хотів би отримати доступ до результату наступної команди оболонки,

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

щоб надрукувати його висновок direct urlу файл із програми python. Це те, що я спробував:

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

Відповіді:


139

Це не складно і фактично задокументовано :

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
Я отримую цю помилку: import youtube_dl ImportError: Немає модуля з іменем youtube_dl
Ufoguy

8
Вам потрібно встановити youtube_dl: якщо у вас є утиліта pip (для її встановлення, sudo apt-get install python-pip), ви можете sudo pip встановити youtube-dl
JulienFr

Якщо у вас на gentoo "Немає модуля з іменем youtube_dl", ви можете спробувати додати "#! / Usr / bin / env python2.7" на початок файлу python.
puchu

9
Я знаю, що це старе, і є інші відповіді, але лише для уточнення. У нових версіях youtube_dl відбулися деякі зміни, і замість них video['url']вони змінилися наvideo['webpage_url']
DarkXDroid

4
Яка мета with ydl:?
HelloGoodbye

5

Щодо простого коду, можливо, я думаю

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

Вище просто запущений командний рядок всередині python.

Інше згадується в документації Використання youtube-dl на python Ось спосіб

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модуль для доступу до потрібних даних.

Перегляньте це посилання для отримання додаткової інформації: Виклик зовнішньої команди в Python


50
Трохи сумно називати програму python із програми python, чи не так?
JulienFr

11
Я вважаю youtube-dlпрограмою командного рядка, написану на Python, і не бачу нічого поганого у тому, щоб викликати її з командного рядка. Якщо ви хочете поспішати з вихідним кодом, будь ласка, зробіть це.

10
@Xaranke Ви маєте набагато більше контролю, якщо імпортуєте youtube-dl як модуль з python. Розбір друкованих даних із командного рядка ніде не настільки надійний.
Уоллі

Крім того, я смію вас насправді спробувати використовувати subprocess / os.system за цією командою youtube-dl. Насправді це не працює дуже добре, як і не передбачалося, при спробі передачі аргументів.
Ізаак Корбетт

-6

Я хотів би цього

from subprocess import call

command = "youtube-dl https://www.youtube.com/watch?v=NG3WygJmiVs -c"
call(command.split(), shell=False)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.