更新记录

1.0.9(2026-11-10)

  • 修复 HarmonyOS 最低 API 13 的项目运行时,视频缩略图原生依赖要求 API 20 而导致构建失败的问题;保持原有调用方式,升级后重新构建鸿蒙 App。
  • 优化说明文档,补齐“作者系列 UTS 插件”清单及插件市场链接,便于按能力查找。

1.0.8(2026-11-05)

  • 新增 HarmonyOS 本地及网络视频信息、单帧、多时间点、批量、智能封面和时间轴能力,支持缓存、进度与任务取消。
  • 新增 HarmonyOS 显式自定义沙箱目录的同名图片覆盖尝试,实际可用性取决于系统文件接口和权限。
  • 新增 HarmonyOS 显式自定义目录的非覆盖直出尝试,同名自动换名,系统不支持时保留安全回退。
  • 新增 HarmonyOS 默认缓存目录固定名称的覆盖尝试,旧文件身份不明或同名冲突时保留原文件。
  • 修复 HarmonyOS 两种宿主用户数据路径转换不一致,以及缓存清理后统计计数未重置的问题。
  • 修复 HarmonyOS 时间轴覆盖参数误报不支持、缓存结果在回调前提前释放、暂存关闭失败时的清理处理及输出失败状态提示不完整的问题。
  • 修复 iOS 单帧最大宽高设置未生效的问题。
  • 修复 iOS 活动任务与缓存清理、下载完成时序冲突,以及进度回调修改在途批量参数的问题。
  • 修复 Web 时间轴输出类型缓存、透明背景颜色、缓存筛选及单帧时间和时长字段问题。
  • 修复 HarmonyOS 时间轴已交付图片但临时目录清理未确认时的状态提示。
  • 优化 HarmonyOS 自定义目录缓存复用,符合条件时直接交付到指定目录并保留安全回退。
  • 统一 uni-app 和 uni-app x 示例的操作顺序、状态展示及异步任务处理。

1.0.7(2026-11-04)

  • 修复示例页面和辅助模块使用相对引入路径的问题,统一通过 @/uni_modules/ 引用插件内文件,复制页面到其他目录时无需另行复制辅助代码。
查看更多

平台兼容性

uni-app(4.84)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
√ √ √ √ √ √ √ √ √
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

uni-app x(4.84)

Chrome Safari Android iOS 鸿蒙 微信小程序
√ √ √ √ √ ×

lizhao-video-thumb 帮你从视频中生成封面、多帧预览和时间轴图片。

功能与场景

  • 指定时间生成视频列表封面,也可以自动选择画面质量较好的候选帧。
  • 为播放进度预览生成时间轴整图及每帧坐标,或一次处理多个时间点、多个视频。
  • 按需返回图片路径或 Base64,查询视频信息、复用缓存和取消活动任务。

适用于 uni-app 和 uni-app x;Android、iOS、HarmonyOS 和 Web 的具体限制见文末。视频必须能被当前平台读取并解码。

下载与导入

从插件市场下载并导入 lizhao-video-thumb,在页面中从 @/uni_modules/lizhao-video-thumb 导入需要的方法。完整页面可参考 uni-app 示例 和 uni-app x 示例。

基础使用:生成一张封面

适合在用户选择视频后生成列表封面。将 src 换成选择器返回的可读路径;timeMs 的单位是毫秒。

uni-app:

import { getVideoThumbnail } from '@/uni_modules/lizhao-video-thumb'

getVideoThumbnail({
  src: '替换为选择视频返回的可读路径',
  timeMs: 1000,
  outputType: 'both',
  success: (res) => console.log('封面路径', res.imagePath),
  fail: (err) => console.error(err.errCode, err.errMsg)
})

uni-app x:

import { getVideoThumbnail, type VideoThumbnailOptions, type VideoThumbnailResult, type VideoThumbnailFail } from '@/uni_modules/lizhao-video-thumb'

