使用帮助

视频缩略图雪碧图生成器 — 使用指南

为视频进度条生成悬停预览图(缩略图雪碧图)。从任意视频中提取帧,生成优化的雪碧图,并导出 ZWMAP 兼容的 JSON,实现与 ZWPlayer 的无缝集成。

快速入门

缩略图雪碧图生成器(又称"悬停预览图"或"进度条预览图"工具)是一款免费的在线工具,可以从视频中提取帧并将它们拼合为一张雪碧图。当用户将鼠标悬停在播放器进度条上时,即可看到对应时间点的预览画面——就像 B 站、腾讯视频、爱奇艺等主流平台那样的悬停预览效果。

快速上手步骤

  1. 加载视频

    将本地视频文件(MP4、WebM)拖拽到窗口中,或者在地址栏中粘贴远程视频 URL 并按回车键。

  2. 配置采样

    选择采样模式:固定间隔(例如每 5 秒)或指定帧数(例如均匀分布 100 帧)。调整帧尺寸和输出格式。 (e.g., every 5 seconds) or Total Frames (e.g., 100 frames evenly distributed). Adjust frame dimensions and output format.

  3. 生成雪碧图

    点击"生成雪碧图"按钮(或按 G 键)。工具将提取帧并将它们组合成一张网格图像。 button (or press G). The tool extracts frames and assembles them into a single image grid.

  4. 预览和导出

    使用 ZWPlayer 内置的缩略图预览功能预览结果(按 P 键)。下载雪碧图、导出 ZWMAP JSON,或同时获取两者的 ZIP 包。

提示:此工具完全在浏览器中使用 Canvas API 运行。视频数据不会上传到任何服务器——您的文件始终保持私密。

键盘快捷键

使用以下键盘快捷键提高工作效率:

按键 操作 说明
Space 播放 / 暂停 切换视频播放状态
, 逐帧后退 后退一帧
. 逐帧前进 前进一帧
后退 5 秒 向后跳转 5 秒
前进 5 秒 向前跳转 5 秒
G 生成 开始生成雪碧图
P 预览 使用 ZWPlayer 预览缩略图效果
Ctrl+S 下载雪碧图 保存生成的雪碧图文件
Esc 退出 退出预览模式或关闭放大查看

配置选项

采样模式

选项 取值 说明
固定间隔 ≥ 1 秒(无上限) 每隔 N 秒提取一帧。适用于场景变化均匀的视频。
指定帧数 1 – 3000 帧 在视频时长内均匀分布 N 帧。适用于需要统一预览密度的场景。

帧尺寸

参数 范围 默认值 说明
宽度 32 – 640 px 160 px 每帧的宽度,单位为像素。
高度 32 – 640 px 90 px 每帧的高度,单位为像素。默认为 16:9 宽高比。
宽高比锁定 按高度 / 按宽度 按高度 锁定宽高比,修改一个尺寸时自动调整另一个。

网格布局

参数 说明
列数 每行的帧数。留空则根据帧数和尺寸自动计算。
行数 雪碧图的总行数。留空则自动计算。

自动网格公式:col = ⌈√(totalFrames × (width / height))⌉,row = ⌈totalFrames / col⌉。此公式生成近似正方形的雪碧图,优化加载性能。 col = ⌈√(totalFrames × (width / height))⌉, row = ⌈totalFrames / col⌉. This produces a roughly square sprite sheet for optimal loading.

输出设置

参数 说明
格式 JPG(默认)— 文件更小,支持质量调节。PNG — 无损压缩,文件较大,支持透明。 (default) — smaller file size with adjustable quality. PNG — lossless, larger file size, supports transparency.
质量 JPG 压缩质量,范围 1–100。默认:85。较低的值会减小文件大小,但降低图像清晰度。

输出格式

生成雪碧图后,您可以下载以下三种格式的结果:

1. 雪碧图

