更新记录

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:任务编号
  • returnCode0 成功,255 通常表示取消,其它值表示失败
  • state:函数式调用下返回数字状态码
  • stateLabel:字符串状态,例如 RUNNINGCOMPLETED
  • command:原始命令
  • 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 的 abortTasksessionId
  • 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,需要额外接入对应平台的实现引擎,本插件当前只保留统一接口层

隐私、权限声明

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

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

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

许可协议

MIT协议