更新记录

v1.0.0(2023-02-01)

第一版支持Android,后续更新支持iOS,欢迎下载


平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 12.0 armeabi-v7a:支持,arm64-v8a:支持,x86:支持 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


WYR-EasyFFMpeg

此插件完整集成了FFmpeg FFprobe,和官方Video不冲突,可以用于处理绝大部分视频编辑问题,比如视频裁剪,视频格式转换,截取视频中部分片段为gif动图,视频转音频,图片转视频,加水印,获取视频封面截图,录制视频然后进行编码转换等功能。还有很多功能等待您去发现,FFmpeg已完整集成在Android端,IOS版本会在后面版本中发布,敬请期待,IOS FFmpeg版本的插件已经提上日程,有问题可以给我发邮箱1169824159@qq.com

使用说明

//引入插件
const ffmpeg = uni.requireNativePlugin('WYR-EasyFFMpeg');

//同步运行FFmpeg命令
//cmd就是你要执行的命令,比如要执行ffmpeg -version
//那么cmd就是-version
const res = ffmpeg.execute(cmd);
console.log(res);

//返回
/*
{
    code: 0,//0表示成功
    msg: 'Command execution completed successfully'
}
*/

//异步运行FFmpeg命令
ffmpeg.executeAsync(cmd, res => {
    console.log(res);
});

//终止命令
ffmpeg.cancel();

//运行FFprobe命令
res = ffmpeg.probeExecute(cmd);
console.log(res);

//获取媒体文件信息
res = ffmpeg.getMediaInformation(filepath);
console.log(res);

注意,文件路径一定要传绝对路径

举个例子

/**
 * 下载视频然后对某一时间抽帧成jpg
 * @param video_url 要下载的视频
 * @returns {string}
 */
getJpegFromVideo(video_url) {
    uni.downloadFile({
        url: video_url,
        success: res => {
            if (res.statusCode === 200) {//下载成功
                //这里是关键,要把下载的本地临时路径转换成绝对路径
                const tempFile = plus.io.convertLocalFileSystemURL(res.tempFilePath);
                //文件名
                const fileName = this.getFileName(tempFile);
                //文件名.jpg
                const jpgPath = fileName + '.jpg';

                //执行抽帧命令
                //抽取视频第10秒,输出jpg
                const cmd = `-ss 00:00:10 -i ${tempFile} -r 1 -vframes 1 ${jpgPath}`;
                const output = ffmpeg.execute(cmd);

                if (output.code === 0) {
                    //抽帧成功,然后做自己的处理逻辑
                } else {
                    console.log(output);
                }
            }
        },
        fail: err => {
            console.log(err);
        }
    });
}

/**
 * 获取文件名
 * @param name
 * @returns {string}
 */
getFileName(name) {
    return name.substring(0, name.lastIndexOf("."))
}

参考命令

提取音频:

-i input.mp4 -acodec copy -vn out.aac

提取视频:

-i input.mp4 -vcodec copy -an out.h264

格式转换:

-i input.mp4 -vcodec copy -acodec copy out.flv 

音频合并:

-i input.h264 -i input.aac -vcodec copy -acodec copy out.mp4 

抽取yuv数据:

-i input.mp4 -an -c:v rawvideo -pixel_format yuv420p out.yuv 

添加水印:

-i input.mp4  -vf "movie=logo.png,scale=64:48[watermask];[in][watermask] overlay=30:10 [out]" out.mp4

视频转gif:

-i input.mp4 -ss 00:00:00 -t 10 out.gif

更多命令参考

FFmpeg文档汇总:https://ffmpeg.org/documentation.html

FFmpeg filters文档:https://ffmpeg.org/ffmpeg-filters.html

隐私、权限声明

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

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

插件不采集任何数据

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

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问