代码拉取完成,页面将自动刷新
基于javacv 1.5.6版本进行封装处理,引入此依赖时默认带入javacv 1.5.6相关的依赖 目前仅支持 图片组转Mp4视频文件,且必须保证存储的文件夹不会受到分区存储的干扰。
//主依赖必须和so库版本一致,用以避免出现问题,引入越多安装包越大
//主要依赖,必须引入
implementation 'com.gitee.osard.cv-lib:cvlib:0.1.1'
//以下为so库,需要哪个引入哪个,至少引入一个,推荐“arm64-v8a 架构so库”能满足当前大部分手机的需求
//armeabi-v7a 架构so库
implementation 'com.gitee.osard.cv-lib:cvlib-arm:0.1.1'
//arm64-v8a 架构so库
implementation 'com.gitee.osard.cv-lib:cvlib-arm64:0.1.1'
//x86 架构so库
implementation 'com.gitee.osard.cv-lib:cvlib-x86:0.1.1'
//x86_64 架构so库
implementation 'com.gitee.osard.cv-lib:cvlib-x86_64:0.1.1'
工程的build.gradle文件添加
allprojects {
repositories {
google()
mavenCentral()
//jitpack 仓库
maven { url 'https://jitpack.io' }
}
}
APP的build.gradle文件添加
dependencies {
...
implementation 'com.gitee.osard.cv-lib:cvlib:0.1.1'
implementation 'com.gitee.osard.cv-lib:cvlib-arm64:0.1.1'
}
如果编译时出现.json文件冲突时,添加下面的代码到APP的build.gradle文件
android {
...
//解决JavaCV中文件重复问题,远程依赖时一般无需添加,工程依赖时必须添加
packagingOptions {
pickFirst 'META-INF/native-image/android-x86_64/jnijavacpp/jni-config.json'
pickFirst 'META-INF/native-image/android-x86_64/jnijavacpp/reflect-config.json'
pickFirst 'META-INF/native-image/android-x86/jnijavacpp/jni-config.json'
pickFirst 'META-INF/native-image/android-x86/jnijavacpp/reflect-config.json'
pickFirst 'META-INF/native-image/android-arm64/jnijavacpp/jni-config.json'
pickFirst 'META-INF/native-image/android-arm64/jnijavacpp/reflect-config.json'
pickFirst 'META-INF/native-image/android-arm/jnijavacpp/jni-config.json'
pickFirst 'META-INF/native-image/android-arm/jnijavacpp/reflect-config.json'
}
}
ImagesToVideoUtils.java工具类
/**
* 图片组转视频
* <p>
* 视频使用30帧率
* 每张图不停留
* 使用 “时间戳“ + ”.mp4” 作为文件名
* 固定MP4格式
* <p>
* 保存的文件名相同时将会进行线程等待,且只会保留最后一个视频
*
* @param savePath 视频保存的文件夹路径,要求可正常访问,不能是分区存储限制的文件夹
* @param imgPaths 图片文件全路径列表,按照顺序放入
* @param videoWidth 生成视频的宽度
* @param videoHeight 生成视频的高度
* @param listener 生成视频成功的回调
* @param failListener 生成视频失败的回调
*/
public static void convertMp4(String savePath,
List<String> imgPaths,
int videoWidth, int videoHeight,
CompleteListener listener,
FailListener failListener);
/**
* 图片组转视频
* <p>
* 视频使用30帧率
* 每张图不停留
* 固定MP4格式
* <p>
* 保存的文件名相同时将会进行线程等待,且只会保留最后一个视频
*
* @param savePath 视频保存的文件夹路径,要求可正常访问,不能是分区存储限制的文件夹
* @param saveName 文件名,未填写时使用 “时间戳“ + ”.mp4” 作为文件名
* @param imgPaths 图片文件全路径列表,按照顺序放入
* @param videoWidth 生成视频的宽度
* @param videoHeight 生成视频的高度
* @param listener 生成视频成功的回调
* @param failListener 生成视频失败的回调
*/
public static void convertMp4(String savePath,
String saveName,
List<String> imgPaths,
int videoWidth, int videoHeight,
CompleteListener listener,
FailListener failListener);
/**
* 图片组转视频
* <p>
* 每张图不停留
* 固定MP4格式
* <p>
* 保存的文件名相同时将会进行线程等待,且只会保留最后一个视频
*
* @param savePath 视频保存的文件夹路径,要求可正常访问,不能是分区存储限制的文件夹
* @param saveName 文件名,未填写时使用 “时间戳“ + ”.mp4” 作为文件名
* @param imgPaths 图片文件全路径列表,按照顺序放入
* @param videoWidth 生成视频的宽度
* @param videoHeight 生成视频的高度
* @param frameRate 生成视频的帧率,每秒几张图
* @param listener 生成视频成功的回调
* @param failListener 生成视频失败的回调
*/
public static void convertMp4(String savePath,
String saveName,
List<String> imgPaths,
int videoWidth, int videoHeight,
double frameRate,
CompleteListener listener,
FailListener failListener);
/**
* 图片组转视频
* <p>
* 视频固定MP4格式
* <p>
* 保存的文件名相同时将会进行线程等待,且只会保留最后一个视频
*
* @param savePath 视频保存的文件夹路径,要求可正常访问,不能是分区存储限制的文件夹
* @param saveName 文件名,未填写时使用 “时间戳“ + ”.mp4” 作为文件名
* @param imgPaths 图片文件全路径列表,按照顺序放入
* @param videoWidth 生成视频的宽度
* @param videoHeight 生成视频的高度
* @param frameRate 生成视频的帧率,每秒几张图
* @param stayFrame 生成视频时停留的帧,即每张图额外停留的帧数,小于等于1时为不停留
* @param listener 生成视频成功的回调
* @param failListener 生成视频失败的回调
*/
public static void convertMp4(String savePath,
String saveName,
List<String> imgPaths,
int videoWidth, int videoHeight,
double frameRate,
double stayFrame,
CompleteListener listener,
FailListener failListener);
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。