我们如何将动画/简单图像作为顶层添加到视频中并将其导出为Android中的单个视频?

时间:2013-05-13 08:08:41

标签: android video java-native-interface

我需要将图片合并为视频作为叠加层并导出。我已经找到了使用javacv从图像创建视频的方法,但没有发现任何jar或库将图像添加为现有视频的叠加层,一些链接建议使用FFMPEG和JNI来实现此目的但遗憾的是我对JNI一无所知。他们在IOS中使用avfoundation框架来实现同样的目标。

enter image description here

上面的图片是我的要求的复制品,如果任何人可以指导我正确的方向并为我提供一些有用的东西,我将不胜感激。

到目前为止我所取得的成就是: 1)编译的FFMPEG。 2)生成的.so文件 3)编译并能够运行Hello Jni项目。

我要搜索的是: 1)将视频分割成帧。 2)将我的叠加图像与视频帧合并 3)用音频重新创建视频。

而且我知道JNI是实现这一目标的唯一方法,所以搜索了很多,但没有找到任何好的JNI开始。我不是要求整个代码,但是如果有人可以通过一些好的教程或博客指出我会有很大的帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

实现此目的的方法就像你说的那样 - 合并视频编解码器并用它来重新构图。

  1. 解码原始视频
  2. 在原始视频帧上绘制叠加层
  3. 再次对帧进行编码。
  4. 将FFMPEG与JNI一起使用是一个显而易见的解决方案,但如果您发现任何其他可以用纯Java实现相同功能的编解码器库,它也会起作用。

    不了解JNI?那是时候学习它=)

    学习参考资料:

    1. 您文件系统上的NDK文档:http://developer.android.com/tools/sdk/ndk/index.html#Docs

    2. JNI - http://192.9.162.55/docs/books/jni/html/jniTOC.html

    3. 适用于Android的FFMPEG - 有许多教程,许多源代码树都包含一个现成的构建环境。 您可以关注它们,也可以单独执行它 - 只要您了解NDK环境并且可以阅读makefile。 这是一个示例:http://vec.io/posts/how-to-build-ffmpeg-with-android-ndk

    4. 使用FFMpeg编码\解码帧 - 遗憾的是,这里没有很好的最新教程,有API文档:http://ffmpeg.org/doxygen/trunk/index.html

    5. 混合位图 - 使用Android的Canvas基础架构,或者只是手动复制像素,并根据alpha值进行混合。

    6. 警告 - 这是一个复杂的构建库,在尝试使用NDK项目之前,您最好先尝试更简单的NDK项目。