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

标签 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 Material 作为起点。我不是要完整的代码,但如果有人可以通过一些好的教程或博客指出我,那将是很大的帮助。

谢谢!!

最佳答案

实现这一点的方法就像您所说的那样 - 合并一个视频编解码器并使用它来重新合成视频。

  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 项目。

关于android - 我们如何将动画/简单图像添加为视频的顶层并将其导出为 Android 中的单个视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16517416/

相关文章:

java - 在理解生成的 JNI 头文件方面需要帮助

android - 使用 atiout 库在 Android 中发送 AT 命令

Java:java.lang.UnsatisfiedLinkError 无法使用 JNI 调用 .cpp 文件中的 native 方法

android - 如何在 Android 中将波纹效果应用到 BottomSheets

android webview设置系统默认字体大小?

ios - AVURLAsset 找不到视频轨道

javascript - 静音 + 自动播放多个 vimeo 视频

android - 使用包装内容可绘制图像获取 ImageView 位置

java - 当前选择的变种 "arm-debug"使用了split apks,但是4个split apks都不兼容当前设备

html - html5支持的视频格式有哪些?