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
fromurl=""
geturl=youtube-dl.magiclyextracturlfromurl(fromurl)Is that possible?
I tried to understand the mechanism in the source but got lost: youtube_dl/__init__.py, youtube_dl/youtube_DL.py, info_extractors ...
7 Answers
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]
else: # Just a video video = result
print(video)
video_url = video['url']
print(video_url) 11 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 pythonHere is the way
from __future__ import unicode_literals
import youtube_dl
ydl_opts = {}
with youtube_dl.YoutubeDL(ydl_opts) as ydl: ydl.download([') 0 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: 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; 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]) 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
4I would like this
from subprocess import call
command = "youtube-dl -c"
call(command.split(), shell=False)