User Tools

Site Tools


linux:spotify-ripper

This is an old revision of the document!


spotify-ripper

spotify-ripper ist ein Skript für die Kommandozeile, das unter Verwendung von pyspotify Lieder von Spotify anhand ihrer Spotify URIs herunterlädt und in Audiodateien mitsamt ID3-Tags sowie Cover abspeichert. Dabei unterstützt es diverse Audio-Codecs wie MP3, FLAC, Ogg Vorbis, Opus, AAC und mehr.

Für die Kommunikation mit Spotify selbst wird auf libspotify zurückgegriffen, welche allerdings seit Mai 2015 nicht mehr offiziell von Spotify unterstützt und aktiv weiterentwickelt wird. Da libspotify seit 2009 in vielen Open Source-Projekten und kommerziellen Produkten zum Einsatz kam sowie selbst in Autos Verwendung fand, ist es nicht unwahrscheinlich, dass aufgrund der großen Verbreitung libspotify noch eine Weile funktionieren wird.

Installation

Für die Verwendung des Skripts selbst benötigen wir einen App-Key für Entwickler, wozu ein Premium-Account nötig ist. Dazu muss man sich mit seinem Account auf https://devaccount.spotify.com/my-account/keys/ einloggen und einen Key beantragen. Für Name und Beschreibung der App kann irgendwas eingetragen werden, der erste Key wird automatisiert ausgestellt. Von dort können wir dann den spotify_appkey.key herunterladen (Binary auswählen), der für die Kommunikation über libspotify benötigt wird. Die Key-Datei speichern wir am besten im Verzeichnis ~/.spotify-ripper ab, welches standardmäßig für die Konfiguration und andere Daten verwendet wird. Alternativ kann auch später die -k, bzw. --key Option für einen individuellen Pfad zur Key-Datei verwendet werden.

Abhängigkeiten des Pakets sind neben Python sowie den Python-Modulen, die mittels pip automatisch mitinstalliert werden, der Encoder für MP3 lame sowie optional für andere Codecs zum Beispiel:

  • vorbis-tools für Ogg Vorbis
  • opus-tools für Opus
  • flac für verlustfreies FLAC (nur bedingt empfehlenswert, da Spotify bereits verlustfrei mit maximal 320 kbps streamt)
  • faac für AAC mittels FreeAAC

Für die eigentliche Installation wird zunächst libspotify benötigt. Diese laden wir herunter, entpacken und installieren sie:

$ wget https://developer.spotify.com/download/libspotify/libspotify-12.1.51-Linux-x86_64-release.tar.gz
$ tar xf libspotify-12.1.51-Linux-x86_64-release.tar.gz
$ cd libspotify-12.1.51-Linux-x86_64-release/
$ sudo make install

Damit Python die Bibliothek später findet, fügen wir deren Pfad noch in der .bashrc ein:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

Dies ist notwendig, da libspotify unter /usr/local/lib installiert wird. Dieser Pfad befindet sich in sys.path, allerdings sucht Python dort nur nach Python-Modulen selbst. Dynamisch gelinkte Bibliotheken wie libspotify werden allerdings nur in Verzeichnissen in LD_LIBRARY_PATH gesucht.

spotify-ripper selbst installieren wir mit pip:

$ sudo pip install spotify-ripper

Verwendung

Um eine einzelne Datei zu laden, wird die URI zu dem Lied benötigt

spotify-ripper -u <user> spotify:track:52xaypL0Kjzk0ngwv3oBPR

wobei <user> durch den eigenen Benutzernamen ersetzt werden muss.

Für eine komplette Playlist wird entsprechend die Spotif URI zu der Playlist benötigt:

spotify-ripper -l -f "{playlist_owner}/{playlist_name}/{idx} {artist} - {track_name}.{ext}" --opus -q 128 spotify:user:username:playlist:4vkGNcsS8lRXj4q945NIA4

In diesem Fall wird mit -l der zuletzt eingeloggte Benutzer verwendet, somit ist auch keine erneute Passworteingabe mehr nötig. Ein eventuell definiertes Format in der config.ini wird durch die Angabe von -f bzw. --format überschrieben. In diesem Fall wird zum Kodieren Opus mit einer Bitrate von 128 kbps verwendet. Für die Verwendung auf z. B. Smartphones oder anderer weniger leistungsfähiger Audio-Hardware reicht bei Opus auch durchaus eine Datenrate von 96 kbps um Platz zu sparen.

Es können auch mehrere Spotify URIs in einer Datei gespeichert werden, die dann von spotify-ripper abgearbeitet wird:

spotify-ripper -u <user> list_of_uris.txt

Zudem ist es möglich, beispielsweise die Charts von Spotify zu rippen:

spotify-ripper -l spotify:charts:regional:global:weekly:latest

Weitere Möglichkeiten zur Verwendung können auf der GitHub-Seite des Projekts eingesehen werden.

Konfiguration

Häufig verwendete Einstellungen können im Verzeichnis ~/.spotify-ripper in der Datei config.ini hinterlegt werden. Exemplarisch dazu die folgende Konfigurationsdatei:

~/.spotify-ripper/config.ini
[main]
format = {album_artist}/[{year}] {album}/{smart_track_num} {artist} - {track_name}.{ext}
last = True
large-cover-art = True
normalize = True
playlist-m3u = True
remove-offline-cache = True

Einstellungen müssen nach dem [main]-Block folgen. Wird später mit -f oder --format ein anderes Format angegeben, überschreibt dies die Werte der Konfiguration. last verwendet standardmäßig den zuletzt verwendeten Benutzer, wodurch spotify-ripper <Spotify-URI> bereits ausreicht, um einen Download zu starten. Weitere verwendete Optionen sind:

  • Versuchen, größere Cover zu verwenden, sofern möglich
  • Die Lautstärke der einzelnen Lieder zu normalisieren
  • Für Playlists oder Alben automatisch m3u-Playlisten zu erstellen
  • Und nach dem Beenden von spotify-ripper den Offline-Cache zu löschen, um Speicherplatz zu sparen

Upgrade

Um zu einer neuen Version zu upgraden, verwenden wir wieder pip:

$ sudo pip install --upgrade spotify-ripper
linux/spotify-ripper.1472993990.txt.gz · Last modified: by sascha