我需要将图像作为叠加层合并到视频中并导出。我找到了使用 javacv 从图像创建视频的方法但没有找到任何 jar 或库将图像添加为现有视频的叠加层,一些链接建议使用 FFMPEG 和 JNI 来实现这一点,但遗憾的是我对 JNI 没有任何了解。他们在 IOS 中使用 avfoundation 框架来实现相同的目的。
上图是我的要求的复制品,如果有人能指导我正确的方向并为我提供一些有用的东西作为开始,我们将不胜感激。
到目前为止,我取得的成就是: 1)编译FFMPEG。 2)生成.so文件 3) Hello Jni 工程编译运行。
我正在寻找的是: 1)将视频分割成帧。 2) 将我的叠加图像与视频帧合并 3) 用音频重新创建视频。
而且我知道 JNI 是实现此目标的唯一方法,因此进行了很多搜索,但没有找到任何好的 JNI Material 作为起点。我不是要完整的代码,但如果有人可以通过一些好的教程或博客指出我,那将是很大的帮助。
谢谢!!
最佳答案
实现这一点的方法就像您所说的那样 - 合并一个视频编解码器并使用它来重新合成视频。
- 解码原始视频
- 在原始视频帧上绘制叠加层
- 再次对帧进行编码。
将 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 项目。
关于android - 我们如何将动画/简单图像添加为视频的顶层并将其导出为 Android 中的单个视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16517416/