107

我想访问以下 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__.py, youtube_dl/youtube_DL.py, info_extractors...

4

7 回答 7

182

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

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)
于 2013-09-22T19:28:17.793 回答
9

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

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

上面只是在 python 中运行命令行。

文档中提到了其他在 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'])
于 2020-06-15T01:39:49.287 回答
4

这是一种方法。

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

于 2013-12-18T21:55:37.117 回答
0
from __future__ import unicode_literals 
import youtube_dl

ydl_opts = {} 
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['Your youtube url'])

您可以在 ydl_opts 中使用 'format'、'continue'、'outtmpl' 作为示例;

ydl_opts= {
           'format: '22',
           'continue': True;
           'outtmpl': '%(uploader)s - %(title)s.%(ext)s'
           'progress_hooks': [my_hook],
          }

def my_hook(d):
    if d['status'] == 'downloading':
        print('Downloading video!')
    if d['status'] == 'finished':
        print('Downloaded!')

当您需要停止播放列表下载时,只需将此代码添加到 ydl_opts。

'noplaylist': True;
于 2022-02-06T14:44:43.770 回答
-2

用法:python3 AudioFromYtVideo.py link outputName

import os
from sys import argv

try:
    if argv[1] and argv[2]:
        pass
except:
    print("Input: python3 [programName] [url] [outputName]")    

os.system('youtube-dl -x --audio-format mp3 -o '+argv[2]+' '+argv[1])
于 2021-08-22T02:31:36.407 回答
-8

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

查看此链接了解更多详细信息:Calling an external command in Python

于 2013-08-05T09:27:35.473 回答
-11

我想要这个

from subprocess import call

command = "youtube-dl https://www.youtube.com/watch?v=NG3WygJmiVs -c"
call(command.split(), shell=False)
于 2014-05-02T13:25:12.593 回答