B站封面提取:用视频链接获取原图,附 BV 号与保存方法

AI Router 2026/08/30

B站封面提取的目标,是拿到视频封面图片本身,而不是给视频画面截图。 截图可能带播放按钮、字幕或页面缩放,封面地址则对应平台返回的图片资源。

本文是一篇操作教程,不是已经上线的在线封面提取器。可以在浏览器中查找图片,也可以用下面的 Python 示例读取公开视频的封面地址。

第一步:从链接找到 BV 号

完整视频链接的路径通常包含 BV 号,例如 https://www.bilibili.com/video/BV1GJ411x7h7/。只需要其中的 BV1GJ411x7h7,后面的分享参数不需要一起复制。

如果拿到的是 b23.tv 分享短链接,先在浏览器里打开,等它跳到视频页后再复制完整地址。不要把短链接末尾的字符当成 BV 号。

方法一:在浏览器查找封面图片

  1. 打开视频页,按 F12 或浏览器的“检查”打开开发者工具。
  2. 在页面源代码或 Elements 中搜索 og:image。如果找到对应 meta 标签,复制它的 content 图片地址。
  3. 将图片地址在新标签页打开,再选择保存图片。
  4. 如果页面没有这项信息,打开 Network,筛选图片请求,寻找与视频封面一致的资源;不要随意运行别人要求粘贴到控制台的脚本。

不同页面版本的标签结构可能变化。找不到 og:image 不代表没有封面,需要换另一种方法。

方法二:用 Python 读取封面地址

B站公开接口当前可返回视频信息,其中 data.pic 是封面地址。2026 年 10 月 9 日核查了下面示例的接口响应。这不是我们拥有稳定性保证的 API 合约,接口可能调整、限流,或对部分视频返回错误。

import json
from urllib.request import Request, urlopen

bvid = "BV1GJ411x7h7"  # 换成目标视频的 BV 号
url = f"https://api.bilibili.com/x/web-interface/view?bvid={bvid}"
request = Request(url, headers={"User-Agent": "Mozilla/5.0"})
with urlopen(request, timeout=15) as response:
    result = json.load(response)

if result.get("code") != 0:
    raise RuntimeError(result.get("message", "读取视频信息失败"))
cover = result.get("data", {}).get("pic")
if not cover:
    raise RuntimeError("响应中没有封面地址")
print(cover)

运行后,把打印出的地址放进浏览器打开并保存。这段代码只读取视频信息,不下载视频,也不需要账户 Cookie。接口示例见B站视频信息响应。

提取出来的图片是高清原图吗?

先检查保存后图片的实际像素尺寸,而不是浏览器显示得有多大。平台返回的资源不一定等于创作者最初上传文件的完整尺寸,也不能凭空恢复原图没有的细节。

如果复制的是带缩放或格式参数的地址,比较不同资源的实际尺寸再选择;不要把所有图片 URL 的后缀都机械删除。遇到 WebP 文件,也不要仅改扩展名就称为 PNG。

常见失败原因

现象 先检查什么
接口提示找不到视频 BV 号是否完整、视频是否仍公开可访问
返回限流或请求被拒绝 停止连续重试,稍后用浏览器单次查看
浏览器显示空图片 地址是否复制完整,视频是否使用默认或特殊封面
前端 fetch 报跨域错误 浏览器跨域限制不等于接口没有封面;本文示例运行在本地 Python
保存的是页面 HTML 是否打开了图片资源,而不是视频页面

能提取 YouTube 封面吗?

B站和 YouTube 的视频标识、接口不同,不能把 YouTube 链接塞进这个 B站示例。要批量保存自己有权使用的视频素材,可以另外了解yt-dlp。封面可访问也不等于可随意转载,发布时仍需确认原作者授权。