const options : VideoThumbnailOptions = {
  src: '替换为选择视频返回的可读路径',
  timeMs: 1000,
  outputType: 'both',
  success: (res : VideoThumbnailResult) => { console.log('封面路径', res.imagePath) },
  fail: (err : VideoThumbnailFail) => { console.error(err.errCode, err.errMsg) }
}
getVideoThumbnail(options)

下面各业务片段使用 JavaScript 展示调用方式;uni-app x 可像上例一样为参数和回调声明插件导出的对应类型。运行前请替换视频路径、网络地址和任务 ID。

按业务使用

按名称保存封面

需要使用固定文件名更新封面时,可指定可写目录;允许覆盖后,同名文件可能被替换。

import { getVideoThumbnail } from '@/uni_modules/lizhao-video-thumb'

getVideoThumbnail({
  src: '替换为可读视频路径',
  outputDir: '替换为可写的应用沙箱目录',
  fileName: 'cover.jpg',
  cachePolicy: 'refresh',
  overwrite: true,
  success: (res) => console.log(res.imagePath),
  fail: (err) => console.error(err.errCode, err.errMsg)
})

自动选择封面

不确定选择哪个时间点时,分析候选画面并返回选中的缩略图与评分。

import { getSmartVideoThumbnail } from '@/uni_modules/lizhao-video-thumb'

getSmartVideoThumbnail({
  src: '替换为可读视频路径',
  candidateCount: 7,
  success: (res) => console.log(res.selectedTimeMs, res.score, res.thumbnail.imagePath),
  fail: (err) => console.error(err.errCode, err.errMsg)
})

评分辅助选择,不保证符合主观审美。如果至少有一帧分析成功但质量均较低,会返回其中最高分并设置 fallbackUsed;全部候选解码失败时进入 fail。

候选数量默认 7,归一到 3–20;startRatio 和 endRatio 默认为 0.05 和 0.95,均在 0–1 范围内,开始比例须小于结束比例。

生成时间轴预览

播放器需要拖动预览时,可生成一张整图并根据 frames 中的坐标显示对应画面。

import { getVideoStoryboard } from '@/uni_modules/lizhao-video-thumb'

getVideoStoryboard({
  src: '替换为可读视频路径',
  frameCount: 12,
  columns: 4,
  frameWidth: 160,
  frameHeight: 90,
  fitMode: 'cover',
  common: { outputType: 'both', cachePolicy: 'reuse' },
  success: (res) => console.log(res.imagePath, res.frames),
  fail: (err) => console.error(err.errCode, err.errMsg)
})

frames 中每项包含帧序号、时间与 x、y、width、height,坐标相对于返回整图。startTimeMs / endTimeMs 可限制采样区间。

同一视频生成多张图片

需要展示指定时间点时,使用毫秒数组获取多张结果。

import { getVideoThumbnails } from '@/uni_modules/lizhao-video-thumb'

getVideoThumbnails({
  src: '替换为可读视频路径',
  timesMs: [1000, 3000, 5000],
  common: { outputType: 'both' },
  success: (res) => console.log('图片数量', res.results.length),
  fail: (err) => console.error(err.errCode, err.errMsg)
})

批量处理多个视频

媒体列表需要批量封面时,检查成功和失败数量;部分失败时结果列表只包含成功项。

import { getVideoThumbnailBatch } from '@/uni_modules/lizhao-video-thumb'

getVideoThumbnailBatch({
  items: [
    { src: '替换为第一个可读视频路径', timeMs: 1000 },
    { src: '替换为第二个可读视频路径', timeMs: 2000 }
  ],
  success: (res) => console.log(res.successCount, res.failCount),
  fail: (err) => console.error(err.errCode, err.errMsg)
})

网络视频取帧

视频地址为 HTTP 或 HTTPS 时,需要显式允许网络来源。Web 跨域服务器还需要允许 CORS。

import { getVideoThumbnail } from '@/uni_modules/lizhao-video-thumb'

