Làm thế nào để sử dụng youtube-dl từ một chương trình python?


81

Tôi muốn truy cập kết quả của lệnh shell sau,

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

để in đầu ra của nó direct urlthành một tệp, từ trong chương trình python. Đây là những gì tôi đã thử:

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

Điều đó có thể không? Tôi cố gắng để hiểu được cơ chế trong nguồn nhưng bị lạc: youtube_dl/__init__.py, youtube_dl/youtube_DL.py, info_extractors...



1
Viết lên ở đây: willdrevo.com/…
lollercoaster

2
@lollercoaster, URL đó đã chết ... Liên kết đã sửa ở đây .
s3cur3

Câu trả lời:


135

Nó không khó và thực sự được ghi lại :

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
Tôi gặp lỗi này: import youtube_dl ImportError: Không có mô-đun nào có tên youtube_dl
Ufoguy

8
Bạn phải cài đặt youtube_dl: nếu bạn có tiện ích pip (để cài đặt nó, sudo apt-get install python-pip), bạn có thể để sudo pip cài đặt youtube-dl
JulienFr

Nếu bạn có "Không có mô-đun nào có tên youtube_dl" trên gentoo, bạn có thể thử thêm "#! / Usr / bin / env python2.7" vào đầu tệp python.
puchu

9
Tôi biết điều này là cũ và có những câu trả lời khác nhưng chỉ để làm rõ. Trên các phiên bản mới của youtube_dl đã có một số thay đổi và thay vì video['url']nó đổi thànhvideo['webpage_url']
DarkXDroid

4
Mục đích là with ydl:gì?
HelloGoodbye

5

Đối với mã đơn giản, có thể tôi nghĩ

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

Trên đây chỉ là dòng lệnh chạy bên trong python.

Khác được đề cập trong tài liệu Sử dụng youtube-dl trên python Đây là cách

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

Đây là một cách.

Chúng tôi thiết lập chuỗi tùy chọn ', trong một danh sách, cũng giống như chúng tôi thiết lập các đối số dòng lệnh. Trong trường hợp này opts=['-g', 'videoID']. Sau đó, gọi youtube_dl.main(opts). Bằng cách này, chúng tôi viết mô-đun .py tùy chỉnh của chúng tôi, import youtube_dlvà sau đó gọi main()hàm.


loại này hoạt động, không có gì được trả về từ hàm chính, vì vậy bạn chưa thể thực sự nhận được giá trị của nó.
Anthony Chung

-3

Nếu youtube-dllà chương trình đầu cuối, bạn có thể sử dụng subprocessmô-đun để truy cập dữ liệu bạn muốn.

Kiểm tra liên kết này để biết thêm chi tiết: Gọi lệnh bên ngoài bằng Python


50
Hơi buồn khi gọi chương trình python từ chương trình python phải không?
JulienFr

11
Tôi coi đây youtube-dllà một chương trình dòng lệnh được viết bằng Python và không thấy gì sai khi gọi nó từ dòng lệnh. Nếu bạn muốn sử dụng mã nguồn, vui lòng làm như vậy.

10
@Xaranke Bạn có nhiều quyền kiểm soát hơn nếu nhập youtube-dl dưới dạng mô-đun từ python. Phân tích cú pháp dữ liệu in từ dòng lệnh không đáng tin cậy.
Wally

Ngoài ra, tôi dám bạn thực sự thử sử dụng subprocess / os.system trên lệnh youtube-dl này. Nó không thực sự hoạt động tốt, cũng không như dự định, khi cố gắng vượt qua các đối số.
Izaac Corbett

-6

Tôi muốn cái này

from subprocess import call

command = "youtube-dl https://www.youtube.com/watch?v=NG3WygJmiVs -c"
call(command.split(), shell=False)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.