更新记录
1.0.1(2026-04-21)
视频取帧方案优化
1.0.0(2026-04-01)
初始版本,支持单帧/批量截图、本地/网络视频、等比缩放
平台兼容性
uni-app(4.0)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-vue插件版本 | app-nvue | app-nvue插件版本 | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | √ | 1.0.0 | √ | 1.0.0 | 5.0 | 1.0.0 | 12 | 1.0.0 | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(5.0)
| Chrome | Safari | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|---|---|
| - | - | 5.0 | 1.0.0 | 12 | 1.0.0 | - | - |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| √ | √ | √ |
dh-video-thumbnail — UTS 原生视频截图插件(Android + iOS)
基于 Android / iOS 原生能力的视频截图插件,支持毫秒级精度的单帧截图、批量截图,可用于生成视频缩略图、视频封面图、进度条预览图等,支持本地视频和网络视频。
常见使用场景:
- 视频列表页:为每条视频自动截图生成缩略图 / 封面图,替代手动上传封面
- 视频播放器:拖拽进度条时实时截取视频帧预览(时间轴缩略图)
- 视频上传前:自动截取第一帧作为视频封面,无需用户手动选择
- 短视频应用:批量截图生成多帧预览图,用于视频摘要或故事板展示
快速开始
import { getThumbnail, getThumbnails } from '@/uni_modules/dh-video-thumbnail';
// 单帧截图:提取第 3 秒帧
getThumbnail({
videoPath: 'file:///var/mobile/.../video.mp4',
time: 3000, // 毫秒
width: 320, // 0 = 原始宽度
quality: 80, // 0-100
keepAspectRatio: true,
success: (res) => {
console.log(res.path); // file:///tmp/dh_vt_xxx.jpg
console.log(res.width); // 320
console.log(res.height); // 180
},
fail: (err) => {
console.log(err.errCode, err.errMsg);
},
});
// 批量截图:按 2 秒间隔截取前 6 帧
getThumbnails({
videoPath: 'file:///var/mobile/.../video.mp4',
interval: 2000,
count: 6,
width: 200,
success: (res) => {
console.log(res.paths); // string[]
console.log(res.times); // number[](毫秒)
},
});
API
getThumbnail(options)
提取单帧截图。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
videoPath |
string |
— | 视频路径,支持 file:// 本地路径或 http/https 网络链接 |
time |
number |
0 |
提取时间点(毫秒),超出时长取最后一帧 |
width |
number |
0 |
缩略图宽度(px),0 使用原始宽度 |
height |
number |
0 |
缩略图高度(px),0 使用原始高度 |
quality |
number |
80 |
JPEG 压缩质量(0–100) |
keepAspectRatio |
boolean |
true |
是否等比缩放 |
success |
Function |
— | 成功回调,参数为 ThumbnailResult |
fail |
Function |
— | 失败回调,参数为 ThumbnailFail |
complete |
Function |
— | 完成回调,成功失败均触发 |
ThumbnailResult
| 字段 | 类型 | 说明 |
|---|---|---|
path |
string |
图片本地路径(file://) |
width |
number |
实际宽度(px) |
height |
number |
实际高度(px) |
getThumbnails(options)
批量提取多帧截图。时间点来源二选一:times(指定时间点数组)或 interval + count(自动间隔)。times 优先。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
videoPath |
string |
— | 视频路径 |
times |
number[] |
— | 时间点数组(毫秒),与 interval 二选一 |
interval |
number |
— | 自动间隔(毫秒),与 times 二选一 |
count |
number |
10 |
interval 模式下最多生成帧数 |
width |
number |
0 |
缩略图宽度(px) |
height |
number |
0 |
缩略图高度(px) |
quality |
number |
80 |
JPEG 压缩质量(0–100) |
keepAspectRatio |
boolean |
true |
是否等比缩放 |
success |
Function |
— | 成功回调,参数为 BatchThumbnailResult |
fail |
Function |
— | 失败回调 |
complete |
Function |
— | 完成回调 |
BatchThumbnailResult
| 字段 | 类型 | 说明 |
|---|---|---|
paths |
string[] |
图片路径数组,与 times 一一对应 |
times |
number[] |
实际时间点数组(毫秒) |
某帧提取失败时会自动跳过,不影响其他帧。
错误码
| 错误码 | 说明 |
|---|---|
8040001 |
视频文件不存在 |
8040002 |
视频格式不支持或无法解析 |
8040003 |
帧提取失败(时间超出范围或解码失败) |
8040004 |
图片保存失败 |
8040005 |
网络视频下载失败 |
8040006 |
参数无效(如 videoPath 为空) |
示例
网络视频截图(自动缓存)
getThumbnail({
videoPath: 'https://example.com/demo.mp4',
time: 10000,
width: 480,
height: 270,
keepAspectRatio: true,
success: (res) => console.log(res.path),
fail: (err) => {
if (err.errCode === 8040005) {
console.log('网络下载失败,请检查网络');
}
},
});
按指定时间点批量截图
getThumbnails({
videoPath: 'file:///var/mobile/.../video.mp4',
times: [0, 5000, 10000, 15000, 20000],
width: 320,
quality: 70,
success: (res) => {
res.paths.forEach((path, i) => {
console.log(`第 ${res.times[i] / 1000}s:`, path);
});
},
});
自动生成视频封面图(取第 0 帧)
上传视频时常用:截取第 0 毫秒的帧作为封面图,省去用户手动选封面的步骤。
getThumbnail({
videoPath: 'file:///var/mobile/.../video.mp4',
time: 0, // 取第一帧作为封面
width: 720,
quality: 90,
success: (res) => {
// res.path 即为封面图路径,可直接上传或展示
uploadCover(res.path);
},
});
注意事项
- 提取的图片保存在系统临时目录(
tmp/),App 重启后会被清除,如需持久化请自行复制到其他路径 - 网络视频会下载到临时目录并缓存,相同 URL 不重复下载
- iOS 帧提取允许 ±1 秒容差以命中最近关键帧,性能更优
keepAspectRatio: false时会拉伸到精确的width × height,可能变形- 批量截图在后台线程执行,不会阻塞 UI

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 232
赞赏 5
下载 11938896
赞赏 1914
赞赏
京公网安备:11010802035340号