getVideoThumbnail({
  src: 'https://替换为真实地址/video.mp4',
  allowNetwork: true,
  timeMs: 1000,
  success: (res) => console.log(res.imagePath),
  fail: (err) => console.error(err.errCode, err.errMsg)
})

读取视频信息

需要展示视频时长和尺寸时,先读取视频信息。路径归一化只识别地址类型,不保证文件可读。

import { getVideoInfo } from '@/uni_modules/lizhao-video-thumb'

getVideoInfo({
  src: '替换为可读视频路径',
  success: (res) => console.log(res.durationMs, res.width, res.height),
  fail: (err) => console.error(err.errCode, err.errMsg)
})

检查输入路径的类型时,可以使用 normalizeVideoPath;检查成功不代表文件一定可读。

import { normalizeVideoPath } from '@/uni_modules/lizhao-video-thumb'

normalizeVideoPath({
  src: '替换为可读视频路径',
  success: (res) => console.log(res.pathType, res.normalizedPath),
  fail: (err) => console.error(err.errCode, err.errMsg)
})

复用与清理缓存

多次请求同一个画面时设置 reuse;页面不再需要缓存时,可按来源和时间条件清理。

import { getVideoThumbnail } from '@/uni_modules/lizhao-video-thumb'

getVideoThumbnail({
  src: '替换为可读视频路径',
  timeMs: 1000,
  cachePolicy: 'reuse',
  cacheMaxAgeMs: 86400000,
  success: (res) => console.log('是否命中缓存', res.cacheHit),
  fail: (err) => console.error(err.errCode, err.errMsg)
})
import { clearThumbnailCache } from '@/uni_modules/lizhao-video-thumb'

clearThumbnailCache({
  src: '替换为可读视频路径',
  success: (res) => console.log('已清理数量', res.removedCount),
  fail: (err) => console.error(err.errCode, err.errMsg)
})

需要展示当前缓存占用时,可单独查询统计。

import { getThumbnailCacheInfo } from '@/uni_modules/lizhao-video-thumb'

getThumbnailCacheInfo({
  success: (res) => console.log(res.fileCount, res.totalBytes),
  fail: (err) => console.error(err.errCode, err.errMsg)
})

取消活动任务

任务可能持续较长时间时,传入唯一 taskId,再通过相同 ID 请求取消。取消受理后仍应等待原任务的成功或失败回调。

import { getVideoThumbnail, cancelVideoThumbnailTask } from '@/uni_modules/lizhao-video-thumb'

const taskId = '替换为本次唯一任务ID'
getVideoThumbnail({
  taskId,
  src: '替换为可读视频路径',
  success: (res) => console.log(res.imagePath),
  fail: (err) => console.error(err.errCode, err.errMsg)
})
// 用户选择取消时调用:
cancelVideoThumbnailTask({ taskId, success: (res) => console.log('已受理', res.accepted) })

单独下载网络视频

需要先下载再由业务使用本地路径时,可在 App 端单独下载。

import { downloadVideoForThumbnail } from '@/uni_modules/lizhao-video-thumb'

downloadVideoForThumbnail({
  src: 'https://替换为真实地址/video.mp4',
  timeoutMs: 30000,
  maxBytes: 104857600,
  success: (res) => console.log('下载路径', res.localPath),
  fail: (err) => console.error(err.errCode, err.errMsg)
})

查询当前平台能力

根据能力矩阵决定是否向用户展示对应操作。

import { getVideoThumbnailCapabilities } from '@/uni_modules/lizhao-video-thumb'

const capabilities = getVideoThumbnailCapabilities()
console.log('支持时间轴', capabilities.storyboard)

用途速查

模块 适用业务 常用方法 使用结果
封面 指定时间或自动选帧 getVideoThumbnail、getSmartVideoThumbnail 图片、时间与评分
多帧 时间轴、多个时间点或多个视频 getVideoStoryboard、getVideoThumbnails、getVideoThumbnailBatch 整图坐标、结果列表和批量统计
视频 查询信息、检查来源、下载 getVideoInfo、normalizeVideoPath、downloadVideoForThumbnail 视频信息、路径类型或下载路径
任务与缓存 中止活动任务、查看或释放缓存 cancelVideoThumbnailTask、getThumbnailCacheInfo、clearThumbnailCache 受理状态、缓存统计或清理数量
平台 决定是否显示某项操作 getVideoThumbnailCapabilities 当前平台能力矩阵