一张包含所有提取帧的网格图像文件(thumbnail.jpg 或 .png)。这是用于视频播放器在进度条上显示缩略图预览的主要输出。

2. ZWMAP JSON

遵循 ZWMAP/1.0 协议的 JSON 文件({title}_thumbnail.json)。包含缩略图 URL、帧尺寸、网格布局和总帧数。用于服务端配置和 CMS 集成。

3. ZIP 打包

包含缩略图和 ZWMAP JSON 文件的 ZIP 压缩包({title}.zip)。方便一次性下载和部署。

ZWMAP 缩略图协议规范

ZWMAP(Z&W 媒体标注协议)缩略图类型定义了描述视频缩略图雪碧图的标准 JSON 格式。该协议实现了缩略图生成工具与视频播放器之间的互操作性。

协议头部

每个 ZWMAP 缩略图文档以协议标识符开头:

{
  "zwp_protocol": "ZWMAP/1.0",
  "zwp_type": "thumbnail",
  "zwp_version": "1.0"
}

缩略图对象字段

字段 类型 必填 说明
url string 雪碧图文件访问地址(JPG 或 PNG)。
width number 单帧宽度,单位为像素。用于计算 background-position 偏移。
height number 单帧高度,单位为像素。
col number 列数(每行帧数)。用于计算水平偏移。
row number 雪碧图行数。最后一行可能不满。
total number 雪碧图中的有效帧总数。

完整示例

{
  "zwp_protocol": "ZWMAP/1.0",
  "zwp_type": "thumbnail",
  "zwp_version": "1.0",
  "thumbnail": {
    "url": "https://cdn.example.com/thumbnails/thumbnail.jpg",
    "width": 160,
    "height": 90,
    "col": 10,
    "row": 10,
    "total": 100
  }
}

此示例描述了一个 10×10 的雪碧图,包含 100 帧,每帧 160×90 像素。当用户悬停在视频进度条上时,播放器根据悬停位置相对于总时长的比例来计算显示哪一帧。

注意:ZWMAP 缩略图协议不支持向后兼容。所有字段均为必填。没有探测规则——协议头部必须存在。 The ZWMAP thumbnail protocol does not support backward compatibility. All fields are required. There are no probe rules — the protocol header must be present.

ZWPlayer 集成

ZWPlayer 是一个功能丰富的 JavaScript 视频播放器,开箱即用支持缩略图预览。以下是如何将生成的雪碧图与 ZWPlayer 集成。

播放器配置

在 ZWPlayer 初始化配置中添加 thumbnails 属性:

var player = new ZWPlayer({
  playerElm: 'mse',
  url: 'https://cdn.example.com/video.mp4',
  thumbnails: {
    url: 'https://cdn.example.com/thumbnails/thumbnail.jpg',
    width: 160,
    height: 90,
    row: 10,      // rowsize = ZWMAP's "col" value
    total: 100
  }
});

重要提示:ZWPlayer 使用 row 作为"rowsize"(每行帧数),对应 ZWMAP 协议的 col 字段。复制导出的 JSON 时,映射关系为:ZWMAP col → ZWPlayer row。 ZWPlayer uses row as "rowsize" (frames per row), which corresponds to the ZWMAP protocol's col field. When copying from the exported JSON, map: ZWMAP col → ZWPlayer row.

从工具复制配置

生成完成后,JSON 面板中提供了可直接使用的 ZWPlayer 配置片段。点击复制按钮即可直接复制。

实时预览

按 P 键或点击预览按钮,打开一个完整的 ZWPlayer 实例并加载生成的雪碧图。将鼠标悬停在进度条上即可看到缩略图预览效果。按 Esc 键退出。

使用 ZWMAP JSON

如果将缩略图存储在服务器上,将 ZWMAP JSON 文件放在已知 URL。您的应用可以获取该 JSON 并将解析后的 thumbnail 对象直接传递给 ZWPlayer 配置(注意 col → row 映射)。

使用 JSON URL

