spotDL / spotify-downloader

Download your Spotify playlists and songs along with album art and metadata (from YouTube if a match is found).
https://spotdl.readthedocs.io/en/latest/
MIT License
17.03k stars 1.56k forks source link

AudioProviderError: YT-DLP download error, for all songs I tried. #1839

Closed cariosa closed 1 year ago

cariosa commented 1 year ago

System OS

Linux

Python Version

3.11 (CPython)

Install Source

pip / PyPi

Install version / commit hash

4.1.10

Expected Behavior vs Actual Behavior

download songs when I run the command

Steps to reproduce - Ensure to include actual links!

  1. install spotdl through pip
  2. run spotdl https://open.spotify.com/track/0AxZUYeQ9bZwSdt1LmZuok --log-level DEBUG to download a song

Traceback

[21:21:35] DEBUG    MainThread - Downloader settings: {'audio_providers':               downloader.py:115
                    ['youtube-music'], 'lyrics_providers': ['genius', 'azlyrics',                        
                    'musixmatch'], 'playlist_numbering': False, 'scan_for_songs':                        
                    False, 'm3u': None, 'output': '{artists} - {title}.{output-ext}',                    
                    'overwrite': 'skip', 'search_query': None, 'ffmpeg': 'ffmpeg',                       
                    'bitrate': None, 'ffmpeg_args': None, 'format': 'mp3', 'save_file':                  
                    None, 'filter_results': True, 'threads': 4, 'cookie_file': None,                     
                    'restrict': False, 'print_errors': False, 'sponsor_block': False,                    
                    'preload': False, 'archive': None, 'load_config': True,                              
                    'log_level': 'DEBUG', 'simple_tui': False, 'fetch_albums': False,                    
                    'id3_separator': '/', 'ytm_data': False, 'add_unavailable': False,                   
                    'generate_lrc': False, 'force_update_metadata': False,                               
                    'only_verified_results': False, 'sync_without_deleting': False,                      
                    'max_filename_length': None}                                                         
[21:21:35] DEBUG    MainThread - FFmpeg path: ffmpeg                                    downloader.py:133
[21:21:35] DEBUG    MainThread - Found 0 known songs                                    downloader.py:158
[09:21:37 PM] DEBUG    MainThread - Archive: 0 urls                                     downloader.py:192
[09:21:37 PM] DEBUG    MainThread - Downloader initialized                              downloader.py:194
[09:21:37 PM] INFO     MainThread - Processing query:                                       search.py:125
                       https://open.spotify.com/track/0AxZUYeQ9bZwSdt1LmZuok                             
[09:21:37 PM] DEBUG    MainThread - Found 1 songs in 0 lists                                search.py:257
[09:21:37 PM] DEBUG    MainThread - Downloading 1 songs                                 downloader.py:241
[09:21:38 PM] DEBUG    asyncio_0 - Genius failed to find lyrics for Cocteau Twins -     downloader.py:358
                       Heaven or Las Vegas                                                               
[09:21:39 PM] DEBUG    asyncio_0 - Found lyrics for Cocteau Twins - Heaven or Las Vegas downloader.py:352
                       on AzLyrics                                                                       
[09:21:39 PM] DEBUG    asyncio_0 - [0AxZUYeQ9bZwSdt1LmZuok] Searching for cocteau twins -     base.py:157
                       heaven or las vegas                                                               
[09:21:39 PM] DEBUG    asyncio_0 - [0AxZUYeQ9bZwSdt1LmZuok] Found 1 results for ISRC          base.py:172
                       GBAFL9000039                                                                      
[09:21:39 PM] DEBUG    asyncio_0 - [0AxZUYeQ9bZwSdt1LmZuok] Filtered to 1 ISRC results        base.py:184
[09:21:39 PM] DEBUG    asyncio_0 - [0AxZUYeQ9bZwSdt1LmZuok] Best ISRC result is               base.py:193
                       https://music.youtube.com/watch?v=LRFWkkIXBxM with score 100.0                    
[09:21:39 PM] DEBUG    asyncio_0 - Downloading Cocteau Twins - Heaven or Las Vegas      downloader.py:571
                       using https://music.youtube.com/watch?v=LRFWkkIXBxM                               
