Android , Java - 使用位图帧渲染视频以反转视频(Xuggler)

2022-09-04 21:58:45

我没有 视频帧 在 中。我已使用视频文件(.mp4)的方法访问此帧。ArrayList<Bitmap>MediaMetadataRetriever.getFrameAtTime()

我反转数组列表中帧的顺序。现在使用这个反向排序的帧队列,我想渲染一个视频,所以它会被反转(我希望我走在正确的轨道上)。

创建该视频后,我还想将其保存到SD卡。

如何做到这一点?或者der是用java反转视频的任何其他方法吗?

编辑1:(***使用xugler*)**

我尝试使用xugler...我尝试使用它.jar文件。但它抛出了一些错误。

[2012-08-18 00:29:16 - xugglertest2] The library 'xuggle-xuggler-5.2.jar' contains native libraries that will not run on the device.
    [2012-08-18 00:29:16 - xugglertest2]  The following libraries were found:
    [2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/i686-pc-linux-gnu/libxuggle-ferry.so
    [2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/i686-pc-linux-gnu/libxuggle-xuggler-io.so
    [2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/i686-pc-linux-gnu/libxuggle-xuggler.so
    [2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/i686-pc-linux-gnu/libxuggle.so
    [2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/x86_64-pc-linux-gnu/libxuggle-ferry.so
    [2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/x86_64-pc-linux-gnu/libxuggle-xuggler-io.so
    [2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/x86_64-pc-linux-gnu/libxuggle-xuggler.so
    [2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/x86_64-pc-linux-gnu/libxuggle.so

我该怎么办?

我复制了 xuggler-xuggler-5.4.jar 在项目的 libs 文件夹中,然后将其添加到构建路径中。我做对了吗?



编辑2:(使用ffmpeg)
我已经在ubuntu平台上为Android编译了ffmpeg
因为在这里我得到了根据文档编译的文件。
现在任何人都可以告诉我如何在Android应用程序中使用这些编译后的文件?我到底应该如何处理这些文件??
我没有找到任何合适的文档。任何帮助都将是gr8。


编辑3:(移植到机器人-ffmpeg)

嘿。。最后我在ubuntu上编译了ffmpeg,我得到了 libffmpeg.so。我成功地将其移植到机器人。libffmpeg.so 正在成功加载安卓活动。现在我只想测试一个简单的ffmpeg命令或程序。
你能建议我应该去哪里找它吗?你能给我一个示例命令来测试它吗?

感谢和问候


答案 1

您可以使用ffmpeg从图像组装视频。您可以通过以下几种方式在Java(Android)中集成ffmpeg(其中一种是通过以下方式直接运行它)

Runtime.getRuntime().exec("ffmpeg <options>");

),但可能一个好方法是通过Shuggler项目 - 它严重依赖ffmpeg。对于起点,这里有一组介绍教程,这里有一个完整的教程如何从图像序列中编码视频。这是大量的工作和阅读,但你需要的所有信息都在那里。祝你好运!


答案 2

关于您的 xuggler 用法,您的库版本不适用于您的特定设备,因为它包含为 x86_64 和 i686 平台编译的本机代码:

[2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/i686-pc-linux-gnu/
[2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/x86_64-pc-linux-gnu/

尝试使用为ARMv6编译的本机代码部分查找此库的版本(最常见的Android架构 - 包括较旧的设备,如果不想支持大约1-2年前的设备,ARMv7会更好)。

否则,您需要为ARM编译ffmpeg,并将其与Android NDK的支持一起使用。您需要用C / C++将一系列图像编码为特定文件,并使用JNI接口将其包装起来。您可以将 Java 数组传递给类方法的本机实现。

请参阅 SDK 示例中的 Android NDK 应用程序示例,了解如何在代码中使用 JNI


推荐