Python改变生活 | 批量下载B站音频,并导入音乐软件
大家好,我是小五🧐
这是Python改变生活系列的第6篇,本系列文章主要介绍我平时在生活中,如何使用Python来提升效率,节省时间。
如果喜欢我的文章,那就点个赞支持一下吧。
今天讲解如何用Python,下载B站上的音频,并导入音乐软件,实现自定义曲库。
前情提要
为什么要这么做呢?
我经常逛B站,除了鬼畜区,音乐区也有很多up主非常喜欢。
比如飞鸟乐团。
做最好的多语种乐团 让全世界听懂中文歌!
很喜欢他们歌曲,但是这些歌曲并不会上架到各大音乐app上。
于是我就有个想法,把他们的所有歌曲音频下载下来,并放到音乐播放器中循环播放。
市面上常见的音乐播放器,大部分又都有音乐云盘功能。这为我的想法提供了进一步的可能。
整体可分为4步:
爬取视频bvid 下载视频 转换音频 导入音乐播放器
爬取视频
众所周知,B站视频的url是由以下两部分构成。
https://www.bilibili.com/video/某个bvid
其中bvid也就是常说的bv号。(去年3月份,B站的AV号就全面升级至BV号了)
如果说想要爬取B站信息,我第一时间先想到的就是——bilibili-api
。
https://pypi.org/project/bilibili-api/
但是等我去使用时就发现需要重新安装,再之后就怎么也安装不上。
无奈,我还是request吧。
并不复杂,F12即可轻松找到数据接口。
短短几行代码,就可以将该up主的前两页(共60个视频),所对应的bv号
爬取到列表中。
bvids = []
for i in range(1, 3):
url = 'https://api.bilibili.com/x/space/arc/search?mid=27201651&ps=30&tid=0&pn=' + \
str(i) + '&keyword=&order=pubdate&jsonp=jsonp'
html = requests.get(url).content
data = json.loads(html.decode('utf-8'))
for j in range(30): # 一页30个
bvids.append(data['data']['list']['vlist'][j]['bvid'])
这样我们后面将爬取到的bv号与URL拼接起来。
就可以进行后续的爬取工作了。
'https://www.bilibili.com/video/' + str(bv号)
下载视频
开始第2步,下载视频。
与bilibili-api类似,提到下载视频,脑海里第一时间想到的就是这个轮子——you_get
。
一行命令行程序,提供便利的方式来下载网络上的媒体信息。
具体用法,可以查看我们之前的文章:一行代码,爬尽全网资源?
查询文档。
发现只能下载B站的视频,而不能下载音频。
这样就只能选择先下载视频,后续再加一步,将视频转换成音频。
由于都是在命令行中使用,所以在Python 上调用的话,需要用到 sys 的 sys.argv
。
具体用法:
def download_flv(url):
directory = r'D:\test'
sys.argv = ['you-get', '-o', directory, '--format=flv', url]
you_get.main()
for i in bvids:
url = 'https://www.bilibili.com/video/' + str(i)
download_flv(url)
执行后,具体效果如下图所示。
这样在D:\test
目录下,就有了60个flv格式的视频文件。
转换音频
在这一步,我们需要把视频转换成音频文件。
首先要先给大家介绍一个新模块。
MoviePy
是一个用于视频编辑的python模块,你可以用它实现一些基本的操作(比如视频剪辑,视频拼接,插入标题),还可以实现视频合成,还有视频处理,抑或用它加入一些自定义的高级的特效。
通过对比,该模块能够生成的音频文件和,网易云音乐支持导入的音频文件。只有wav和mp3两种格式是最合适的。
其中WAVE是录音时用的标准的WINDOWS文件格式,文件的扩展名为“wav”,数据本身的格式为PCM或压缩型,属于无损音乐格式的一种。所以WAV文件相对于MP3文件比较大。
既然云盘空间很大,那就无损走起。
from moviepy.editor import *
import os
mp4names = os.listdir(r'D:\test')
for i in mp4names:
if os.path.splitext(i)[-1]=='.flv':
video = VideoFileClip(i)
audio = video.audio
audio.write_audiofile(os.path.splitext(i)[0]+ '.mp3')
os
模块遍历文件,moviepy
负责转换视频/音频格式。
执行后,具体效果如下图所示。
这样在D:\test
目录下,就又多了60个wav格式的音频文件。
播放效果
这一步,我们将音频文件导入音乐播放器并查看效果。
导入后需要进行转码,耐心等待一会儿。
再将这些歌曲,放入到你自己的各种歌单中。
播放音乐🎵
静静享受,劳动的果实🎶
如果想看更多Python改变生活的真实问题案例,就给本文右下角点个赞,支持一下吧👍
大家如果本文涉及的代码感兴趣,可以扫描下面二维码👇在【快学Python】后台回复“音频”即可获取对应代码文件。