How to use youtube-dl from a python program?

I would like to access the result of the following shell command,

youtube-dl -g ""

to print its output direct url to a file, from within a python program. This is what I have tried:

import youtube-dl

Is that possible?
I tried to understand the mechanism in the source but got lost: youtube_dl/, youtube_dl/, info_extractors


Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

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(
        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]
    # Just a video
    video = result

video_url = video['url']

Method 2

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

Method 3

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.

Method 4

from __future__ import unicode_literals 
import youtube_dl

ydl_opts = {} 
with youtube_dl.YoutubeDL(ydl_opts) as ydl:['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':

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

'noplaylist': True;

Method 5

Usage: python3 link outputName

import os
from sys import argv

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

os.system('youtube-dl -x --audio-format mp3 -o '+argv[2]+' '+argv[1])

Method 6

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

Method 7

I would like this

from subprocess import call

command = "youtube-dl -c"
call(command.split(), shell=False)

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Notify of

Inline Feedbacks
View all comments
Would love your thoughts, please comment.x