所以开始吧...我试图使用ffmpeg将一组图像编译成Android上的视频。
我已经在线阅读了各种教程,并且已经能够为Android编译lib并且仍然需要项目运行。 现在使用的回购可以在这里找到:https://github.com/Batterii/android-ffmpeg-x264
我对setttings.sh做了一些调整,只是为了纠正ndk的位置。除此之外,我按照说明进行操作,似乎完美无瑕。
之后,我将“Project”项目转换为Android stdio库模块。
我没有得到任何编译错误,也没有得到任何运行时错误,或者我可以检测到的任何其他错误......在logcat上没什么......但我绝对没有得到任何视频out.mp4。
在特定活动的onCreate中,我正在运行此代码:
Videokit vk = new Videokit();
vk.run(new String[]{"ffmpeg", "-r", "1/5", "-i", "%d.jpg", "-c:v", "libx264", "-r", "30", "-pix_fmt", "yuv420p", project.getProjectDirectory() + "/out.mp4"});
此命令取自此处的命令行示例: https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images
提前感谢所有花时间浏览这篇文章的人...我对此感到非常困惑,因为我找不到任何错误,也没有视频...... 感谢
=============================================== =======================
原来它实际上并没有正确编译......但我找到了一些东西。 这是项目的Eclipse版本的make文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := videokit
# These need to be in the right order
FFMPEG_LIBS := $(addprefix ffmpeg/, \
libavdevice/libavdevice.a \
libavformat/libavformat.a \
libavfilter/libavfilter.a \
libavcodec/libavcodec.a \
libswscale/libswscale.a \
libavutil/libavutil.a \
libswresample/libswresample.a \
libpostproc/libpostproc.a )
# ffmpeg uses its own deprecated functions liberally, so turn off that annoying noise
LOCAL_CFLAGS += -g -Iffmpeg -Ivideokit -Wno-deprecated-declarations
LOCAL_LDLIBS += -llog -lz $(FFMPEG_LIBS) x264/libx264.a
LOCAL_SRC_FILES := ffmpeg/cmdutils.c ffmpeg/ffmpeg.c videokit/uk_co_halfninja_videokit_Videokit.c
include $(BUILD_SHARED_LIBRARY)
以下是gradle为我自动生成的make文件...感谢Android Studio ...
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := videokit
LOCAL_CFLAGS := -g -Isrc/main/jni/ffmpeg -Isrc/main/jni/videokit -Wno-deprecated-declarations
LOCAL_LDLIBS := \
-lffmpeg/libavformat/libavformat.a \
-lffmpeg/libavcodec/libavcodec.a \
-lffmpeg/libswresample/libswresample.a \
-lffmpeg/libavfilter/libavfilter.a \
-lffmpeg/libpostproc/libpostproc.a \
-lffmpeg/libavdevice/libavdevice.a \
-lx264/libx264.a \
-lffmpeg/libavutil/libavutil.a \
-llog \
-lz \
-lffmpeg/libswscale/libswscale.a \
LOCAL_SRC_FILES := \
Project/Module/src/main/jni/ffmpeg/cmdutils.c \
Project/Module/src/main/jni/ffmpeg/ffmpeg.c \
Project/Module/src/main/jni/videokit/com_t10_project_util_FfmpegHelper.c \
LOCAL_C_INCLUDES += Project/Module/src/main/jni/ffmpeg/cmdutils.c
LOCAL_C_INCLUDES += Project/Module/src/main/jni/ffmpeg/ffmpeg.c
LOCAL_C_INCLUDES += Project/Module/src/main/jni/videokit/com_t10_project_util_FfmpegHelper.c
LOCAL_C_INCLUDES += Project/Module/src/arm/jni
LOCAL_C_INCLUDES += Project/Module/src/debug/jni
LOCAL_C_INCLUDES += Project/Module/src/armDebug/jni
include $(BUILD_SHARED_LIBRARY)
最后,这是我的build.gradle
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion '19.0.1'
defaultConfig {
minSdkVersion 14
targetSdkVersion 19
versionCode 1
versionName "1.0"
ndk {
moduleName "videokit"
stl "stlport_shared"
ldLibs "log", "z",
"ffmpeg/libavdevice/libavdevice.a",
"ffmpeg/libavformat/libavformat.a",
"ffmpeg/libavfilter/libavfilter.a",
"ffmpeg/libavcodec/libavcodec.a",
"ffmpeg/libswscale/libswscale.a",
"ffmpeg/libavutil/libavutil.a",
"ffmpeg/libswresample/libswresample.a",
"ffmpeg/libpostproc/libpostproc.a",
"x264/libx264.a"
cFlags "-g -Isrc/main/jni/ffmpeg -Isrc/main/jni/videokit -Wno-deprecated-declarations"
}
}
sourceSets.main {
jniLibs.srcDir 'src/main/libs'
jni.srcDirs = ['src/main/jni/ffmpeg/cmdutils.c',
'src/main/jni/ffmpeg/ffmpeg.c',
'src/main/jni/videokit/com_t10_project_util_FfmpegHelper.c']
}
productFlavors {
x86 {
versionCode Integer.parseInt("6" + defaultConfig.versionCode)
ndk {
abiFilter "x86"
}
}
mips {
versionCode Integer.parseInt("4" + defaultConfig.versionCode)
ndk {
abiFilter "mips"
}
}
armv7 {
versionCode Integer.parseInt("2" + defaultConfig.versionCode)
ndk {
abiFilter "armeabi-v7a"
}
}
arm {
versionCode Integer.parseInt("1" + defaultConfig.versionCode)
ndk {
abiFilter "armeabi"
}
}
fat
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.android.support:support-v4:19.0.0'
compile fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
}
正如您所看到的,我的build.gradle生成的内容非常接近原始内容......但不一样。当我尝试运行/编译它时,gradle吐出来
Executing tasks: [:Project:assembleArmDebug]
:Project:compileArmDebugNdkcc1: warning: Project/Module/src/main/jni/ffmpeg/cmdutils.c: not a directory [enabled by default]
cc1: warning: Project/Module/src/main/jni/ffmpeg/ffmpeg.c: not a directory [enabled by default]
cc1: warning: Project/Module/src/main/jni/videokit/com_t10_project_util_FfmpegHelper.c: not a directory [enabled by default]
In file included from Project/Module/src/main/jni/ffmpeg/cmdutils.c:32:0:
Project/Module/src/main/jni/ffmpeg/libavformat/avformat.h:82:32: fatal error: libavcodec/avcodec.h: No such file or directory
compilation terminated.
make: *** [Project/Module/build/ndk/arm/debug/obj/local/armeabi/objs/videokit/Project/Module/src/main/jni/ffmpeg/cmdutils.o] Error 1
FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':Project:compileArmDebugNdk'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
android-ndk-r9d/ndk-build NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=Project/Module/build/ndk/arm/debug/Android.mk APP_PLATFORM=android-19 NDK_OUT=Project/Module/build/ndk/arm/debug/obj NDK_LIBS_OUT=Project/Module/build/ndk/arm/debug/lib APP_STL=stlport_shared APP_ABI=armeabi
Error Code:
2
Output:
cc1: warning: Project/Module/src/main/jni/ffmpeg/cmdutils.c: not a directory [enabled by default]
cc1: warning: Project/Module/src/main/jni/ffmpeg/ffmpeg.c: not a directory [enabled by default]
cc1: warning: Project/Module/src/main/jni/videokit/com_t10_project_util_FfmpegHelper.c: not a directory [enabled by default]
In file included from Project/Module/src/main/jni/ffmpeg/cmdutils.c:32:0:
Project/Module/src/main/jni/ffmpeg/libavformat/avformat.h:82:32: fatal error: libavcodec/avcodec.h: No such file or directory
compilation terminated.
make: *** [Project/Module/build/ndk/arm/debug/obj/local/armeabi/objs/videokit/Project/Module/src/main/jni/ffmpeg/cmdutils.o] Error 1
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 8.184 secs
我现在已经搞乱了几个小时,而且几乎每次,我都在大吼大叫,因为它无法找到一些文件。我开始认为可能是因为我的LOCAL_LDLIBS与原来的顺序不一样......?我不完全确定......有没有其他人有任何想法......?