更新记录

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)

uni-app Platform

基于 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);
    });
  },
});

注意事项

  • 提取的图片保存在系统临时目录(tmp/),App 重启后会被清除,如需持久化请自行复制到其他路径
  • 网络视频会下载到临时目录并缓存,相同 URL 不重复下载
  • iOS 帧提取允许 ±1 秒容差以命中最近关键帧,性能更优
  • keepAspectRatio: false 时会拉伸到精确的 width × height,可能变形
  • 批量截图在后台线程执行,不会阻塞 UI

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。