本文为博主原创,未经许可严禁转载。
本文链接:https://blog.csdn.net/zyooooxie/article/details/111307733
这篇分享是我在csdn的第100篇原创了,真的是时光飞逝啊;那 这次分享来说些下载B站视频相关的;
这是我写的 代码改变生活的 category,有兴趣可以看看;
个人博客:https://blog.csdn.net/zyooooxie
需求背景
我手机装了bilibili的app,有时候因为喜欢、学习的缘故,会缓存些视频;之前缓存格式为blv,我将其保存到电脑里,都是直接改blv为mp4【改文件格式】;现在发现 有些是两个:audio.m4s和video.m4s,我想保存 得先合并; 感觉好麻烦啊!!!
此外 想弄清楚哪个是哪个,重命名 也很麻烦!!!
so 我想找个途径,只需要输入视频url 或者某up的空间url,就可触发下载,保存;
那要怎么做呢?
找到了知乎,看到 有人推荐you-get;
you-get
看了些教程,感觉 实操不难。
you-get下载视频
【因为you-get 轮子都已经造好了,我就对着我自己的需求 做些简单的扩展】
细致说下 我的要求:
- 可下载单个视频,也可以多个视频批量下载,也可以下载某up的全部视频;
- 能够指定下载路径;
- 只下视频,不下弹幕;
- 尽可能下载高清的视频;
(我不是大会员,最高只能是1080p-80;我了解到的qn值:4k-120 \ 1080p60-116 \1080p+为112 \ 1080p-80 \ 720p60-74 \ 720p-64 \ 480p-32 \ 360p-16)
def down_bilibili_videos(self, url, multipart=None, down_path=r'F:\bili'):
"""
不用大会员cookies 下载视频
:param url:地址 (此处为不带p=x的)
:param multipart:a multipart video
:param down_path: 保存路径
:return:
"""
if multipart is None:
cmd = """you-get --format=dash-flv {} -o {} --no-caption""".format(url, down_path)
else:
os.chdir(down_path)
new_dir = url.split('/')[-1]
if not os.path.exists(new_dir):
os.mkdir(new_dir)
down_path = os.path.join(down_path, new_dir)
cmd = """you-get --format=dash-flv --playlist {} -o {} --no-caption""".format(url, down_path)
print(cmd)
os.system(cmd)
【请留意:这是第一版,实际博主使用代码 在第二篇分享 , 第三篇分享】
说下我用的options:
- 高清画质:我选了–format=dash-flv,是因为 --format=dash-flv 和 --format=flv 我看都是1080p,但第二个 我家里电脑下载速度慢;
- –no-caption 不下载其他文件(字幕,歌词,弹幕。。。);
- -o 指定保存路径
- –playlist 是download all parts
获取某up主的所有视频BV号
上图 这个就是我的账号-未登录的时候; up空间
查看投稿,
查接口请求,
所以,可以写代码了;【因为我没投过稿,所以响应是没有bvid信息 ;{“code”:0,“message”:“0”,“ttl”:1,“data”:{“list”:{“tlist”:null,“vlist”:[]},“page”:{“pn”:1,“ps”:30,“count”:0}}},可以拿其他up主来试下】
def get_UP_videos(self, up_mid, pagesize=25):
url = 'https://api.bilibili.com/x/space/arc/search?mid={}&pn=1&ps={}'.format(up_mid, pagesize)
res = requests.get(url)
bvid_list = res.json()['data']['list']['vlist']
bvid = [bv['bvid'] for bv in bvid_list]
count = res.json()['data']['page']['count']
chu = math.ceil(count / pagesize)
if chu != 1:
for i in range(2, chu):
new_url = 'https://api.bilibili.com/x/space/arc/search?mid={}&pn={}&ps={}'.format(up_mid, i, pagesize)
new_res = requests.get(new_url)
new_bvid = [bv['bvid'] for bv in new_res.json()['data']['list']['vlist']]
bvid.extend(new_bvid)
print(bvid)
return bvid
既然已经知道了BV号,写个循环,直接把所有视频下载下来了。
【下载的视频 仅做学习收藏之用,请尊重原创】
后面还一篇是 you-get下载bilibili视频时 遇到的某些意外情况和解决方式
交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)