除能力矩阵同步返回外,各方法通过 success、fail、complete 返回结果;支持进度的方法可传入 progress。活动任务之间的 taskId 必须唯一。

单帧结果中的 imagePath、base64、width、height、timeMs、durationMs 和 cacheHit 可用于展示或记录;请以返回的实际路径为准,日志避免输出完整 Base64。进度包含任务 ID、阶段、百分比及批量序号。

常用配置

参数 用途 默认值或取值
timeMs 单帧时间,毫秒 0
outputType 选择输出 App 默认 file,Web 默认 base64;可选 file、base64、both
format、quality 图片格式和质量 jpg、90;格式可选 jpg、png、webp,质量归一到 1–100
maxWidth、maxHeight 限制单帧输出尺寸 未设置时不限制;按比例缩放
allowNetwork 允许 HTTP/HTTPS 视频 默认 false
downloadTimeoutMs、maxDownloadBytes App 网络取帧的下载限制 默认 30000 毫秒、104857600 字节
cachePolicy、cacheMaxAgeMs 重新生成或复用 默认 refresh;reuse 可指定缓存年龄,0 表示不按年龄过期
outputDir、fileName、overwrite App 文件输出 未设置时使用平台默认目录和名称;具体限制见平台差异
strategy、fixOrientation 取帧策略与方向 strategy 可选 nearestSync、previousSync、exact、fast,效果依平台而异;App 默认修正方向

多帧、批量、智能封面和时间轴通过 common 传递通用配置。时间轴默认 12 帧、4 列、每格 160×90,支持 cover 和 contain;帧数归一到 2–60,列数归一到 1–帧数,单格宽高归一到 16–1024。App 画布上限为 1600 万像素,Web 为 800 万像素;背景色支持 #RRGGBB 和 #AARRGGBB。

平台差异与注意事项

平台或功能 使用边界
Android 本地视频、网络视频和系统授权的 content:// 路径可按设备支持的格式读取;网络下载使用 INTERNET 权限。
iOS 本地、网络及选择器返回的可读文件路径可用于取帧;不直接读取 content://、ph:// 或 assets-library://。
HarmonyOS 支持本地/授权文件、网络视频、信息、单帧、多帧、批量、智能封面和时间轴;网络下载使用 INTERNET 权限。_doc/ 与 unifile://usr/ 指向各宿主的用户数据目录,物理位置可能不同;uni-app x 中 _downloads/ 不保证自动转换。单帧文件输出在显式自定义应用沙箱目录且 cachePolicy: 'refresh' 时,可用 overwrite: true 尝试替换同名图片,是否成功取决于系统文件接口和目录权限。默认目录使用固定文件名时也可尝试覆盖;若系统文件接口不支持、旧缓存存在多个同名文件或文件身份无法确认,操作会失败并保留原文件。显式自定义目录的 refresh 非覆盖输出和 reuse 均会尝试交付到指定目录;已有交付文件可在缓存有效时复用,新建时同名会换名且不覆盖已有文件。指定目录与默认缓存目录相同、目录身份无法确认或系统不支持时可能回退到独立子目录。reuse 保留原缓存和一份交付图片,自定义目录的空间由业务管理。时间轴使用不覆盖输出;请始终使用返回的 imagePath。
Web 使用浏览器视频与 Canvas,跨域视频需 CORS。imagePath 可能是 data URL,不写入本地磁盘;不支持独立下载。浏览器对视频格式和方向的处理决定实际画面。
小程序 当前不支持视频取帧,调用会返回不支持错误。
格式和策略 Android 支持 jpg、png、webp;iOS、HarmonyOS 和 Web 将 webp 归一为 jpg。Android 取帧策略与其他平台的系统取帧方式不保证逐帧相同。
Base64 App 返回的 base64 为图片正文,Web 返回的 base64 可能已含 data: 前缀;展示时先判断前缀,避免重复添加。
网络 App 的网络取帧使用 downloadTimeoutMs / maxDownloadBytes;独立下载使用 timeoutMs / maxBytes。Web 直接加载视频,不应用这些下载限制。网络视频信息可能需要先下载,getVideoInfo 不接受任务 ID。
批量与取消 当前批量队列不承诺并行。部分失败只返回成功项,全部失败走失败回调;取消受理不代表底层操作已立即停止。
缓存 默认清理范围及统计方式因平台而异;自定义目录请由业务管理。复用取决于来源及参数,网络来源可能因重新下载而不能命中。清理正在使用的文件前,请先等待相关任务结束。HarmonyOS 任务运行中,请勿通过其他线程或进程移动、替换输出目录、默认缓存目录及其中的文件。

