我正在尝试将一系列图像转换为视频。为此,我将FFmpeg添加到我的Android项目中。但是它没有正确地添加,所以我不能将类FFmpeg导入到代码中。在语句“int rc = FFmpeg.execute(command);“FFmpeg以红色突出显示。
我觉得图书馆有问题。你能给我给予个正确导入库的建议吗?
下面的我的清单文件
<?xml version="1.0" encoding="utf-8"?>
字符串
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.TimelapseLite"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
型
我的设置.gradle文件
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
型
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
型
} rootProject.name =“TimelapseLite”include ':app'
我的build.gradle文件
plugins {
id 'com.android.application'
}
android {
namespace 'ae.vpdev.timelapselite'
compileSdk 33
defaultConfig {
applicationId "ae.vpdev.timelapselite"
minSdk 26
targetSdk 33
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
型
}
依赖关系{
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.9.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'com.arthenica:mobile-ffmpeg-full:4.5.LTS'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
型
}
我在MainActivity中的代码
private void convertImagesToVideo() {
StringBuilder imageListFileContent = new StringBuilder();
for (Uri imageUri : selectedImages) {
imageListFileContent.append("file '").append(imageUri.getPath()).append("'\n");
}
try {
File imageListFile = new File(getCacheDir(), "image_list.txt");
FileWriter writer = new FileWriter(imageListFile);
writer.append(imageListFileContent.toString());
writer.flush();
writer.close();
File outputFile = new File(getExternalFilesDir(null), "output_video.mp4");
String outputFilePath = outputFile.getAbsolutePath();
String command = "-f concat -safe 0 -i " + imageListFile.getAbsolutePath() +
" -vf \"scale=-2:720\" -r 30 -c:v libx264 -pix_fmt yuv420p " + outputFilePath;
int rc = FFmpeg.execute(command);
if (rc == RETURN_CODE_SUCCESS) {
Log.d("FFmpeg", "Video conversion completed successfully");
// Now you can use the outputFilePath to play or share the video
} else {
Log.d("FFmpeg", "Video conversion failed");
}
} catch (IOException e) {
e.printStackTrace();
}
}
型
1条答案
按热度按时间1l5u6lss1#
我个人不喜欢添加完整的FFMPEG SDK,因为它会成倍地增加应用程序的大小,但是使用Arthenica's FFMPEG-KIT似乎是将FFMPEG引入项目的最简单方法
字符串
这个新的FFMPEG-KIT不仅减少了大小,而且命令执行速度更快,具有更好的异步支持和更容易的实现。
要使用,您只需导入
型
然后再进行以下操作:
型
这里
cmdString
是一个命令串,你的命令应该可以工作,但我遇到的唯一问题是我必须使用-y -i
而不是-f
,它似乎运行命令。