如何从python程序使用youtube-dl?


81

我想访问以下shell命令的结果,

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

direct url从python程序中将其输出打印到文件中。这是我尝试过的:

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

那可能吗?我试图了解源的机制,但迷路了:youtube_dl/__init__.pyyoutube_dl/youtube_DL.pyinfo_extractors...



1
体面写在这里:willdrevo.com/...
lollercoaster

2
@lollercoaster,该URL已死...固定链接在这里
s3cur3

Answers:


135

这并不困难,实际上已记录在案

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 2014年

8
您必须安装youtube_dl:如果您拥有pip实用程序(要安装sudo apt-get install python-pip进行安装),则可以sudo pip安装youtube-dl
JulienFr 2014年

如果您在gentoo上具有“没有名为youtube_dl的模块”,则可以尝试将“#!/ usr / bin / env python2.7”添加到python文件的开头。
puchu 2014年

9
我知道这很古老,还有其他答案,不过只是为了澄清。在youtube_dl的新版本上进行了一些更改,而不是video['url']更改为video['webpage_url']
DarkXDroid

4
目的是with ydl:什么?
HelloGoodbye

4

这是一种方法。

我们在列表中设置选项的字符串,就像设置命令行参数一样。在这种情况下opts=['-g', 'videoID']。然后,调用youtube_dl.main(opts)。这样,我们编写了自定义.py模块,import youtube_dl然后调用了该main()函数。


这样的工作,主函数什么也不会返回,因此您还不能真正获得它的价值。
Anthony Chun

4

对于简单的代码,可能是我认为

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

上面只是在python内部运行命令行。

在文档中使用youtube-dl在文档中提到了其他 方法

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

如果youtube-dl是终端程序,则可以使用该subprocess模块访问所需的数据。

请查看此链接以获取更多详细信息:在Python中调用外部命令


50
这是一个有点伤感地从一个Python程序中调用Python程序,是不是?
JulienFr

11
我认为youtube-dl这是一个用Python编写的命令行程序,从命令行调用它没有发现任何问题。如果您想混用源代码,请随时这样做。

10
@Xaranke如果您将youtube-dl作为模块从python导入,则您将拥有更多的控制权。从命令行解析打印的数据远没有那么可靠。
沃里

另外,我敢于在youtube-dl命令上实际尝试使用subprocess / os.system。尝试传递参数时,它实际上并不能很好地工作,也没有达到预期的效果。
艾萨克·科贝特

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.