我目前正在制作一个简单的Androidapp,将SD卡上的视频转换为gif。
我知道ffmpeg是处理转换的最有效的方法。但我不知道如何将ffmeg添加到我的android工作室项目中。
发布于 2014-10-23 14:23:19
对于JNI,NDK/您可以从这开始。
然后检查用户(ph0b)所以发布关于JNI/NDK的文章
那么android上的ffmpeg是一个相当高的要求,你需要一些时间。
在github上搜索‘android’,寻找最高的社区评级(明星、克隆人),并提供良好的构建说明。
国际海事组织-“监护计划”和“半忍者”都很好。
您可以在android之外花费一些时间(只需在VM上构建ffmpeg静态库),因此您只熟悉ffmpeg上的配置/构建。
然后,进入完整的安卓工作室,使用ph0b集成技术运行NDK/ builds构建,在他的博客文章中使用对gradle的修改。
发布于 2017-04-03 02:18:30
在应用程序的build.gradle添加中
compile 'com.writingminds:FFmpegAndroid:0.3.2'之后,添加一个按钮,用于选择视频路径,并在按钮的onClick方法中创建一个意图,帮助用户从手机中选择视频。
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("video/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Video"), PICK_CONTACT_REQUEST);现在使用下面的方法返回上面的结果
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we're responding to
if (requestCode == PICK_CONTACT_REQUEST) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
Uri selectedImageUri = data.getData();
// OI FILE Manager
String filemanagerstring = selectedImageUri.getPath();
// MEDIA GALLERY
String selectedImagePath =getPath(selectedImageUri);
if (selectedImagePath != null) {
String[] cmd = {"-i"
, selectedImagePath
, "Image.gif"};
conversion(cmd);
}
}
}
}定义getPath方法以获取所选视频的路径
public String getPath(Uri uri) {
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery(uri, projection, null, null, null);
if (cursor != null) {
// HERE YOU WILL GET A NULLPOINTER IF CURSOR IS NULL
// THIS CAN BE, IF YOU USED OI FILE MANAGER FOR PICKING THE MEDIA
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} else
return null;
}然后创建一个将视频转换为gif的方法。
public static void conversion(String[] cmd) {
FFmpeg ffmpeg = FFmpeg.getInstance(this);
try {
// to execute "ffmpeg -version" command you just need to pass "-version"
ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {
@Override
public void onStart() {
}
@Override
public void onProgress(String message) {
}
@Override
public void onFailure(String message) {
}
@Override
public void onSuccess(String message) {
}
@Override
public void onFinish() {
}
});
} catch (FFmpegCommandAlreadyRunningException e) {
// Handle if FFmpeg is already running
e.printStackTrace();
}
}https://stackoverflow.com/questions/26483385
复制相似问题