如何借助Spotify下载音乐

我们知道,网上免费下载音乐现在是越来越难了。大部分的国内音乐厂商,都对音乐文件进行了加密。而且版权问题一直是个大头,最坑爹的是动不动只有VIP才能收听。有没有一款软件,即解决了版权问题,又能够真正免费使用呢?答案是有的。国外的Spotify这款音乐软件就是我目前在用的,现在Spotify网站已经被墙了(不知道为什么要墙一个音乐网站),要想收听音乐,首先得学会科学上网。

比如我之前在听的,请回答1988的EP。QQ音乐上显示只有VIP才能收听,但是Spotify上随便一找,就能够找到,而且随便听。Spotify不光解决了版权的问题,音乐类型多样化,还有个更神奇的功能。借助网友开源的spotify-downloader这款软件,简写为spotdl,可以轻松实现通过Spotify来下载音乐。这样我们就不用每次联网翻墙去收听音乐了,在断网的情况下,也能收听。

Spotdl软件原理

spotdl这款软件的原理,是通过Spotify的歌曲路径,到Youtube上去找对应的歌曲,如果匹配,就能下载下来。歌曲默认格式是m4a,有些设备可能不支持,所以需要通过ffmpeg这款软件进行格式转化,比如转mp3。但是我个人还是更喜欢听m4a的,音质应该更好一点(虽然我也听不出来),而且体积更小。

Spotdl安装

可以到官网的Wiki下面去查找详细的安装方法。因为作者强烈建议使用Python 3来安装(Python 2因为编码问题将被放弃),而我的Mac上只有Python 2,系统又太老了,懒得再装一个,所以我选择了虚拟机的方式。因为之前虚拟机里安装过Win10操作系统,也安装了Python 3的环境,所以直接拿来用。

安装命令很简单

1
pip3 install spotdl

有可能因为网络问题而安装失败,建议是多试几次。或者等网络好点的情况下,再试试。

实在不行的话,可以使用代理来安装。安装完毕后,命令行要启动代理,因为我本地使用的是SOCKS5代理,而Python下使用Socks代理需要安装PySocks这款插件

1
pip3 install PySocks

安装完毕后,在命令行输入代理命令

1
2
set http_proxy=socks5://127.0.0.1:1080
set https_proxy=socks5://127.0.0.1:1080

就能使用Socks代理了(注意,开启代理至关重要,因为从Spotify下载歌曲,首先Spotify需要翻墙,其次访问Youtube的音乐也要翻墙)

如果你使用的是Http代理,不需要安装PySocks插件,只需要在命令行里输入

1
2
set http_proxy=http://127.0.0.1:8087
set https_proxy=http://127.0.0.1:8087

上面的这些代理命令,仅适用于Windows系统,127.0.0.1是你的代理IP,8087或者1080是你的代理端口号,以上只是例子。

如何安装ffmpeg

ffmpeg是一款音乐转码软件,可以将一种格式的音乐,转为其它多种多样格式的音乐,功能很强。如果要结合spotdl这款软件一起使用的话,首先去官网下载ffmpeg。然后将下载好的文件解压,提取里面的所有.exe文件,将其放在C:\Windows\System32\文件夹下即可。spotdl下载程序到时候就能以全局变量的形式,调用ffmpeg软件了。

Spotdl如何下载歌曲

spotdl软件安装完成之后,接下来就是要下载歌曲了,而要下载歌曲前提是通过Spotify这款软件能搜索到你要下载的歌曲。方法有两种,一种是直接Spotify的网页版,还有一种就是专门的Spotify客户端。客户端可能搜索起来更方便一点,网页版就是你不用专门去下载客户端了,节省空间,各有各的好处。

最简单的下载方法,前提是命令行已经开启了代理

1
spotdl --song https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ

上面的歌曲链接可通过网页版或者客户端获取,有一个Copy Song URL Link的选项。默认情况下,歌曲会以m4a形式下载,然后转为mp3格式,然后m4a文件被删除,只留下mp3文件。这都是程序自己做的事情。而如果我不想要mp3格式,只想保留m4a文件该怎么办呢?

办法一,使用-o参数,指定输出格式为m4a

1
spotdl --song https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ -o .m4a

办法二,修改配置文件,Windows平台下配置文件的路径位于C:\Users\<user>\AppData\Local\spotdl\config.yml

打开之后,找到output选项,将其改为m4a即可。但是这么一来,所有的默认下载输出格式都变成了m4a。反正我的需求就是要m4a,不要mp3,所以我改了配置文件。

如果嫌一首首歌下载速度太慢,每次都要去复制歌曲链接,那么还有一种简单的办法。就是使用album或者playlist的URL链接,spotdl程序会自动根据链接来把所有专辑或播放列表里的歌曲链接一次性生成一个.txt的文件。然后你只需要指定程序读取这个.txt文件即可实现自动下载了。

有两种情况,第一种,如果是专辑链接,即album

1
2
spotdl --album https://open.spotify.com/album/499J8bIsEnU7DSrosFDJJg
spotdl --list=<album_name>.txt

第二种,如果是播放列表链接,即playlist

1
2
spotdl --playlist https://open.spotify.com/user/nocopyrightsounds/playlist/7sZbq8QGyMnhKPcLJvCUFD
spotdl --list=<playlist_name>.txt

是专辑还是播放列表,可以通过观察URL里的关键字来区分。如果把两个搞错了,参数填反了,.txt文件就不会生成。

Windows下如何批量将m4a转为mp3

因为我想保留m4a文件,但是有时候,需要将这些m4a文件转化为mp3携带,所以我考虑了之后,决定使用.bat批处理文件来实现,借助ffmepg音频转码

1
2
3
4
5
6
7
8
9
10
11
12
13
@ECHO OFF & color 0A

set DIR="%cd%"
echo DIR=%DIR%

FOR /R %DIR% %%f IN (*.m4a) DO (
echo Converting: %%f
ffmpeg -i "%%f" -codec:a libmp3lame -qscale:a 2 "%%~nf.mp3"
)

echo Finished

PAUSE

上面的/R指的是递归当前文件夹下的所有文件夹,%%f指的是当前文件夹内的当前文件名(包含后缀),而%%~nf指的是当前文件夹内的当前文件名(不包含后缀)。这里使用的是libmp3lame这个mp3编码函数库,指令后的选项-qscale:a可以简写为-q:a,相当于libmp3lame中的-V选项,至于后面的参数2也是和libmp3lame中的参数属于同一个等级,指的是bitrate为范围170Kbps到210Kbps之间的变动,默认参数是4。参数从0到9,数字越大,mp3的品质越差。

总结

总得来说,歌曲还是能下载的。但是有一些BUG,比如有些歌曲未达到100%完成度就生成了m4a文件,导致歌曲的时长变短。这就很痛苦了,而且不是偶尔发生,出现的频率挺高的,尤其是通过.txt列表下载的时候。

我怀疑可能和我的网络环境有关,因为我使用的网络环境不是很稳定。下次,等我在一个稳定快速的网络环境下,我会再好好地测试几回来进行验证。

avatar

chilihotpot

You Are The JavaScript In My HTML