python之you-get 和 bilibili-api库,简单好用的视频下载库,帮你轻松下载B站视频,内置模板代码,新手党福音!!!
本篇文章将为大家介绍两个python的第三方库you-get和bilibili-api,它们可以用来下载和获取B站视频的信息,其中you-get支持下载多种视频网站,包括Bilibili(B站)、优酷、爱奇艺等,使用方法非常简单,我将准备好模板代码,大家可免费领取,直接使用。you-get是一个强大的命令行工具,可以下载多种网站的视频,包括B站。你可以直接在命令行中使用它,也可以在Python脚本
文章目录
前言
本篇文章将为大家介绍两个python的第三方库
you-get 和 bilibili-api
,它们可以用来下载和获取B站视频的信息,其中you-get
支持下载多种视频网站,包括Bilibili(B站)、优酷、爱奇艺等,使用方法非常简单,我将准备好模板代码,大家可免费领取,直接使用。
1、you-get库的使用及介绍
you-get 是一个强大的命令行工具,可以下载多种网站的视频,包括B站。你可以直接在命令行中使用它,也可以在Python脚本中通过 subprocess 模块调用它。
1.1 安装you-get库
命令:
pip install you-get
1.2 调用you-get下载B站视频(模板代码)
方法1:使用os模块调用命令行运行代码
下载命令:
you-get 视频链接
说明:you-get库
本身就是一个命令行工具,我们可以直接在cmd命令窗口中输入命令下载视频,下面我将使用python通过调用os模块来执行命令
# 导入os模块
import os
def download_bilibili_video(url,output_dir):
"""
使用you-get下载B站视频
:param url: 视频的B站链接
:param output_dir: 视频保存的目录
"""
try:
# 使用you-get下载视频,下载命令如下
command = f'you-get -o {output_dir} {url}'
# 参数说明:-o 选项 用于指定视频保存路径,不指定默认保存至当前路径下
# 执行命令
os.system(command)
print(f"视频下载完成,保存在 {output_dir}")
except Exception as e:
print(f"下载视频时出错: {e}")
if __name__ == "__main__":
# 替换为你要下载的B站视频链接
video_url = "https://www.bilibili.com/video/BV1NVBXYbEta/?spm_id_from=333.1007.tianma.24-4-94.click&vd_source=e8e376ccbc5aa4cfd88e6a7917adfd1a"
# 替换为你要保存的路径
output_dir = 'video'
# 调用函数
download_bilibili_video(video_url,output_dir)
执行效果:
说明:
从上面可以看到,you-get在下载视频时会显示视频标题、视频格式、清晰度、视频大小等信息,并显示下载进度,简洁明了,同时还会下载一个xml文件,用于存放视频的弹幕信息
下载内容:
下载完成后,我们可以在保存路径下看到两个文件,一个是视频文件,一个是xml文件,xml文件中存放着视频的弹幕内容
方法2:使用subprocess 模块调用you-get命令,执行效果与方法1相同
# 导入subprocess模块
import subprocess
def download_bilibili_video(url,output_dir):
"""
使用you-get下载B站视频
:param url: 视频的B站链接
:param output_dir: 视频保存的目录
"""
try:
# 使用 subprocess 调用 you-get命令 下载视频
subprocess.run(['you-get','-o',output_dir,video_url]) # 将命令以空格分隔为一个列表
print(f"视频下载完成,保存在 {output_dir}")
except Exception as e:
print(f"下载视频时出错: {e}")
if __name__ == "__main__":
# 替换为你要下载的B站视频链接
video_url = "https://www.bilibili.com/video/BV1NVBXYbEta/?spm_id_from=333.1007.tianma.24-4-94.click&vd_source=e8e376ccbc5aa4cfd88e6a7917adfd1a"
# 替换为你要保存的路径
output_dir = 'video'
# 调用函数
download_bilibili_video(video_url,output_dir)
1.2 指定视频下载的清晰度
在使用 you-get 下载 B站视频时,可以通过 --format 参数指定下载的清晰度。you-get 会自动列出视频可用的清晰度选项,你可以从中选择适合的清晰度进行下载。使用步骤如下:
步骤1:在下载视频之前,可以先查看视频支持的清晰度。使用以下命令:
命令:
you-get -i 视频链接
示例:
# 导入os模块
import os
# 替换成要下载的视频链接
video_url = 'https://www.bilibili.com/video/BV1NVBXYbEta/?spm_id_from=333.1007.tianma.24-4-94.click&vd_source=e8e376ccbc5aa4cfd88e6a7917adfd1a'
# 查看视频可下载的清晰度
os.system(f'you-get -i {video_url}')
输出结果:
site: Bilibili
title: “我 自 己 看 的 时 候 也 没 绷 住!”
streams: # Available quality and codecs
[ DASH ] ____________________________________
- format: dash-flv480-AVC
container: mp4
quality: 清晰 480P avc1.64001F
size: 12.7 MiB (13279292 bytes)
# download-with: you-get --format=dash-flv480-AVC [URL]
- format: dash-flv480-AV1
container: mp4
quality: 清晰 480P av01.0.00M.10.0.110.01.01.01.0
size: 8.7 MiB (9078850 bytes)
# download-with: you-get --format=dash-flv480-AV1 [URL]
- format: dash-flv480-HEVC
container: mp4
quality: 清晰 480P hev1.1.6.L120.90
size: 8.2 MiB (8633337 bytes)
# download-with: you-get --format=dash-flv480-HEVC [URL]
- format: dash-flv360-AVC
container: mp4
quality: 流畅 360P avc1.64001E
size: 6.6 MiB (6945286 bytes)
# download-with: you-get --format=dash-flv360-AVC [URL]
- format: dash-flv360-AV1
container: mp4
quality: 流畅 360P av01.0.00M.10.0.110.01.01.01.0
size: 4.6 MiB (4840628 bytes)
# download-with: you-get --format=dash-flv360-AV1 [URL]
- format: dash-flv360-HEVC
container: mp4
quality: 流畅 360P hev1.1.6.L120.90
size: 4.2 MiB (4455357 bytes)
# download-with: you-get --format=dash-flv360-HEVC [URL]
说明:
从上面的结果可以看到,执行命令后,会显示出视频可以下载的不同清晰度以及不同的编码格式,我们需要的是其中- format
参数对应的值,该值用于指定视频下载的清晰度。
步骤2:使用 --format 参数指定清晰度。例如,下载 dash-flv480-AVC
格式的 480P 视频:
命令:
you-get --format=清晰度格式 视频链接
示例:
import os
def download_bilibili_video(url, format=None, output_dir='.'):
"""
使用you-get下载B站视频,并指定清晰度
:param url: 视频的B站链接
:param format: 清晰度对应的format参数(如flv、dash等)
:param output_dir: 视频保存的目录,默认为当前目录
"""
try:
# 构建you-get命令
command = f'you-get -o {output_dir}'
if format:
command += f' --format={format}'
command += f' {url}'
# 执行命令
os.system(command)
print(f"视频下载完成,保存在 {output_dir}")
except Exception as e:
print(f"下载视频时出错: {e}")
if __name__ == "__main__":
# 替换为你要下载的B站视频链接
video_url = "https://www.bilibili.com/video/BV1NVBXYbEta/?spm_id_from=333.1007.tianma.24-4-94.click&vd_source=e8e376ccbc5aa4cfd88e6a7917adfd1a"
# 指定清晰度,(如flv、dash等)
video_format = "dash-flv480-AVC"
# 下载视频
download_bilibili_video(video_url, format=video_format)
注意事项:
-
清晰度可用性:并非所有视频都支持所有清晰度,具体取决于视频的上传格式和B站的转码情况。
-
默认清晰度:如果不指定 --format 参数,you-get 会默认下载最高清晰度的视频。
-
清晰度参数:–format 参数的值(如 flv、dash 等)需要通过 you-get -i 命令查看。
2、bilibili-api库的使用及介绍
bilibili-api是一个功能丰富的库,可以获取B站视频的详细信息,如标题、作者、播放量、弹幕、评论数等。
示例:
from bilibili_api import video
import asyncio
async def get_video_info(bvid):
"""
获取B站视频信息
:param bvid: 视频的BV号
"""
try:
# 创建视频对象
v = video.Video(bvid=bvid)
# 获取视频信息,返回的是一个字典对象,里面包含着视频的各种信息
info = await v.get_info()
print(info)
# 通过字典取值的方式,打印出我们想要的信息,这里我只打印了部分信息
print("视频信息:")
print(f"标题: {info['title']}")
print(f"作者: {info['owner']['name']}")
print(f"播放量: {info['stat']['view']}")
print(f"弹幕数: {info['stat']['danmaku']}")
print(f"发布时间: {info['pubdate']}") # 这里返回的是一个时间戳,需要手动处理成日期格式
except Exception as e:
print(f"获取视频信息时出错: {e}")
if __name__ == "__main__":
# 替换为你要查询的B站视频BV号
bvid = "BV1NVBXYbEta"
# 运行异步函数
asyncio.get_event_loop().run_until_complete(get_video_info(bvid))
输出结果:
{'bvid': 'BV1BcC5YDEoW', 'aid': 113702531503202, 'videos': 1, 'tid': 24, 'tid_v2': 2041, 'tname': 'MAD·AMV', 'tname_v2': '动漫剪辑', 'copyright': 1, 'pic': 'http://i2.hdslb.com/bfs/archive/482d71126abaa49b53e1e63eb70fff3468d879ec.jpg', 'title': '“圣诞快乐,桐人!”', 'pubdate': 1734963242, 'ctime': 1734963042, 'desc': '-', 'desc_v2': [{'raw_text': '-', 'type': 1, 'biz_id': 0}], 'state': 0, 'duration': 168, 'rights': {'bp': 0, 'elec': 0, 'download': 1, 'movie': 0, 'pay': 0, 'hd5': 0, 'no_reprint': 1, 'autoplay': 1, 'ugc_pay': 0, 'is_cooperation': 0, 'ugc_pay_preview': 0, 'no_background': 0, 'clean_mode': 0, 'is_stein_gate': 0, 'is_360': 0, 'no_share': 0, 'arc_pay': 0, 'free_watch': 0}, 'owner': {'mid': 2051658654, 'name': '车一小雨', 'face': 'https://i0.hdslb.com/bfs/face/503a896adf40e05dd3729a21992f46346244c0b6.jpg'}, 'stat': {'aid': 113702531503202, 'view': 466163, 'danmaku': 237, 'reply': 1308, 'favorite': 10049, 'coin': 4577, 'share': 7629, 'now_rank': 0, 'his_rank': 0, 'like': 59484, 'dislike': 0, 'evaluation': '', 'vt': 0}, 'argue_info': {'argue_msg': '', 'argue_type': 0, 'argue_link': ''}, 'dynamic': '', 'cid': 27494384332, 'dimension': {'width': 1920, 'height': 1080, 'rotate': 0}, 'premiere': None, 'teenage_mode': 0, 'is_chargeable_season': False, 'is_story': False, 'is_upower_exclusive': False, 'is_upower_play': False, 'is_upower_preview': False, 'enable_vt': 0, 'vt_display': '', 'no_cache': False, 'pages': [{'cid': 27494384332, 'page': 1, 'from': 'vupload', 'part': 'mmexport1734962938917', 'duration': 168, 'vid': '', 'weblink': '', 'dimension': {'width': 1920, 'height': 1080, 'rotate': 0}, 'first_frame': 'http://i0.hdslb.com/bfs/storyff/n241223sa1as9ah42yx1je27s56h6z8e_firsti.jpg'}], 'subtitle': {'allow_submit': False, 'list': []}, 'is_season_display': False, 'user_garb': {'url_image_ani_cut': ''}, 'honor_reply': {'honor': [{'aid': 113702531503202, 'type': 7, 'desc': '热门收录', 'weekly_recommend_num': 0}]}, 'like_icon': '', 'need_jump_bv': False, 'disable_show_up_info': False, 'is_story_play': 1, 'is_view_self': False}
视频信息:
标题: “圣诞快乐,桐人!”
作者: 车一小雨
播放量: 466163
弹幕数: 237
发布时间: 1734963242
解读返回的信息
video.get_video_info() 方法返回的是一个包含视频详细信息的字典。以下是一些常见的键和它们所代表的含义:
- aid: 视频的AV号(如果视频有AV号的话)
- bvid: 视频的BV号
- title: 视频标题
- owner: 视频发布者的信息(包括UID、昵称等)
- pubdate: 视频发布时间
- stat: 视频的统计信息(包括播放量、点赞数、投币数、收藏数、分享数、弹幕数等)
- desc: 视频简介
- tags: 视频的标签列表
- cid: 视频的分P信息列表(每个分P都有自己的CID)
注意事项
-
遵守规则:确保你有权下载和使用视频,遵守B站的相关规定和法律法规。
-
反爬虫机制:B站可能会对频繁请求进行限制,建议合理使用爬虫工具。
-
更新库:you-get和bilibili-api可能会随着B站的变化而更新,确保使用最新版本。
3、you-get库下载限制说明
Python使用you-get确实可以下载B站(哔哩哔哩)上的大部分视频,但并不能保证下载B站上的所有视频。以下是对这一问题的详细解释:
1、you-get的下载能力
you-get是一个用于下载网络视频的命令行工具,支持多种视频网站,包括Bilibili(B站)、优酷、爱奇艺等。它允许用户指定视频的清晰度、保存位置等参数,并可以下载视频列表或整个系列。因此,对于B站上的大部分公开视频,you-get通常都能够成功下载。
2、下载限制
然而,需要注意以下几点下载限制:
- 版权保护:部分视频可能受到版权保护,无法直接通过you-get下载。这些视频可能包括付费内容、独家版权内容或与其他平台合作的内容。
- 地区限制:B站上的某些视频可能受到地区限制,只能在特定地区观看。如果你位于这些限制地区之外,即使使用you-get也可能无法下载这些视频。
- 视频格式和清晰度:虽然you-get允许用户指定视频的清晰度和格式,但B站上的某些视频可能只提供特定格式或清晰度的版本。如果指定的格式或清晰度不可用,you-get可能会下载失败或下载到低质量的视频。
- 网络问题:在下载过程中,可能会遇到网络问题导致下载失败。这些问题可能包括网络连接不稳定、B站服务器故障等。
3、使用建议
为了确保成功下载B站上的视频,以下是一些使用you-get的建议:
- 检查视频链接:确保你输入的视频链接是有效的,并且该视频在B站上是公开的。
- 指定合适的清晰度和格式:在下载前,使用 you-get 的 -i 选项查看视频的信息,了解可用的清晰度和格式,并指定合适的参数进行下载。
- 解决网络问题:如果遇到网络问题导致下载失败,可以尝试更换网络环境或使用代理服务器进行下载。
- 遵守法律法规:在下载视频时,请确保你遵守当地的法律法规和B站的使用协议,不要下载受版权保护的内容或用于非法用途。
综上所述,虽然you-get可以下载B站上的大部分视频,但由于版权保护、地区限制、视频格式和清晰度以及网络问题等因素的限制,并不能保证下载B站上的所有视频。因此,在使用you-get下载B站视频时,需要注意以上限制和建议。
总结:
本篇文章我只是简单介绍了you-get 和 bilibili-api
两个库的使用,并针对B站视频做了案例演示,根据测试,B站上up主发布的视频基本是可以下载的,但那些有版权的电影、电视剧、动漫等是无法下载的,至于下载其它视频网站以及如何提高下载清晰度这些问题,则需要大家自行去研究了。
更多推荐
所有评论(0)