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

Rav*_*rma 7 video java-native-interface android

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

在此输入图像描述

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

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

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

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

谢谢!!

Sir*_*get 1

完成此操作的方法就像您所说的那样 - 合并视频编解码器并使用它来重新组合视频。

  1. 解码原始视频
  2. 在原始视频帧上绘制叠加层
  3. 再次对帧进行编码。

将 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 值进行混合。

警告 - 这是一个构建起来很复杂的库,在尝试这个之前,您最好尝试一下更简单的 NDK 项目。