Cocteau Twins - Heaven or Las Vegas Download Started   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   0% -:--:--[09:23:42 PM] ERROR    asyncio_0 - Traceback (most recent call last):             progress_handler.py:358
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/spotdl/providers/audio/                        
                       base.py", line 343, in get_download_metadata                                      
                           data = self.audio_handler.extract_info(url,                                   
                       download=download)                                                                
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                       ^^^^^^^^                                                                          
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py",                          
                       line 1507, in extract_info                                                        
                           return self.__extract_info(url,                                               
                       self.get_info_extractor(key), download, extra_info,                               
                       process)                                                                          
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                            
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py",                          
                       line 1518, in wrapper                                                             
                           return func(self, *args, **kwargs)                                            
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^                                            
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py",                          
                       line 1615, in __extract_info                                                      
                           return self.process_ie_result(ie_result, download,                            
                       extra_info)                                                                       
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                       ^^^^^^^^                                                                          
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py",                          
                       line 1674, in process_ie_result                                                   
                           ie_result = self.process_video_result(ie_result,                              
                       download=download)                                                                
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                       ^^^^^^^^^^^^^                                                                     
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py",                          
                       line 2779, in process_video_result                                                
                           self.process_info(new_info)                                                   
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py",                          
                       line 3247, in process_info                                                        
                           success, real_download = self.dl(temp_filename,                               
                       info_dict)                                                                        
                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                       ^^^^                                                                              
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py",                          
                       line 2970, in dl                                                                  
                           return fd.download(name, new_info, subtitle)                                  
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                  
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/downloader/commo                        
                       n.py", line 444, in download                                                      
                           ret = self.real_download(filename, info_dict)                                 
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                 
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/downloader/dash.                        
                       py", line 60, in real_download                                                    
                           return                                                                        
                       self.download_and_append_fragments_multiple(*args,                                
                       is_fatal=lambda idx: idx == 0)                                                    
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/downloader/fragm                        
                       ent.py", line 382, in                                                             
                       download_and_append_fragments_multiple                                            
                           return self.download_and_append_fragments(*args[0],                           
                       **kwargs)                                                                         
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                       ^^^^^^^                                                                           
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/downloader/fragm                        
                       ent.py", line 521, in download_and_append_fragments                               
                           download_fragment(fragment, ctx)                                              
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/downloader/fragm                        
                       ent.py", line 469, in download_fragment                                           
                           if not self._download_fragment(                                               
                                  ^^^^^^^^^^^^^^^^^^^^^^^^                                               
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/downloader/fragm                        
                       ent.py", line 124, in _download_fragment                                          
                           success, _ = ctx['dl'].download(fragment_filename,                            
                       fragment_info_dict)                                                               
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                       ^^^^^^^^^^^^^^^^                                                                  
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/downloader/commo                        
                       n.py", line 444, in download                                                      
                           ret = self.real_download(filename, info_dict)                                 
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                 
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/downloader/http.                        
                       py", line 374, in real_download                                                   
                           for retry in RetryManager(self.params.get('retries'),                         
                       self.report_retry):                                                               
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/utils.py", line                         
                       6141, in __iter__                                                                 
                           self.error_callback(self.error, self.attempt,                                 
                       self.retries)                                                                     
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/downloader/commo                        
                       n.py", line 389, in report_retry                                                  
                           RetryManager.report_retry(                                                    
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/utils.py", line                         
                       6148, in report_retry                                                             
                           return error(f'{e}. Giving up after {count - 1}                               
                       retries') if count > 1 else error(str(e))                                         
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                       ^^^                                                                               
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/downloader/commo                        
                       n.py", line 392, in <lambda>                                                      
                           error=IDENTITY if not fatal else lambda e:                                    
                       self.report_error(f'\r Got error: {e}'),                                          
                                                                      ^^^^^^^^^^^                        
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                            
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py",                          
                       line 1015, in report_error                                                        
                           self.trouble(f'{self._format_err("ERROR:",                                    
                       self.Styles.ERROR)} {message}', *args, **kwargs)                                  
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py",                          
                       line 935, in trouble                                                              
                           self.to_stderr(message)                                                       
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py",                          
                       line 883, in to_stderr                                                            
                           self.params['logger'].error(message)                                          
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/spotdl/providers/audio/                        
                       base.py", line 52, in error                                                       
                           raise AudioProviderError(msg)                                                 
                       spotdl.providers.audio.base.AudioProviderError: ERROR:                            
                       Got error: <urlopen error _ssl.c:985: The handshake                               
                       operation timed out>. Giving up after 5 retries                                   

                       The above exception was the direct cause of the following                         
                       exception:                                                                        

                       Traceback (most recent call last):                                                
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/spotdl/download/downloa                        
                       der.py", line 579, in search_and_download                                         
                           download_info =                                                               
                       audio_downloader.get_download_metadata(                                           
                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                       ^                                                                                 
                         File                                                                            
                       "/usr/lib/python3.11/site-packages/spotdl/providers/audio/                        
                       base.py", line 348, in get_download_metadata                                      
                           raise AudioProviderError(f"YT-DLP download error -                            
                       {url}") from exception                                                            
                       spotdl.providers.audio.base.AudioProviderError: YT-DLP                            
                       download error -                                                                  
                       https://music.youtube.com/watch?v=LRFWkkIXBxM                                     

                       ╭────────── Traceback (most recent call last) ───────────╮                        
                       │ /usr/lib/python3.11/site-packages/spotdl/providers/aud │                        
                       │ io/base.py:343 in get_download_metadata                │                        
                       │                                                        │                        
                       │   340 │   │   """                                      │                        
                       │   341 │   │                                            │                        
                       │   342 │   │   try:                                     │                        
                       │ ❱ 343 │   │   │   data = self.audio_handler.extract_in │                        
                       │   344 │   │   │                                        │                        
                       │   345 │   │   │   if data:                             │                        
                       │   346 │   │   │   │   return data                      │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py: │                        
                       │ 1507 in extract_info                                   │                        
                       │                                                        │                        
                       │   1504 │   │   │   │   if self.params.get('break_on_ex │                        
                       │   1505 │   │   │   │   │   raise ExistingVideoReached( │                        
                       │   1506 │   │   │   │   break                           │                        
                       │ ❱ 1507 │   │   │   return self.__extract_info(url, sel │                        
                       │        extra_info, process)                            │                        
                       │   1508 │   │   else:                                   │                        
                       │   1509 │   │   │   extractors_restricted = self.params │                        
                       │        ['default'])                                    │                        
                       │   1510 │   │   │   self.report_error(f'No suitable ext │                        
                       │        (%s)")} found for URL {url}',                   │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py: │                        
                       │ 1518 in wrapper                                        │                        
                       │                                                        │                        
                       │   1515 │   │   def wrapper(self, *args, **kwargs):     │                        
                       │   1516 │   │   │   while True:                         │                        
                       │   1517 │   │   │   │   try:                            │                        
                       │ ❱ 1518 │   │   │   │   │   return func(self, *args, ** │                        
                       │   1519 │   │   │   │   except (DownloadCancelled, Lazy │                        
                       │   1520 │   │   │   │   │   raise                       │                        
                       │   1521 │   │   │   │   except ReExtractInfo as e:      │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py: │                        
                       │ 1615 in __extract_info                                 │                        
                       │                                                        │                        
                       │   1612 │   │   self.add_default_extra_info(ie_result,  │                        
                       │   1613 │   │   if process:                             │                        
                       │   1614 │   │   │   self._wait_for_video(ie_result)     │                        
                       │ ❱ 1615 │   │   │   return self.process_ie_result(ie_re │                        
                       │   1616 │   │   else:                                   │                        
                       │   1617 │   │   │   return ie_result                    │                        
                       │   1618                                                 │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py: │                        
                       │ 1674 in process_ie_result                              │                        
                       │                                                        │                        
                       │   1671 │   │                                           │                        
                       │   1672 │   │   if result_type == 'video':              │                        
                       │   1673 │   │   │   self.add_extra_info(ie_result, extr │                        
                       │ ❱ 1674 │   │   │   ie_result = self.process_video_resu │                        
                       │   1675 │   │   │   self._raise_pending_errors(ie_resul │                        
                       │   1676 │   │   │   additional_urls = (ie_result or {}) │                        
                       │   1677 │   │   │   if additional_urls:                 │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py: │                        
                       │ 2779 in process_video_result                           │                        
                       │                                                        │                        
                       │   2776 │   │   │   │   │   })                          │                        
                       │   2777 │   │   │   │   downloaded_formats.append(new_i │                        
                       │   2778 │   │   │   │   try:                            │                        
                       │ ❱ 2779 │   │   │   │   │   self.process_info(new_info) │                        
                       │   2780 │   │   │   │   except MaxDownloadsReached:     │                        
                       │   2781 │   │   │   │   │   max_downloads_reached = Tru │                        
                       │   2782 │   │   │   │   self._raise_pending_errors(new_ │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py: │                        
                       │ 3247 in process_info                                   │                        
                       │                                                        │                        
                       │   3244 │   │   │   │   │   if dl_filename is None or d │                        
                       │   3245 │   │   │   │   │   │   # dl_filename == temp_f │                        
                       │        partially downloaded with --no-part.            │                        
                       │   3246 │   │   │   │   │   │   # So we should try to r │                        
                       │ ❱ 3247 │   │   │   │   │   │   success, real_download  │                        
                       │   3248 │   │   │   │   │   │   info_dict['__real_downl │                        
                       │   3249 │   │   │   │   │   else:                       │                        
                       │   3250 │   │   │   │   │   │   self.report_file_alread │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py: │                        
                       │ 2970 in dl                                             │                        
                       │                                                        │                        
                       │   2967 │   │   new_info = self._copy_infodict(info)    │                        
                       │   2968 │   │   if new_info.get('http_headers') is None │                        
                       │   2969 │   │   │   new_info['http_headers'] = self._ca │                        
                       │ ❱ 2970 │   │   return fd.download(name, new_info, subt │                        
                       │   2971 │                                               │                        
                       │   2972 │   def existing_file(self, filepaths, *, defau │                        
                       │   2973 │   │   existing_files = list(filter(os.path.ex │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/downloader/co │                        
                       │ mmon.py:444 in download                                │                        
                       │                                                        │                        
                       │   441 │   │   │   self.to_screen(f'[download] Sleeping │                        
                       │   442 │   │   │   time.sleep(sleep_interval)           │                        
                       │   443 │   │                                            │                        
                       │ ❱ 444 │   │   ret = self.real_download(filename, info_ │                        
                       │   445 │   │   self._finish_multiline_status()          │                        
                       │   446 │   │   return ret, True                         │                        
                       │   447                                                  │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/downloader/da │                        
                       │ sh.py:60 in real_download                              │                        
                       │                                                        │                        
                       │   57 │   │   │                                         │                        
                       │   58 │   │   │   args.append([ctx, fragments_to_downlo │                        
                       │   59 │   │                                             │                        
                       │ ❱ 60 │   │   return self.download_and_append_fragments │                        
                       │      idx == 0)                                         │                        
                       │   61 │                                                 │                        
                       │   62 │   def _resolve_fragments(self, fragments, ctx): │                        
                       │   63 │   │   fragments = fragments(ctx) if callable(fr │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/downloader/fr │                        
                       │ agment.py:382 in                                       │                        
                       │ download_and_append_fragments_multiple                 │                        
                       │                                                        │                        
                       │   379 │   │   interrupt_trigger = [True]               │                        
                       │   380 │   │   max_progress = len(args)                 │                        
                       │   381 │   │   if max_progress == 1:                    │                        
                       │ ❱ 382 │   │   │   return self.download_and_append_frag │                        
                       │   383 │   │   max_workers = self.params.get('concurren │                        
                       │   384 │   │   if max_progress > 1:                     │                        
                       │   385 │   │   │   self._prepare_multiline_status(max_p │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/downloader/fr │                        
                       │ agment.py:521 in download_and_append_fragments         │                        
                       │                                                        │                        
                       │   518 │   │   │   │   if not interrupt_trigger[0]:     │                        
                       │   519 │   │   │   │   │   break                        │                        
                       │   520 │   │   │   │   try:                             │                        
                       │ ❱ 521 │   │   │   │   │   download_fragment(fragment,  │                        
                       │   522 │   │   │   │   │   result = append_fragment(    │                        
                       │   523 │   │   │   │   │   │   decrypt_fragment(fragmen │                        
                       │       fragment['frag_index'], ctx)                     │                        
                       │   524 │   │   │   │   except KeyboardInterrupt:        │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/downloader/fr │                        
                       │ agment.py:469 in download_fragment                     │                        
                       │                                                        │                        
                       │   466 │   │   │   for retry in RetryManager(self.param │                        
                       │       error_callback):                                 │                        
                       │   467 │   │   │   │   try:                             │                        
                       │   468 │   │   │   │   │   ctx['fragment_count'] = frag │                        
                       │ ❱ 469 │   │   │   │   │   if not self._download_fragme │                        
                       │   470 │   │   │   │   │   │   │   ctx, fragment['url'] │                        
                       │       info_dict.get('request_data')):                  │                        
                       │   471 │   │   │   │   │   │   return                   │                        
                       │   472 │   │   │   │   except (urllib.error.HTTPError,  │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/downloader/fr │                        
                       │ agment.py:124 in _download_fragment                    │                        
                       │                                                        │                        
                       │   121 │   │   │   'request_data': request_data,        │                        
                       │   122 │   │   │   'ctx_id': ctx.get('ctx_id'),         │                        
                       │   123 │   │   }                                        │                        
                       │ ❱ 124 │   │   success, _ = ctx['dl'].download(fragment │                        
                       │   125 │   │   if not success:                          │                        
                       │   126 │   │   │   return False                         │                        
                       │   127 │   │   if fragment_info_dict.get('filetime'):   │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/downloader/co │                        
                       │ mmon.py:444 in download                                │                        
                       │                                                        │                        
                       │   441 │   │   │   self.to_screen(f'[download] Sleeping │                        
                       │   442 │   │   │   time.sleep(sleep_interval)           │                        
                       │   443 │   │                                            │                        
                       │ ❱ 444 │   │   ret = self.real_download(filename, info_ │                        
                       │   445 │   │   self._finish_multiline_status()          │                        
                       │   446 │   │   return ret, True                         │                        
                       │   447                                                  │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/downloader/ht │                        
                       │ tp.py:374 in real_download                             │                        
                       │                                                        │                        
                       │   371 │   │   │                                        │                        
                       │   372 │   │   │   return True                          │                        
                       │   373 │   │                                            │                        
                       │ ❱ 374 │   │   for retry in RetryManager(self.params.ge │                        
                       │   375 │   │   │   try:                                 │                        
                       │   376 │   │   │   │   establish_connection()           │                        
                       │   377 │   │   │   │   return download()                │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/utils.py:6141 │                        
                       │ in __iter__                                            │                        
                       │                                                        │                        
                       │   6138 │   │   │   self.attempt += 1                   │                        
                       │   6139 │   │   │   yield self                          │                        
                       │   6140 │   │   │   if self.error:                      │                        
                       │ ❱ 6141 │   │   │   │   self.error_callback(self.error, │                        
                       │   6142 │                                               │                        
                       │   6143 │   @staticmethod                               │                        
                       │   6144 │   def report_retry(e, count, retries, *, slee │                        
                       │        suffix=None):                                   │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/downloader/co │                        
                       │ mmon.py:389 in report_retry                            │                        
                       │                                                        │                        
                       │   386 │   def report_retry(self, err, count, retries,  │                        
                       │   387 │   │   """Report retry"""                       │                        
                       │   388 │   │   is_frag = False if frag_index is NO_DEFA │                        
                       │ ❱ 389 │   │   RetryManager.report_retry(               │                        
                       │   390 │   │   │   err, count, retries, info=self.__to_ │                        
                       │   391 │   │   │   warn=lambda msg: self.__to_screen(f' │                        
                       │   392 │   │   │   error=IDENTITY if not fatal else lam │                        
                       │       Got error: {e}'),                                │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/utils.py:6148 │                        
                       │ in report_retry                                        │                        
                       │                                                        │                        
                       │   6145 │   │   """Utility function for reporting retri │                        
                       │   6146 │   │   if count > retries:                     │                        
                       │   6147 │   │   │   if error:                           │                        
                       │ ❱ 6148 │   │   │   │   return error(f'{e}. Giving up a │                        
                       │        else error(str(e))                              │                        
                       │   6149 │   │   │   raise e                             │                        
                       │   6150 │   │                                           │                        
                       │   6151 │   │   if not count:                           │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/downloader/co │                        
                       │ mmon.py:392 in <lambda>                                │                        
                       │                                                        │                        
                       │   389 │   │   RetryManager.report_retry(               │                        
                       │   390 │   │   │   err, count, retries, info=self.__to_ │                        
                       │   391 │   │   │   warn=lambda msg: self.__to_screen(f' │                        
                       │ ❱ 392 │   │   │   error=IDENTITY if not fatal else lam │                        
                       │       Got error: {e}'),                                │                        
                       │   393 │   │   │   sleep_func=self.params.get('retry_sl │                        
                       │       'http'),                                         │                        
                       │   394 │   │   │   suffix=f'fragment{"s" if frag_index  │                        
                       │       is_frag else None)                               │                        
                       │   395                                                  │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py: │                        
                       │ 1015 in report_error                                   │                        
                       │                                                        │                        
                       │   1012 │   │   Do the same as trouble, but prefixes th │                        
                       │   1013 │   │   in red if stderr is a tty file.         │                        
                       │   1014 │   │   '''                                     │                        
                       │ ❱ 1015 │   │   self.trouble(f'{self._format_err("ERROR │                        
                       │        *args, **kwargs)                                │                        
                       │   1016 │                                               │                        
                       │   1017 │   def write_debug(self, message, only_once=Fa │                        
                       │   1018 │   │   '''Log debug message or Print message t │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py: │                        
                       │ 935 in trouble                                         │                        
                       │                                                        │                        
                       │    932 │   │   @param is_error    Whether to raise err │                        
                       │    933 │   │   """                                     │                        
                       │    934 │   │   if message is not None:                 │                        
                       │ ❱  935 │   │   │   self.to_stderr(message)             │                        
                       │    936 │   │   if self.params.get('verbose'):          │                        
                       │    937 │   │   │   if tb is None:                      │                        
                       │    938 │   │   │   │   if sys.exc_info()[0]:  # if .tr │                        
                       │        block                                           │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py: │                        
                       │ 883 in to_stderr                                       │                        
                       │                                                        │                        
                       │    880 │   │   """Print message to stderr"""           │                        
                       │    881 │   │   assert isinstance(message, str)         │                        
                       │    882 │   │   if self.params.get('logger'):           │                        
                       │ ❱  883 │   │   │   self.params['logger'].error(message │                        
                       │    884 │   │   else:                                   │                        
                       │    885 │   │   │   self._write_string(f'{self._bidi_wo │                        
                       │        self._out_files.error, only_once=only_once)     │                        
                       │    886                                                 │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/spotdl/providers/aud │                        
                       │ io/base.py:52 in error                                 │                        
                       │                                                        │                        
                       │    49 │   │   YTDL uses this to print errors.          │                        
                       │    50 │   │   """                                      │                        
                       │    51 │   │                                            │                        
                       │ ❱  52 │   │   raise AudioProviderError(msg)            │                        
                       │    53                                                  │                        
                       │    54                                                  │                        
                       │    55 ISRC_REGEX = re.compile(r"^[A-Z]{2}-?\w{3}-?\d{2 │                        
                       ╰────────────────────────────────────────────────────────╯                        
                       AudioProviderError: ERROR: [download] Got error: <urlopen                         
                       error _ssl.c:985: The handshake operation timed out>.                             
                       Giving up after 5 retries                                                         

                       The above exception was the direct cause of the following                         
                       exception:                                                                        

                       ╭────────── Traceback (most recent call last) ───────────╮                        
                       │ /usr/lib/python3.11/site-packages/spotdl/download/down │                        
                       │ loader.py:579 in search_and_download                   │                        
                       │                                                        │                        
                       │   576 │   │   │   )                                    │                        
                       │   577 │   │   │                                        │                        
                       │   578 │   │   │   # Download the song using yt-dlp     │                        
                       │ ❱ 579 │   │   │   download_info = audio_downloader.get │                        
                       │   580 │   │   │   │   download_url, download=True      │                        
                       │   581 │   │   │   )                                    │                        
                       │   582                                                  │                        
                       │                                                        │                        
                       │ /usr/lib/python3.11/site-packages/spotdl/providers/aud │                        
                       │ io/base.py:348 in get_download_metadata                │                        
                       │                                                        │                        
                       │   345 │   │   │   if data:                             │                        
                       │   346 │   │   │   │   return data                      │                        
                       │   347 │   │   except Exception as exception:           │                        
                       │ ❱ 348 │   │   │   raise AudioProviderError(f"YT-DLP do │                        
                       │   349 │   │                                            │                        
                       │   350 │   │   raise AudioProviderError(f"No metadata f │                        
                       │   351                                                  │                        
                       ╰────────────────────────────────────────────────────────╯                        
                       AudioProviderError: YT-DLP download error -                                       
                       https://music.youtube.com/watch?v=LRFWkkIXBxM

Other details

No response

xnetcat commented 1 year ago

Most likely an issue with your network connection.

https://github.com/ytdl-org/youtube-dl/issues/13947

do you use vpn/proxies?

cariosa commented 1 year ago

I'm not using vpn or proxies, I also checked with my firewall there was no problem there.

AtTimesChris commented 1 year ago

Im also having this issue. No issue before running update "pip install --upgrade spotdl" now getting same error on every song i try. not running any VPN or proxy or anything either, I was spotDL version 4.1.4 before updating to current