x-ffmpeg-s 音视频处理
App 三端音视频处理:剪辑、拼接、压缩、转码、抽帧、抽音、静音、合并、缩放、旋转、水印、滤镜。输出请写到 getCacheDir() 等可写目录,路径不要带 file://。
Web / 微信不能跑处理任务。 getMediaInfo 可用,其它任务返回不支持。
兼容性
| Harmony | IOS | Android | WEB | 小程序 |
|---|---|---|---|---|
| 支持 | 支持 | 支持 | 不支持 | 不支持 |
调用
ts
import { getCacheDir, getMediaInfo, cut, cancel } from "@/uni_modules/x-ffmpeg-s"
getMediaInfo({
path: videoPath,
success: (res) => {
console.log(res.info)
}
})
cut({
input: videoPath,
output: getCacheDir() + "/cut-" + Date.now() + ".mp4",
startTime: 2,
duration: 4,
videoCodec: "copy",
audioCodec: "copy",
onProgress: (p) => {
console.log(p)
},
success: (res) => {
console.log(res.output, res.cancelled)
}
})
cancel()方法
| 名称 | 需要 | 说明 |
|---|---|---|
| getCacheDir | 无 | 返回可写缓存目录,输出路径建议拼在这里 |
| getRuntimeInfo | 无 | 返回当前平台与编码器信息 |
| getMediaInfo | path | 读媒体信息,Web / 微信也可用 |
| cut | input、output,可选 startTime、duration、编码器 | 按时间裁剪 |
| concat | inputs(至少 2 个)、output | 拼接多个文件 |
| extractFrame | input、output(.jpg/.png)、frameTime | 抽一帧封面 |
| extractAudio | input、output | 抽出音轨 |
| muteVideo | input、output | 去掉视频声音 |
| mergeVideoAudio | input(视频)、audio、output | 把音频合进视频 |
| mergeTimed | input、audio、output、audioStart,可选 audioDuration | 从指定秒开始贴一段音乐 |
| scale | input、output、width?、height? | 缩放 |
| rotateVideo | input、output、rotate(0/90/180/270) | 旋转 |
| compress | input、output,可选码率 | 压缩 |
| transcode | input、output,可选编码器 | 转码 |
| watermark | input、watermark、output,可选 position、margin、opacity | 加图片水印,文字水印不可用 |
| filterVideo | input、output,可选 filter、audioFilter | 自定义滤镜链 |
| cancel | 无 | 取消当前任务,成功回调里 cancelled=true |
多数任务共用字段:
| 字段 | 说明 | 默认 |
|---|---|---|
| input / output | 绝对路径 | 必填 |
| startTime | 起始秒 | 0 |
| duration | 时长秒,不传则到结尾 | 到结尾 |
| width / height | 目标尺寸,0 为等比 | 原尺寸 |
| rotate | 0 / 90 / 180 / 270 | 0 |
| flip | horizontal / vertical | - |
| fps | 帧率 | 原帧率 |
| videoCodec / audioCodec | 编码器,copy 为流拷贝 | 按扩展名 |
| videoBitrate / audioBitrate | 如 2M / 800k,不要小数 | - |
| onProgress / success / fail / complete | 回调 | - |
concat:inputs(至少 2 个)、output。
extractFrame:input、output(.jpg / .png)、frameTime 必填。
mergeVideoAudio:input(视频)、audio、output。
mergeTimed:input、audio、output、audioStart 必填,audioDuration 默认整段音乐。
watermark:input、watermark(png/jpg)、output、position(默认 bottom-right)、margin(20)、scale(0 原尺寸)、opacity(1)、startTime / duration。
filterVideo:filter 视频滤镜链,audioFilter 音频滤镜链。
XFfmpegTaskResult:output、size、durationMs、cancelled。cancel() 后仍走 success,且 cancelled=true。
文字水印不可用,请用 png + watermark。
平台差异
- 仅 Android / iOS / 鸿蒙可执行处理任务。
- 输出必须是可写绝对路径。
版本
版权归https://xui.tmui.design你不得修改及二次开发,仅供TMUI4会员商用使用。不得转给非VIP会员使用,一经查实数倍赔偿,并追究法律责任。
更新日志
1.0.0(2026-08-01)
- 基于 FFmpeg 7.1 + x264 交叉编译三平台原生依赖包。
- Android:NDK 30 编译 arm64-v8a,AAR 内置 8 个 .so(含 MediaCodec 硬解)。
- HarmonyOS:OHOS NDK 编译 arm64-v8a,HAR 内置 8 个 .so,NAPI + Worker 架构。
- iOS:Xcode 编译 arm64 静态框架 XFfmpegCore.framework,ObjC++ + Swift 边界。
- 提供剪辑、拼接、压缩、转码、抽帧、抽音、静音、合并、缩放、旋转、翻转、媒体信息探测、取消等完整 API。
- UTS 层统一 DCloud 三回调风格(success/fail/complete),耗时任务支持进度回调。
- 编写交叉编译脚本与构建文档(native-src/*/BUILDING.md)。
