I would like to access the result of the following shell command,
youtube-dl -g "www.youtube.com/..."
to print its output direct url
to a file, from within a python program. This is what I have tried:
import youtube-dl fromurl="www.youtube.com/..." 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
…
Answers:
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( '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)
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: ydl.download(['https://www.youtube.com/watch?v=BaW_jenozKc'])
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: 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;
Method 5
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])
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 https://www.youtube.com/watch?v=NG3WygJmiVs -c" call(command.split(), shell=False)
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0