B站去水印API示例代码(Python)
一、前言:为什么要做 B 站去水印
B 站(哔哩哔哩)视频右下角的水印,是平台标识作者和防盗链的重要方式。但在一些二次创作、学习整理、离线备份等合法场景下,我们可能希望得到一份更干净的视频文件。本文演示如何通过公开的分享接口,用 Python 写一个最小可运行的去水印示例。
提示:本文仅用于技术学习与本地备份,请勿��于未授权传播、商业牟利或侵犯他人著作权。
二、原理简述
B 站视频的分享链接形如 https://www.bilibili.com/video/BVxxxxxxxxxx,通过解析这个 BV 号,可以拿到视频的 aid 和 cid,再借助官方播放接口,就能得到不同清晰度的视频流地址。其中无水印版本通常对应 mp4 格式的直链。
1. 关键步骤
- 从分享链接中提取 BV 号。
- 请求
x/web-interface/view接口获取 cid。 - 请求
x/player/playurl接口获取无水印 mp4 地址。 - 使用 requests 流式下载并保存到本地。
三、环境准备
本示例依赖两个第三方库:requests 用于 HTTP 请求,re 用于正则匹配(标准库自带)。建议使用 Python 3.8 及以上版本。
- 安装 requests:
pip install requests - 准备一个 B 站视频链接,例如
https://www.bilibili.com/video/BV1xx411c7mD。
四、完整示例代码
下面给出一个最小可运行的 Python 示例,复制保存为 bilibili_no_watermark.py 即可使用。
注意:示例中的接口地址可能随官方调整而变化,如遇失效请��最新文档为准。
示例代码逻辑如下:
- 定义
get_bvid()函数,从 URL 中提取 BV 号。 - 定义
get_cid()函数,调用 view 接口拿到 cid。 - 定义
get_video_url()函数,调用 playurl 接口拿到无水印 mp4 直链。 - 定义
download_video()函数,流式写入文件。
五、常见问题与排查
1. 接口返回 412 或 -101
通常是缺少必要的请求头。需要在 headers 中带上 Referer、User-Agent,并保持与浏览器一致,否则会被风控拦截。
2. 视频有水印
检查 playurl 接口中 fnval 与 fnver 参数,建议保持默认;如仍带水印,可在请求参数中加入 fourk=1 或切换清晰度。
3. 下载速度慢
使用 stream=True 分块写入,并适当加大 chunk_size,例如 1024 * 1024 字节。
六、合规与版权提醒
B 站视频的著作权归原作者所有。去水印后的视频仅建议用于个人学习、研究、备份等合理使用范围,请勿用于公开传播、商业用途或绕过平台付费内容。
七、温馨提示
本文示例代码仅供学习参考,接口与参数可能随时更新。如果你只是偶尔需要保存一段视频,可以优先使用 B 站官方的离线缓存功能;如果是批量处理,建议加上异常重试、日志记录和进度条,让脚本更稳定。希望这篇教程能帮你快速入门,也欢迎在评论区交流改进思路。
常见问题(FAQ)
如何获取B站去水印API示例代码(Python)的无水印内容?
复制分享链接到玲珑去水印工具,在线解析即可获得无水印原画质文件。