除了传入对象,还可以直接将 ZWMAP JSON 文件的 URL 作为字符串传入,ZWPlayer 会自动获取并解析:

var player = new ZWPlayer({
  playerElm: 'mse',
  url: 'https://cdn.example.com/video.mp4',
  thumbnails: 'https://cdn.example.com/thumbnails/movie_thumbnail.json'
});

部署方式:将导出的 ZWMAP JSON 文件下载并上传到 Web 服务器。JSON 中引用的雪碧图文件也需要一并上传到同一服务器。为方便起见,可以直接下载 ZIP 打包文件,解压后一起上传即可——JSON 与雪碧图之间的相对路径会自动生效。 Download the ZWMAP JSON file and upload it to your web server. The sprite image referenced inside the JSON must also be uploaded to the same server. For convenience, download the ZIP bundle — extract it and upload the files together; the relative paths between the JSON and the sprite image will work automatically.

拖拽加载

您还可以通过将文件直接拖拽到 ZWPlayer 播放器上来加载缩略图:

  • 单独拖拽缩略图 JSON:将 *_thumbnail.json 文件拖入播放器,为当前播放的视频加载缩略图。
  • 同时拖拽视频和缩略图:将视频文件与对应的缩略图 JSON 及雪碧图一起拖入,播放器会自动按文件名匹配(例如 movie.mp4 匹配 movie_thumbnail.json)。
  • 播放列表拖拽:拖入多个视频及对应的缩略图文件,自动创建带缩略图预览的播放列表。

注意:当 JSON 中的 url 字段为相对路径(如 thumbnail.jpg)时,需同时拖入对应的图片文件,播放器会自动解析并使用本地图片。

常见问题

什么是视频悬停预览图(缩略图雪碧图)?
悬停预览图(又称缩略图雪碧图)是一张包含多个视频帧的网格图像。视频播放器使用它在用户悬停进度条时显示对应的预览画面。播放器只需加载一张雪碧图,通过 CSS background-position 即可定位每帧,而无需请求数百张单独的图片。B 站、腾讯视频、爱奇艺、YouTube 等主流平台均采用此技术。
支持哪些视频格式?
工具支持浏览器原生可播放的任何视频格式。本地文件通常包括 MP4(H.264)、WebM(VP8/VP9)和 OGG(Theora)。远程 URL 同样支持这些格式,但 CORS 头必须允许跨域访问才能提取帧。如果遇到 CORS 错误,请先下载视频再作为本地文件加载。
应该提取多少帧?
取决于视频时长和所需的预览密度。对于大多数视频,100 帧(默认值)可提供良好的覆盖。对于较长的视频(超过 30 分钟),建议使用固定间隔模式,间隔 5–10 秒。帧数越多,雪碧图文件越大。以 B 站为例,通常使用 160×90 像素帧、100 帧左右的配置,文件大小控制在 500KB 以内。
为什么会出现 CORS 错误?
CORS(跨域资源共享)错误发生在加载远程视频时,服务器未包含适当的 Access-Control-Allow-Origin 头。出于安全原因,浏览器阻止从跨域资源进行基于 Canvas 的帧提取。解决方法是先下载视频,然后作为本地文件加载。
如何在自己的视频播放器中使用雪碧图?
雪碧图适用于任何支持通过 background-position 实现缩略图预览的视频播放器。关键参数为:帧宽度、帧高度、每行列数和总帧数。显示第 N 帧:计算 col = N % columns,row = floor(N / columns),然后设置 background-position: -(col × width)px -(row × height)px。ZWMAP JSON 导出包含所有这些参数的标准格式。
最大雪碧图尺寸是多少?
工具最多支持 3,000 帧,帧尺寸最大 640×640 像素。实际最大雪碧图尺寸取决于浏览器的 Canvas 限制——大多数现代浏览器支持最大 16,384 × 16,384 像素的画布。对于非常大的雪碧图,建议减小帧尺寸或帧数。