import os import youtube_dl from importer.providers.providerbase import ProviderBase class YoutubeDlProviderBase(ProviderBase): regex = ".*" output_template: str = 'source_%(id)s.%(ext)s' format: str = "best" merge_format_output: str = "mp4" _TEST = [{ "url": "https://www.youtube.com/watch?v=Wjrrgrvq1ew", "paths": ["source_Wjrrgrvq1ew.mp4"] }] def download(self): ydl_opts = { 'format': self.format, 'merge_output_format': self.merge_format_output, 'outtmpl': self.output_template } with youtube_dl.YoutubeDL(ydl_opts) as ydl: info = ydl.extract_info(self.url, download=True) if info.get('_type', None) == 'playlist': for entry in info['entries']: r = ydl.prepare_filename(entry) self.paths.append(f'{os.path.splitext(r)[0]}.mp4') else: r = ydl.prepare_filename(info) self.paths.append(f'{os.path.splitext(r)[0]}.mp4') self.downloaded = True