我需要将图片合并为视频作为叠加层并导出。我已经找到了使用javacv从图像创建视频的方法,但没有发现任何jar或库将图像添加为现有视频的叠加层,一些链接建议使用FFMPEG和JNI来实现此目的但遗憾的是我对JNI一无所知。他们在IOS中使用avfoundation框架来实现同样的目标。
上面的图片是我的要求的复制品,如果任何人可以指导我正确的方向并为我提供一些有用的东西,我将不胜感激。
到目前为止我所取得的成就是: 1)编译的FFMPEG。 2)生成的.so文件 3)编译并能够运行Hello Jni项目。
我要搜索的是: 1)将视频分割成帧。 2)将我的叠加图像与视频帧合并 3)用音频重新创建视频。
而且我知道JNI是实现这一目标的唯一方法,所以搜索了很多,但没有找到任何好的JNI开始。我不是要求整个代码,但是如果有人可以通过一些好的教程或博客指出我会有很大的帮助。
谢谢!
答案 0 :(得分:1)
实现此目的的方法就像你说的那样 - 合并视频编解码器并用它来重新构图。
将FFMPEG与JNI一起使用是一个显而易见的解决方案,但如果您发现任何其他可以用纯Java实现相同功能的编解码器库,它也会起作用。
不了解JNI?那是时候学习它=)
学习参考资料:
您文件系统上的NDK文档:http://developer.android.com/tools/sdk/ndk/index.html#Docs
JNI - http://192.9.162.55/docs/books/jni/html/jniTOC.html
适用于Android的FFMPEG - 有许多教程,许多源代码树都包含一个现成的构建环境。 您可以关注它们,也可以单独执行它 - 只要您了解NDK环境并且可以阅读makefile。 这是一个示例:http://vec.io/posts/how-to-build-ffmpeg-with-android-ndk
使用FFMpeg编码\解码帧 - 遗憾的是,这里没有很好的最新教程,有API文档:http://ffmpeg.org/doxygen/trunk/index.html
混合位图 - 使用Android的Canvas基础架构,或者只是手动复制像素,并根据alpha值进行混合。
警告 - 这是一个复杂的构建库,在尝试使用NDK项目之前,您最好先尝试更简单的NDK项目。