similar question: How to use youtube-dl from python program
Check this file in the sources: https://github.com/rg3/youtube-dl/blob/master/youtube_dl/__init__.py
You need the dict options (originally created using parameters obtained from the command line):
ydl_opts = { 'usenetrc': opts.usenetrc, 'username': opts.username, 'password': opts.password, # ... all options list available in sources 'exec_cmd': opts.exec_cmd, }
and then instantiate YoutubeDL and call some methods with self- YoutubeDL names:
with YoutubeDL(ydl_opts) as ydl: ydl.print_debug_header() ydl.add_default_info_extractors() # PostProcessors # Add the metadata pp first, the other pps will copy it if opts.addmetadata: ydl.add_post_processor(FFmpegMetadataPP()) if opts.extractaudio: ydl.add_post_processor(FFmpegExtractAudioPP(preferredcodec=opts.audioformat, preferredquality=opts.audioquality, nopostoverwrites=opts.nopostoverwrites)) if opts.recodevideo: ydl.add_post_processor(FFmpegVideoConvertor(preferedformat=opts.recodevideo)) if opts.embedsubtitles: ydl.add_post_processor(FFmpegEmbedSubtitlePP(subtitlesformat=opts.subtitlesformat)) if opts.xattrs: ydl.add_post_processor(XAttrMetadataPP()) if opts.embedthumbnail: if not opts.addmetadata: ydl.add_post_processor(FFmpegAudioFixPP()) ydl.add_post_processor(AtomicParsleyPP()) # Please keep ExecAfterDownload towards the bottom as it allows the user to modify the final file in any way. # So if the user is able to remove the file before your postprocessor runs it might cause a few problems. if opts.exec_cmd: ydl.add_post_processor(ExecAfterDownloadPP( verboseOutput=opts.verbose, exec_cmd=opts.exec_cmd)) # Update version if opts.update_self: update_self(ydl.to_screen, opts.verbose) # Remove cache dir if opts.rm_cachedir: ydl.cache.remove() # Maybe do nothing if (len(all_urls) < 1) and (opts.load_info_filename is None): if not (opts.update_self or opts.rm_cachedir): parser.error(u'you must provide at least one URL') else: sys.exit() try: if opts.load_info_filename is not None: retcode = ydl.download_with_info_file(opts.load_info_filename) else: retcode = ydl.download(all_urls) except MaxDownloadsReached: ydl.to_screen(u'--max-download limit reached, aborting.') retcode = 101
source share