可使用 getVideoThumbnailCapabilities() 判断当前平台能力。App 项目需使用包含本版本插件原生能力的安装包或自定义基座。读取网络视频前请确认网络权限与服务端授权;读取本地视频前请确认文件存在并拥有相应访问权限。

缓存清理的 olderThanMs 是毫秒时间戳,表示清理早于该时间的条目,省略或为 0 时不按时间筛选。Web 缓存在当前进程内,并按来源和时间筛选;统计字节数为估算值。Android 主要依据文件名中的来源哈希与修改时间筛选;iOS 对默认缓存根目录的一级条目执行清理,目录统计和删除数量不等同于递归文件大小。HarmonyOS 按受管缓存记录筛选,无法确定来源的旧条目可能导致按来源清理返回不支持。命中与未命中次数为当前进程累计,清理时重置。

错误码

错误码 说明
9060001 当前平台或请求的操作不支持
9060002 原生上下文不可用
9060003 视频来源或参数无效
9060004 视频路径无法访问
9060005 未开启网络视频
9060006 视频下载失败
9060007 视频解码或信息读取失败
9060008 视频帧提取失败
9060009 输出或缓存写入失败
9060010 操作超时
9060011 任务已取消
9060012 编码或格式不支持
9060013 活动任务 ID 冲突
9060014 时间轴参数无效
9060015 时间轴画布超过安全像素上限

遇到 9060009 且提示目标文件状态未确认时,请先检查提示中的输出路径再决定是否重试;提示目标文件已写入时,其他步骤仍可能失败。多帧或批量任务中途结束时,错误信息可能包含已经取得的输出路径。 临时资源清理未确认的提示也可能出现在成功结果的 message 中;请先结束应用再检查提示的临时路径,该路径不是已交付图片。

作者系列 UTS 插件

以下为作者已发布的 UTS 插件,可按能力方向查找。

