更新记录
1.0.0(2026-04-11) 下载此版本
初次提交
平台兼容性
uni-app x(4.64)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | 5.1 | 13 | √ | × |
laoqianjunzi-ffmpeg
支持情况
| 平台 | 状态 | 说明 |
|---|---|---|
| app-android | 可执行 | 基于 FFmpegKit 原生库,支持 ffmpeg / ffprobe / 媒体信息读取 |
| app-ios | 可执行 | 基于 FFmpegKit 原生库,支持 ffmpeg / ffprobe / 媒体信息读取 |
| app-harmony | 可执行 | 基于 @sj/ffmpeg,支持 ffmpeg / ffprobe,媒体信息通过 ffprobe JSON 命令封装 |
| web | 占位实现 | 为了保证编译通过,提供统一声明与空实现,默认返回 unsupported: true |
| mp-weixin | 占位实现 | 为了保证编译通过,提供统一声明与空实现,默认返回 unsupported: true |
安装后导入
import {
runCommand,
runProbeCommand,
readMediaProfile,
abortTask,
abortAllTasks,
queryTaskList,
resolveLocalPath,
executeFFmpeg,
executeFFprobe,
getMediaInformation,
UTSFFmpeg,
UTSFFprobe
} from '@/uni_modules/laoqianjunzi-ffmpeg'
两套调用方式
1. 新的函数式入口
runCommand
执行 FFmpeg 命令。
const inputPath = '/static/demo.mp4'
const outputPath = resolveLocalPath('_doc/output/crop.mp4')
const command = `-i "${inputPath}" -vf crop=300:300:10:10 -preset ultrafast "${outputPath}"`
runCommand(
command,
(res : UTSJSONObject) => {
console.log('finish', res)
},
(res : UTSJSONObject) => {
console.log('progress', res)
},
(res : UTSJSONObject) => {
console.log('start', res)
},
(res : UTSJSONObject) => {
console.log('log', res)
}
)
完成回调里常见字段:
sessionId:任务编号returnCode:0成功,255通常表示取消,其它值表示失败state:函数式调用下返回数字状态码stateLabel:字符串状态,例如RUNNING、COMPLETEDcommand:原始命令output/allLogsAsString:命令输出platform:当前实际平台unsupported:占位平台会返回true
runProbeCommand
执行 FFprobe 命令。
runProbeCommand(
'-i /sdcard/test.mp4',
(res : UTSJSONObject) => {
console.log('probe finish', res)
},
(res : UTSJSONObject) => {
console.log('probe log', res)
}
)
readMediaProfile
读取媒体信息。
readMediaProfile(
'/static/demo.mp4',
(res : UTSJSONObject) => {
console.log('media info', res)
const info = res['info'] as UTSJSONObject
const allProperties = info['allProperties'] as UTSJSONObject
console.log('allProperties', allProperties)
},
(res : UTSJSONObject) => {
console.log('media log', res)
},
5000
)
abortTask / abortAllTasks / queryTaskList / resolveLocalPath
abortTask(1)
abortAllTasks()
const sessions = queryTaskList()
console.log('sessions', sessions)
const targetPath = resolveLocalPath('_doc/output/demo.mp4')
console.log('targetPath', targetPath)
说明:
- Android / iOS 的
abortTask传sessionId - Harmony 既支持
sessionId,也兼容传原始命令字符串去匹配任务 - Web / 微信小程序只做占位,不会真的启动编码任务
路径建议
- 输入文件可直接传绝对路径,或
'/static/xxx.mp4' - 输出文件建议先走
resolveLocalPath(),确保目标目录存在 - Android / iOS 会自动补全应用沙盒内相对路径
- Harmony / Web / 微信小程序不主动创建目录,建议业务层自己约束输出路径
多端差异说明
Android / iOS
- 使用原生 FFmpegKit
- 支持命令执行、日志、统计信息、媒体信息获取、取消任务、查询任务
Harmony
- 使用
@sj/ffmpeg - 通过内部任务表维护
sessionId readMediaProfile本质上是拼装ffprobe -v quiet -print_format json -show_format -show_streams命令后解析 JSON 输出
Web / 微信小程序
- 当前仅做编译兼容
- 所有导出函数都存在,调用后会回调一份
unsupported: true的结果对象 - 这样可以避免这些平台因为缺少实现文件而编译报错
注意事项
- 不同平台的 FFmpeg 原生库能力并不完全一致,同一条命令在不同系统上的表现可能不同
- Android / iOS 若涉及相册、外部存储等路径,请自行处理业务权限
- Harmony 端命令分词已经做了基础引号处理,但极端复杂 shell 表达式仍建议提前整理成简单参数
- Web / 微信小程序如果后续需要真正执行 FFmpeg,需要额外接入对应平台的实现引擎,本插件当前只保留统一接口层

收藏人数:
https://gitee.com/laoqianjunzi/laoqianjunzi-ffmpeg
下载插件并导入HBuilderX
下载示例项目ZIP
赞赏(0)
下载 1127
赞赏 2
下载 11555168
赞赏 1904
赞赏
京公网安备:11010802035340号