How to use youtube-dl from a python program?

Each Answer to this Q is separated by one/two green lines.

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

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

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

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.

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;

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

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

I would like this

from subprocess import call

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

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .

Leave a Reply

Your email address will not be published.