插件 能力方向 插件市场
lizhao-alipay-kit 支付宝授权登录、App 支付与脱敏诊断 查看插件
lizhao-app-keepalive 应用保活、唤醒、自愈与报告 查看插件
lizhao-apple-iap 苹果内购、交易恢复、订阅管理与服务端验签参考 查看插件
lizhao-apple-login 苹果授权登录、凭证状态与撤销监听 查看插件
lizhao-bg-audio 背景音频播放、队列、倍速与事件 查看插件
lizhao-ble BLE 扫描、连接、读写、通知与自动重连 查看插件
lizhao-call-kit 电话、短信、通讯录原生能力 查看插件
lizhao-camera-pro 原生相机、拍照录像、水印与媒体保存 查看插件
lizhao-cast-screen DLNA 投屏、AirPlay 路由入口 查看插件
lizhao-choose-file 原生文件选择、上传、进度与取消 查看插件
lizhao-device-id 设备标识、隐私策略与诊断 查看插件
lizhao-dingtalk 钉钉授权登录、内容分享与回执诊断 查看插件
lizhao-doc-corrector 文档扫描、矫正、增强与识别 查看插件
lizhao-douyin-kit 抖音授权登录、内容分享与回执诊断 查看插件
lizhao-emu-detect 模拟器环境检测、风险评分与证据 查看插件
lizhao-float-window 悬浮窗、画中画、权限与诊断 查看插件
lizhao-gallery-pro 相册媒体分页、筛选、缩略图与导出 查看插件
lizhao-google-login Google 授权登录、会话管理与脱敏诊断 查看插件
lizhao-hce-card NFC 虚拟卡、APDU 交互与 NDEF 标签模拟 查看插件
lizhao-health 健康数据授权、查询、统计与写入 查看插件
lizhao-http-server 本地 HTTP 服务、文件传输与实时通信 查看插件
lizhao-icon-pro SVG 图标组件、多主题与缓存 查看插件
lizhao-id-photo 证件照制作、尺寸换算、换底色与模板换装 查看插件
lizhao-img-eraser 图片去水印、局部修复与原生编辑器 查看插件
lizhao-live-activity 实时活动、系统胶囊与普通通知降级 查看插件
lizhao-live-photo 实况照片选取、展示预览与原件处理 查看插件
lizhao-map 高德地图、定位、地点搜索、路线规划与导航 查看插件
lizhao-meta Facebook 登录分享、应用事件与深链 查看插件
lizhao-nfc-pro NFC 标签读写、NDEF、IsoDep 与诊断 查看插件
lizhao-notify-pro 本地通知、点击动作、进度与定时提醒 查看插件
lizhao-novel-reader 原生小说阅读、仿真翻页与段落评论 查看插件
lizhao-office-view Office 与 PDF 文件预览、进度与缓存管理 查看插件
lizhao-pdf-pro PDF 阅读、签批、真实写回与页面处理 查看插件
lizhao-play-billing Google Play 商品购买、订阅、恢复与确认消耗 查看插件
lizhao-qq-share QQ 授权码登录、QQ 与 QQ 空间分享 查看插件
lizhao-qrcode 二维码生成、Logo 与样式配置、批量生成及导出 查看插件
lizhao-scan-pro 原生扫码、连续扫码、相册识别 查看插件
lizhao-serial-port 路径串口、USB 串口、多会话收发与诊断 查看插件
lizhao-share-plus 系统分享、远程文件下载后分享 查看插件
lizhao-smart-tts 系统 TTS、云端合成、听书方案 查看插件
lizhao-sqlite-pro 原生 SQLite、迁移、备份与诊断 查看插件
lizhao-sse-pro SSE、Line、JSONL 与 Raw 流式请求 查看插件
lizhao-tcp-pro TCP 客户端、服务端、多连接与诊断 查看插件
lizhao-usb-storage U 盘、移动硬盘文件浏览、读写与批量复制 查看插件
lizhao-video-editor 视频裁剪、压缩、取帧与 FFmpeg/FFprobe 查看插件
lizhao-video-feed 短视频上下滑、短剧选集与分页加载 查看插件
lizhao-video-player 原生视频播放器、清晰度与播放交互 查看插件
lizhao-video-thumb 视频封面、批量取帧与 Base64 返回 查看插件
lizhao-vpn-pro 企业 VPN、IKEv2、安全接入与脱敏诊断 查看插件
lizhao-wechat-kit 微信登录、分享、支付、小程序与客服 查看插件
lizhao-wecom 企业微信授权登录、内容分享与脱敏诊断 查看插件
lizhao-xhs-share 小红书图文视频分享与回执诊断 查看插件

隐私、权限声明

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

Android 和 HarmonyOS 网络视频下载取帧使用 INTERNET 权限;本地视频取帧不主动申请相册权限,用户通过 chooseVideo 等系统选择器授权后读取所选视频

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

默认仅在本机读取视频文件并生成本地缩略图缓存,不上传视频、不上传缩略图、不采集用户数据

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

无广告

暂无用户评论。