nathom / streamrip

A scriptable music downloader for Qobuz, Tidal, SoundCloud, and Deezer
GNU General Public License v3.0
2.58k stars 222 forks source link

[BUG]no download in MAC #226

Closed cyberianJE closed 2 years ago

cyberianJE commented 2 years ago

Describe the bug

The file downloads apparently but then I get this error

FileNotFoundError

[Errno 2] No such file or directory: 'ffmpeg'

at /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/subprocess.py:1821 in _execute_child 1817│ else: 1818│ err_filename = orig_executable 1819│ if errno_num != 0: 1820│ err_msg = os.strerror(errno_num) → 1821│ raise child_exception_type(errno_num, err_msg, err_filename) 1822│ raise child_exception_type(err_msg) 1823│ 1824│ 1825│ def _handle_exitstatus(self, sts,

Command Used

rip url https://tidal.com/browse/track/17615016

Debug Traceback

DEBUG:streamrip:Config loaded
DEBUG:streamrip:Parsed urls: [('tidal', 'track', '33713333')]
DEBUG:streamrip:Searching for {'id': '33713333'} in database
DEBUG:streamrip:Executing SELECT EXISTS(SELECT 1 FROM downloads WHERE id=?)
DEBUG:streamrip:{'quality': 3, 'download_videos': True, 'user_id': 183088682, 'country_code': 'xx', 'access_token': 'eyJraWQiOiJ2OU1GbFhqWSIsImFsZyI6IkVTMjU2In0.eyJ0eXBlIjoibzJfYWNjZXNzIiwidWlkIjoxODMwODg2ODIsInNjb3BlIjoid19zdWIgcl91c3Igd191c3IiLCJnVmVyIjowLCJzVmVyIjowLCJjaWQiOjMwMDYsImV4cCI6MTYzNzM0MjY0Nywic2lkIjoiOWZhM2MxMjQtYjFlZi00MzkzLWJhNWYtY2JhZmFkM2EyYzA3IiwiaXNzIjoiaHR0cHM6Ly9hdXRoLnRpZGFsLmNvbS92MSJ9.L9psTnZdMGDFeOF-0vp2GVUSt842S9CrQ89EdpJm5jNu-Jo-vDeiGJrSboiZfi0TXgQzqi0u1eF8XFk2cWlbvQ', 'refresh_token': 'eyJraWQiOiJoUzFKYTdVMCIsImFsZyI6IkVTNTEyIn0.eyJ0eXBlIjoibzJfcmVmcmVzaCIsInVpZCI6MTgzMDg4NjgyLCJzY29wZSI6Indfc3ViIHJfdXNyIHdfdXNyIiwiY2lkIjozMDA2LCJzVmVyIjowLCJnVmVyIjowLCJpc3MiOiJodHRwczovL2F1dGgudGlkYWwuY29tL3YxIn0.AE6Rgi6bp58hMJn97Bwl-9mKusY233RYK3XrTn7psd7_JRZYbUjQr3X22bf7ia8aPmgEmqh4IwXFR-VRnJOGCBu0AX9nv1qnf1WMe8G1C33VU-Q_UsThBYz7v__YeUiR5Cq5QVXCNWjrD0NTYBluNSfOtqIM3CGespkItKCqWpjrVAVn', 'token_expiry': 1637342647.975845}
DEBUG:streamrip:Logging in with access token
Logged into Tidal
DEBUG:streamrip:Config saved: /Users/user1/Library/Application Support/streamrip/config.toml
DEBUG:streamrip:{'id': '33713333'}
DEBUG:streamrip:{'downloads': {'folder': '~/Desktop/Automatically Add to Music.localized', 'source_subdirectories': False, 'concurrency': {'enabled': True, 'max_connections': 3}}, 'qobuz': {'quality': 3, 'download_booklets': True, 'email': 'quit', 'password': 'd41d8cd98f00b204e9800998ecf8427e', 'app_id': '', 'secrets': []}, 'tidal': {'quality': 3, 'download_videos': True, 'user_id': xxxxxxxxxx, 'country_code': 'XX', 'access_token': 'eyJraWQiOiJ2OU1GbFhqWSIsImFsZyI6IkVTMjU2In0.eyJ0eXBlIjoibzJfYWNjZXNzIiwidWlkIjoxODMwODg2ODIsInNjb3BlIjoid19zdWIgcl91c3Igd191c3IiLCJnVmVyIjowLCJzVmVyIjowLCJjaWQiOjMwMDYsImV4cCI6MTYzNzM0MjY0Nywic2lkIjoiOWZhM2MxMjQtYjFlZi00MzkzLWJhNWYtY2JhZmFkM2EyYzA3IiwiaXNzIjoiaHR0cHM6Ly9hdXRoLnRpZGFsLmNvbS92MSJ9.L9psTnZdMGDFeOF-0vp2GVUSt842S9CrQ89EdpJm5jNu-Jo-vDeiGJrSboiZfi0TXgQzqi0u1eF8XFk2cWlbvQ', 'refresh_token': 'eyJraWQiOiJoUzFKYTdVMCIsImFsZyI6IkVTNTEyIn0.eyJ0eXBlIjoibzJfcmVmcmVzaCIsInVpZCI6MTgzMDg4NjgyLCJzY29wZSI6Indfc3ViIHJfdXNyIHdfdXNyIiwiY2lkIjozMDA2LCJzVmVyIjowLCJnVmVyIjowLCJpc3MiOiJodHRwczovL2F1dGgudGlkYWwuY29tL3YxIn0.AE6Rgi6bp58hMJn97Bwl-9mKusY233RYK3XrTn7psd7_JRZYbUjQr3X22bf7ia8aPmgEmqh4IwXFR-VRnJOGCBu0AX9nv1qnf1WMe8G1C33VU-Q_UsThBYz7v__YeUiR5Cq5QVXCNWjrD0NTYBluNSfOtqIM3CGespkItKCqWpjrVAVn', 'token_expiry': 1637342647.975845}, 'deezer': {'quality': 2, 'arl': '', 'use_deezloader': True, 'deezloader_warnings': True}, 'soundcloud': {'quality': 0, 'client_id': '', 'app_version': ''}, 'youtube': {'quality': 0, 'download_videos': False, 'video_downloads_folder': ''}, 'database': {'downloads': {'enabled': True, 'path': '/Users/user1/Library/Application Support/streamrip/downloads.db'}, 'failed_downloads': {'enabled': True, 'path': '/Users/user1/Library/Application Support/streamrip/failed_downloads.db'}}, 'conversion': {'enabled': True, 'codec': 'ALAC', 'sampling_rate': 48000, 'bit_depth': 24, 'lossy_bitrate': 320}, 'filters': {'extras': False, 'repeats': False, 'non_albums': False, 'features': False, 'non_studio_albums': False, 'non_remaster': False}, 'artwork': {'embed': True, 'size': 'large', 'max_width': -1, 'max_height': -1, 'keep_hires_cover': False}, 'metadata': {'set_playlist_to_album': True, 'new_playlist_tracknumbers': True, 'exclude': []}, 'filepaths': {'add_singles_to_folder': False, 'folder_format': '', 'track_format': '{tracknumber}. {artist} - {title}', 'restrict_characters': False}, 'lastfm': {'source': 'qobuz', 'fallback_source': 'deezer'}, 'theme': {'progress_bar': 'dainty'}, 'misc': {'version': '1.7'}}
DEBUG:streamrip:Arguments from config: {'restrict_filenames': False, 'parent_folder': '~/Desktop/Automatically Add to Music.localized', 'folder_format': '', 'track_format': '{tracknumber}. {artist} - {title}', 'embed_cover': True, 'embed_cover_size': 'large', 'keep_hires_cover': False, 'set_playlist_to_album': True, 'stay_temp': True, 'conversion': {'enabled': True, 'codec': 'ALAC', 'sampling_rate': 48000, 'bit_depth': 24, 'lossy_bitrate': 320}, 'concurrent_downloads': True, 'max_connections': 3, 'new_tracknumbers': True, 'download_videos': True, 'download_booklets': True, 'download_youtube_videos': False, 'youtube_video_downloads_folder': '', 'add_singles_to_folder': False, 'max_artwork_width': -1, 'max_artwork_height': -1, 'exclude_tags': []}
DEBUG:streamrip:Loading metadata
DEBUG:streamrip:{'id': 33713333, 'title': 'Sk8er Boi', 'duration': 204, 'replayGain': -10.4, 'peak': 0.997375, 'allowStreaming': True, 'streamReady': True, 'streamStartDate': '2016-06-24T00:00:00.000+0000', 'premiumStreamingOnly': False, 'trackNumber': 3, 'volumeNumber': 1, 'version': None, 'popularity': 29, 'copyright': '(P) 2002 Arista Records, LLC.', 'url': 'http://www.tidal.com/track/33713333', 'isrc': 'USAR10200229', 'editable': False, 'explicit': False, 'audioQuality': 'HI_RES', 'audioModes': ['STEREO'], 'artist': {'id': 1567, 'name': 'Avril Lavigne', 'type': 'MAIN', 'picture': '32942462-ecb8-4c5b-981c-b63ebc18691a'}, 'artists': [{'id': 1567, 'name': 'Avril Lavigne', 'type': 'MAIN', 'picture': '32942462-ecb8-4c5b-981c-b63ebc18691a'}], 'album': {'id': 33713330, 'title': 'Let Go', 'cover': '88858072-3555-4190-90cd-073dff3ff6a8', 'vibrantColor': '#823f3c', 'videoCover': None}, 'mixes': {'MASTER_TRACK_MIX': '01483fb2cc0719d4095075421e3cfa', 'TRACK_MIX': '00143d553271d9cde4510eb076b413'}}
DEBUG:streamrip:{'id': 33713333, 'title': 'Sk8er Boi', 'duration': 204, 'replayGain': -10.4, 'peak': 0.997375, 'allowStreaming': True, 'streamReady': True, 'streamStartDate': '2016-06-24T00:00:00.000+0000', 'premiumStreamingOnly': False, 'trackNumber': 3, 'volumeNumber': 1, 'version': None, 'popularity': 29, 'copyright': '(P) 2002 Arista Records, LLC.', 'url': 'http://www.tidal.com/track/33713333', 'isrc': 'USAR10200229', 'editable': False, 'explicit': False, 'audioQuality': 'HI_RES', 'audioModes': ['STEREO'], 'artist': {'id': 1567, 'name': 'Avril Lavigne', 'type': 'MAIN', 'picture': '32942462-ecb8-4c5b-981c-b63ebc18691a'}, 'artists': [{'id': 1567, 'name': 'Avril Lavigne', 'type': 'MAIN', 'picture': '32942462-ecb8-4c5b-981c-b63ebc18691a'}], 'album': {'id': 33713330, 'title': 'Let Go', 'cover': '88858072-3555-4190-90cd-073dff3ff6a8', 'vibrantColor': '#823f3c', 'videoCover': None}, 'mixes': {'MASTER_TRACK_MIX': '01483fb2cc0719d4095075421e3cfa', 'TRACK_MIX': '00143d553271d9cde4510eb076b413'}}
Downloading Avril Lavigne - Sk8er Boi

DEBUG:streamrip:Track meta formatter {'tracknumber': 3, 'artist': 'Avril Lavigne', 'albumartist': None, 'composer': None, 'title': 'Sk8er Boi', 'albumcomposer': None}
DEBUG:streamrip:Formatter keys: <filter object at 0x7fd9598410d0>
DEBUG:streamrip:Formatted path: ~/Desktop/Automatically Add to Music.localized/03. Avril Lavigne - Sk8er Boi.flac
DEBUG:streamrip:Downloading cover from https://resources.tidal.com/images/88858072/3555/4190/90cd/073dff3ff6a8/640x640.jpg
Cover |█████████████████████████████████████████████████| 00:00 left at 852kB/s 
DEBUG:streamrip:{'mimeType': 'audio/flac', 'codecs': 'mqa', 'encryptionType': 'NONE', 'urls': ['http://sp-pr-cf.audio.tidal.com/mediatracks/CAEaKRInMDQ5MzBjMzE5MzgzMzUzNGJhNjg1NzlmN2Y2Mjg2NTFfNjAubXA0/0.flac?Expires=1636830354&Signature=GSoI4eXKgMvY7SQKN7jUP~klQEvS8MMUHKsyEiKW1Bn1i6b8AVPfdniKNufa2hPbCMsEhGm9QRjoMMvMzpv6inT6mP8ejCqB2ZCO2YOwzbqKORnWRBv77z5R8n~cTDmm-J5PfJSfyTIvFjU6tyz9YKTtu0IxMyD4yS4NVRkE31QtwDaO~3ihurlwrj~Po8K2SlwNBRTITZjMX3UXddZoHolOTvDY37FXZCoUaBz19~W2UEKAKkKpzfQeYY0-Va9lHj-C2qMKS3BW-wMeJdO009V1WG59uQlLzge5eMBWicWXucxQFEtW86w-uJd1zCMtJpvFyAH0hKUfhzefKO8NJQ__&Key-Pair-Id=APKAIZ3WPBE4R6SP555A']}
DEBUG:streamrip:Downloadable URL found: http://sp-pr-cf.audio.tidal.com/mediatracks/CAEaKRInMDQ5MzBjMzE5MzgzMzUzNGJhNjg1NzlmN2Y2Mjg2NTFfNjAubXA0/0.flac?Expires=1636830354&Signature=GSoI4eXKgMvY7SQKN7jUP~klQEvS8MMUHKsyEiKW1Bn1i6b8AVPfdniKNufa2hPbCMsEhGm9QRjoMMvMzpv6inT6mP8ejCqB2ZCO2YOwzbqKORnWRBv77z5R8n~cTDmm-J5PfJSfyTIvFjU6tyz9YKTtu0IxMyD4yS4NVRkE31QtwDaO~3ihurlwrj~Po8K2SlwNBRTITZjMX3UXddZoHolOTvDY37FXZCoUaBz19~W2UEKAKkKpzfQeYY0-Va9lHj-C2qMKS3BW-wMeJdO009V1WG59uQlLzge5eMBWicWXucxQFEtW86w-uJd1zCMtJpvFyAH0hKUfhzefKO8NJQ__&Key-Pair-Id=APKAIZ3WPBE4R6SP555A
Track 03 |█████████████████████████████████████████████| 00:00 left at 8.98MB/s 
DEBUG:streamrip:Downloaded: /var/folders/_4/fjc74xcx1_j4_ql5ms5ztxs80000gn/T/-588701547831286019_3.tmp -> ~/Desktop/Automatically Add to Music.localized/03. Avril Lavigne - Sk8er Boi.flac
DEBUG:streamrip:Executing INSERT INTO downloads (id) VALUES (?)
DEBUG:streamrip:Items to add: ('33713333',)
DEBUG:streamrip:Tagging file with FLAC container
DEBUG:streamrip:Excluded tags: set()
DEBUG:streamrip:attr: title
DEBUG:streamrip:Adding tag TITLE: Sk8er Boi
DEBUG:streamrip:Setting TITLE tag to Sk8er Boi
DEBUG:streamrip:attr: artist
DEBUG:streamrip:Adding tag ARTIST: Avril Lavigne
DEBUG:streamrip:Setting ARTIST tag to Avril Lavigne
DEBUG:streamrip:attr: album
DEBUG:streamrip:Adding tag ALBUM: Let Go
DEBUG:streamrip:Setting ALBUM tag to Let Go
DEBUG:streamrip:attr: albumartist
DEBUG:streamrip:attr: composer
DEBUG:streamrip:attr: year
DEBUG:streamrip:attr: comment
DEBUG:streamrip:attr: description
DEBUG:streamrip:attr: purchase_date
DEBUG:streamrip:attr: grouping
DEBUG:streamrip:attr: genre
DEBUG:streamrip:attr: lyrics
DEBUG:streamrip:attr: encoder
DEBUG:streamrip:attr: copyright
DEBUG:streamrip:attr: compilation
DEBUG:streamrip:attr: cover
DEBUG:streamrip:attr: tracknumber
DEBUG:streamrip:Adding tag TRACKNUMBER: 03
DEBUG:streamrip:Setting TRACKNUMBER tag to 03
DEBUG:streamrip:attr: discnumber
DEBUG:streamrip:Adding tag DISCNUMBER: 01
DEBUG:streamrip:Setting DISCNUMBER tag to 01
DEBUG:streamrip:attr: tracktotal
DEBUG:streamrip:Adding tag TRACKTOTAL: 01
DEBUG:streamrip:Setting TRACKTOTAL tag to 01
DEBUG:streamrip:attr: disctotal
DEBUG:streamrip:Adding tag DISCTOTAL: 01
DEBUG:streamrip:Setting DISCTOTAL tag to 01
DEBUG:streamrip:attr: date
DEBUG:streamrip:{'self': <streamrip.converter.ALAC object at 0x7fd9598410d0>, 'filename': '/var/folders/_4/fjc74xcx1_j4_ql5ms5ztxs80000gn/T/-588701547831286019_3.tmp', 'ffmpeg_arg': None, 'sampling_rate': 48000, 'bit_depth': None, 'copy_art': True, 'remove_source': True, 'show_progress': False}
DEBUG:streamrip:No arguments provided. Codec defaults will be used
DEBUG:streamrip:FFmpeg codec extra argument: 
DEBUG:streamrip:['ffmpeg', '-i', '/var/folders/_4/fjc74xcx1_j4_ql5ms5ztxs80000gn/T/-588701547831286019_3.tmp', '-c:a', 'alac', '-c:v', 'copy', '-af', 'aformat=sample_rates=48000|44100', '-y', '/var/folders/_4/fjc74xcx1_j4_ql5ms5ztxs80000gn/T/-588701547831286019_3.m4a']
DEBUG:streamrip:Generated conversion command: ['ffmpeg', '-i', '/var/folders/_4/fjc74xcx1_j4_ql5ms5ztxs80000gn/T/-588701547831286019_3.tmp', '-c:a', 'alac', '-c:v', 'copy', '-af', 'aformat=sample_rates=48000|44100', '-y', '/var/folders/_4/fjc74xcx1_j4_ql5ms5ztxs80000gn/T/-588701547831286019_3.m4a']

  Stack trace:

  11  /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/cleo/application.py:314 in run
       312│ 
       313│             try:
     → 314│                 exit_code = self._run(io)
       315│             except Exception as e:
       316│                 if not self._catch_exceptions:

  10  /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/rip/cli.py:604 in _run
       602│             logger.addHandler(fh)
       603│ 
     → 604│         super()._run(io)
       605│ 
       606│     def create_io(self, input=None, output=None, error_output=None):

   9  /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/cleo/application.py:409 in _run
       407│                 io.set_input(ArgvInput(argv))
       408│ 
     → 409│         exit_code = self._run_command(command, io)
       410│         self._running_command = None
       411│ 

   8  /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/cleo/application.py:416 in _run_command
       414│     def _run_command(self, command: Command, io: IO) -> int:
       415│         if self._event_dispatcher is None:
     → 416│             return command.run(io)
       417│ 
       418│         # Bind before the console.command event,

   7  /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/cleo/commands/base_command.py:118 in run
       116│         io.input.validate()
       117│ 
     → 118│         status_code = self.execute(io)
       119│ 
       120│         if status_code is None:

   6  /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/cleo/commands/command.py:85 in execute
        83│ 
        84│         try:
     →  85│             return self.handle()
        86│         except KeyboardInterrupt:
        87│             return 1

   5  /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/rip/cli.py:87 in handle
        85│ 
        86│         if len(core) > 0:
     →  87│             core.download()
        88│         elif not urls and path is None:
        89│             self.line("Must pass arguments. See rip url -h.")

   4  /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/rip/core.py:340 in download
       338│                 item.tag(exclude_tags=arguments["exclude_tags"])
       339│                 if arguments["conversion"]["enabled"]:
     → 340│                     item.convert(**arguments["conversion"])
       341│ 
       342│     def scrape(self, featured_list: str, max_items: int = 500):

   3  /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/streamrip/media.py:741 in convert
        739│             remove_source=kwargs.get("remove_source", True),
        740│         )
     →  741│         engine.convert()
        742│         self.path = engine.final_fn
        743│         self.final_path = self.final_path.replace(

   2  /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/streamrip/converter.py:84 in convert
        82│         logger.debug("Generated conversion command: %s", self.command)
        83│ 
     →  84│         process = subprocess.Popen(self.command)
        85│         process.wait()
        86│         if os.path.isfile(self.tempfile):

   1  /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/subprocess.py:951 in __init__
        949│                             encoding=encoding, errors=errors)
        950│ 
     →  951│             self._execute_child(args, executable, preexec_fn, close_fds,
        952│                                 pass_fds, cwd, env,
        953│                                 startupinfo, creationflags, shell,

  FileNotFoundError

  [Errno 2] No such file or directory: 'ffmpeg'

  at /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/subprocess.py:1821 in _execute_child
      1817│                     else:
      1818│                         err_filename = orig_executable
      1819│                     if errno_num != 0:
      1820│                         err_msg = os.strerror(errno_num)
    → 1821│                     raise child_exception_type(errno_num, err_msg, err_filename)
      1822│                 raise child_exception_type(err_msg)
      1823│ 
      1824│ 
      1825│         def _handle_exitstatus(self, sts,

Config File

Opening /Users/user1/Library/Application Support/streamrip/config.toml in default application

Operating System

macOS Catalina 10.15.7

streamrip version

1.7

Screenshots and recordings

No response

Additional context

No response

nathom commented 2 years ago

You need to install ffmpeg using Homebrew.