7

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

在此处输入图像描述

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

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

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

而且我知道 JNI 是实现这一目标的唯一方法,因此进行了很多搜索,但没有找到任何好的 JNI 东西可以开始。我不是要完整的代码,但如果有人能用一些好的教程或博客指出我,那将是很大的帮助。

谢谢!!

4

1 回答 1

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. FFMPEG for Android - 有许多教程和许多包含现成构建环境的源代码树。你可以跟随他们,也可以自己做——前提是你了解 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 项目。

于 2013-05-13T20:20:11.877 回答