更新记录

1.0.0(2026-07-19)

首发:基于系统内置多媒体引擎的视频工具箱:视频缩略图 / 帧提取 / 元信息读取(路径进/路径出)+ 裁剪 / 拼接 / 转码 / 水印 / 场景切分 / 音频提取。


平台兼容性

uni-app x(5.14)

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

nex-video —— 高性能视频缩略图 / 帧提取

免额外原生库:能力基于系统内置多媒体引擎实现——无需附带任何第三方库,包体零负担、云打包无额外依赖。 仅支持 App 端(Android / iOS),H5 / 小程序无对应系统多媒体能力。

同一份 utssdk 插件同时支持 uni-app x(uvue)经典 uni-app(vue3),无需分叉。 全部「路径进 / 路径出」:读视频文件路径,缩略图写 JPEG 到目标路径,元信息直接返回结构体。

API

本插件共 9 个 JS API(2 个同步「路径进出」+ 7 个异步剪辑/分析):

JS API 签名 说明
videoThumbnail videoThumbnail(src, dest, timeMs, maxWidth, maxHeight): VideoThumbResult 取 timeMs 处一帧、等比缩到 ≤maxW×maxH(不放大)、存 JPEG(90) 到 dest
videoInfo videoInfo(src): VideoInfo 读时长 / 宽 / 高 / 旋转角 / 帧率 / 是否含音轨
videoTrim videoTrim(opts): Promise<VideoEditResult> 裁剪 [startMs, endMs) 一段到 dest(默认无损快通道,不重编码)
videoConcat videoConcat(opts): Promise<VideoEditResult> 顺序首尾拼接 ≥2 个视频到 dest
videoTranscode videoTranscode(opts): Promise<VideoEditResult> 转码/压缩:按目标分辨率/码率/帧率重新导出(省略项保持原值)
videoWatermark videoWatermark(opts): Promise<VideoEditResult> 把已渲染的 PNG 水印按归一化位置叠到视频
detectScenes detectScenes(opts): Promise<SceneResult> 场景/镜头切分:抽帧算灰度直方图差,输出切换点与连续场景段(本地,无 ML)
detectFaces detectFaces(opts): Promise<FaceDetectResult> 人脸检测:iOS 端真实现;Android 端为占位实现(返回空结果)
extractAudio extractAudio(opts): Promise<AudioExtractResult> 提取音频:copy 无损直拷音轨→.m4a(双端真实现)/ reencode 重编码为 AAC

异步 API(trim/concat/transcode/watermark/detectScenes/detectFaces/extractAudio)入参为具名 options 对象(含可选 onProgress(percent) 回调),返回 Promise,签名与类型以 interface.uts 契约为准。

类型

// 缩略图结果(字段 camelCase)
type VideoThumbResult = { width: number; height: number; sizeBytes: number; costMs: number };

// 视频元信息(字段 camelCase)
type VideoInfo = {
  durationMs: number; width: number; height: number;
  rotation: number; frameRate: number; hasAudio: boolean;
};
  • videoThumbnailtimeMs(毫秒)取帧;maxWidth / maxHeight 为等比缩放上限框,只缩不放;输出固定 JPEG(质量 90)。取帧失败抛 Error
  • videoInfodurationMs 时长(毫秒);rotation ∈ 0 / 90 / 180 / 270;frameRate 帧率(fps);hasAudio 是否含音轨。

用法

import { videoThumbnail, videoInfo } from "@/uni_modules/nex-video";

// 选视频拿到 tempFilePath 作 src(uni.chooseVideo)
const dest = "_doc/nex-video/thumb.jpg";
const thumb = videoThumbnail(src, dest, 1000, 320, 320); // 取第 1 秒帧,缩到 ≤320×320
// thumb: { width, height, sizeBytes, costMs }

const info = videoInfo(src);
// info: { durationMs, width, height, rotation, frameRate, hasAudio }

限制

  • 仅 App 端(Android / iOS);H5 / 各家小程序不支持。
  • 只读本地文件路径src 须为可读本地视频路径(如 uni.chooseVideotempFilePath),不支持远程 URL / buffer。
  • 缩略图固定存 JPEG(质量 90);timeMs 超时长时平台 codec 取最接近帧。

平台与调试边界

  • app-android / app-ios;H5、各家小程序不支持。
  • Android 真机调试需 HBuilderX ≥ 4.26(自定义调试基座)。
  • 最终 App 打包由 HBuilderX / @dcloudio CLI 完成。

隐私、权限声明

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

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

插件不采集任何数据。所有计算/处理均在本地完成,无任何网络请求、不发送数据到任何服务器。

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

暂无用户评论。