Soundcloud Music Downloader
Go to file
Arsenii es3n1n 8974a997fc
Track downloading refactoring, reducing amount of I/O operations, #493 (#494)
* feat: download to stdout if name is `-` #493

still a wip though, somehow i need to add metadata to these streams oh well...

* refactor: rework reencoding, metadata adding

* chore: ignore .idea

* chore: add dev requirements

* test: suppress encoding warnings

* feat: add reworked ffmpeg progress bar

* perf: use memoryview for streaming responses

* fix: fix large tracks downloading

* refactor: migrate threads to asyncio (wip)

* Revert "refactor: migrate threads to asyncio (wip)"

This reverts commit d6e247ee2f6f8d5c57fac21de20a81dde3b2e395.

* refactor: get rid of the queue

* refactor: inline stderr thread, adjust buf sizes

* perf: don't reencode original wavs/hls streams

* refactor: mark threads as daemonic

* refactor: remove unused imports

* fix: reencode aacs with adts

* refactor(metadata): output a bit more detailed error message

* refactor: properly reencode m4a

* Performance improvements

* Bump version

* Update README

---------

Co-authored-by: 7x11x13 <x7x11x13@gmail.com>
2024-07-08 12:47:41 -04:00
.github/workflows Fix client_id validation 2024-03-19 18:05:45 -04:00
scdl Track downloading refactoring, reducing amount of I/O operations, #493 (#494) 2024-07-08 12:47:41 -04:00
tests Track downloading refactoring, reducing amount of I/O operations, #493 (#494) 2024-07-08 12:47:41 -04:00
.gitignore Track downloading refactoring, reducing amount of I/O operations, #493 (#494) 2024-07-08 12:47:41 -04:00
AUTHORS Use 7x11x13 fork 2021-11-17 18:17:37 -05:00
LICENSE Initial commit 2014-10-02 21:37:43 +02:00
MANIFEST.in Include default config file 2021-11-18 00:58:12 -05:00
README.md Track downloading refactoring, reducing amount of I/O operations, #493 (#494) 2024-07-08 12:47:41 -04:00
requirements.dev.txt Track downloading refactoring, reducing amount of I/O operations, #493 (#494) 2024-07-08 12:47:41 -04:00
setup.py Use maintained dependencies 2024-06-26 12:28:33 -04:00

Soundcloud Music Downloader

Description

This script is able to download music from SoundCloud and set id3tag to the downloaded music. Compatible with Windows, OS X, Linux.

System requirements

  • python3
  • ffmpeg

Installation Instructions

https://github.com/flyingrub/scdl/wiki/Installation-Instruction

Configuration

There is a configuration file left in ~/.config/scdl/scdl.cfg

Examples:

# Download track & repost of the user QUANTA
scdl -l https://soundcloud.com/quanta-uk -a

# Download likes of the user Blastoyz
scdl -l https://soundcloud.com/kobiblastoyz -f

# Download one track
scdl -l https://soundcloud.com/jumpstreetpsy/low-extender

# Download one playlist
scdl -l https://soundcloud.com/pandadub/sets/the-lost-ship

# Download only new tracks from a playlist
scdl -l https://soundcloud.com/pandadub/sets/the-lost-ship --download-archive archive.txt -c

# Sync playlist
scdl -l https://soundcloud.com/pandadub/sets/the-lost-ship --sync archive.txt

# Download your likes (with authentification token)
scdl me -f

Options:

-h --help                       Show this screen
--version                       Show version
-l [url]                        URL can be track/playlist/user
-n [maxtracks]                  Download the n last tracks of a playlist according to the creation date
-a                              Download all tracks of user (including reposts)
-t                              Download all uploads of a user (no reposts)
-f                              Download all favorites (likes) of a user
-C                              Download all tracks commented on by a user
-p                              Download all playlists of a user
-r                              Download all reposts of user
-c                              Continue if a downloaded file already exists
--force-metadata                This will set metadata on already downloaded track
-o [offset]                     Start downloading a playlist from the [offset]th track (starting with 1)
--addtimestamp                  Add track creation timestamp to filename,
                                which allows for chronological sorting
                                (Deprecated. Use --name-format instead.)
--addtofile                     Add artist to filename if missing
--debug                         Set log level to DEBUG
--error                         Set log level to ERROR
--download-archive [file]       Keep track of track IDs in an archive file,
                                and skip already-downloaded files
--extract-artist                Set artist tag from title instead of username
--hide-progress                 Hide the wget progress bar
--hidewarnings                  Hide Warnings. (use with precaution)
--max-size [max-size]           Skip tracks larger than size (k/m/g)
--min-size [min-size]           Skip tracks smaller than size (k/m/g)
--no-playlist-folder            Download playlist tracks into main directory,
                                instead of making a playlist subfolder
--onlymp3                       Download only mp3 files
--path [path]                   Use a custom path for downloaded files
--remove                        Remove any files not downloaded from execution
--sync [file]                   Compares an archive file to a playlist and downloads/removes any changed tracks
--flac                          Convert original files to .flac. Only works if the original file is lossless quality
--no-album-tag                  On some player track get the same cover art if from the same album, this prevent it
--original-art                  Download original cover art, not just 500x500 JPEG
--original-name                 Do not change name of original file downloads
--original-metadata             Do not change metadata of original file downloads
--no-original                   Do not download original file; only mp3, m4a, or opus
--only-original                 Only download songs with original file available
--name-format [format]          Specify the downloaded file name format. Use "-" to download to stdout
--playlist-name-format [format] Specify the downloaded file name format, if it is being downloaded as part of a playlist
--client-id [id]                Specify the client_id to use
--auth-token [token]            Specify the auth token to use
--overwrite                     Overwrite file if it already exists
--strict-playlist               Abort playlist downloading if one track fails to download
--no-playlist                   Skip downloading playlists
--opus                          Prefer downloading opus streams over mp3 streams

Features

  • Automatically detect the type of link provided
  • Download all songs from a user
  • Download all songs and reposts from a user
  • Download all songs from one playlist
  • Download all songs from all playlists from a user
  • Download all songs from a user's favorites
  • Download only new tracks from a list (playlist, favorites, etc.)
  • Sync Playlist
  • Set the tags with mutagen (Title / Artist / Album / Artwork)
  • Create playlist files when downloading a playlist

License

GPL v2, original author flyingrub