如何在 Python 程序中使用 youtube-dl?

我想访问以下 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..。

201799 次浏览

If youtube-dl is a terminal program, you can use the subprocess module to access the data you want.

Check out this link for more details: Calling an external command in Python

It's not difficult and actually documented:

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)

Here is a way.

We set-up options' string, in a list, just as we set-up command line arguments. In this case opts=['-g', 'videoID']. Then, invoke youtube_dl.main(opts). In this way, we write our custom .py module, import youtube_dl and then invoke the main() function.

I would like this

from subprocess import call


command = "youtube-dl https://www.youtube.com/watch?v=NG3WygJmiVs -c"
call(command.split(), shell=False)

For simple code, may be i think

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

Above is just running command line inside python.

Other is mentioned in the documentation Using youtube-dl on python Here is the way

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

Usage: 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])
from __future__ import unicode_literals
import youtube_dl


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

You can use 'format', 'continue', 'outtmpl' in ydl_opts As example;

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

When you need to stop playlist downloading, Just add this code into ydl_opts.

'noplaylist': True;