从android系列图像创建视频

从android系列图像创建视频,android,video,ffmpeg,android-mediacodec,jcodec,Android,Video,Ffmpeg,Android Mediacodec,Jcodec,我正在尝试用安卓系统中的一系列图像创建一个视频。 我遇到了这三个选项MediaCodec、使用ndk的ffmpeg和jcodec。有人能告诉我哪一个是最好的和最简单的吗。我没有找到任何合适的文档,所以有人可以发布他们的工作示例吗?如果您谈论的是API 4.3+,通常您需要从编码器获取输入曲面,将图像复制到曲面附带的纹理,放置正确的时间戳并将其发送回编码器。去做吧 fps (frames per second) * resulted video duration in seconds 时代。编码

我正在尝试用安卓系统中的一系列图像创建一个视频。
我遇到了这三个选项MediaCodec、使用ndk的ffmpeg和jcodec。有人能告诉我哪一个是最好的和最简单的吗。我没有找到任何合适的文档,所以有人可以发布他们的工作示例吗?

如果您谈论的是API 4.3+,通常您需要从编码器获取输入曲面,将图像复制到曲面附带的纹理,放置正确的时间戳并将其发送回编码器。去做吧

fps (frames per second) * resulted video duration in seconds
时代。编码器后的编码器比特流应该转到muxer,所以最后您将得到mp4文件。 它需要相当多的编码:)

我建议您尝试免费的英特尔Media Pack:


它有一个示例-JPEG替代效果,它允许从图像创建视频。其想法是拍摄一个虚拟视频(黑色视频和安静音频),并通过处理图像替换所有黑色帧。它可以很容易地增强为从一系列图像创建视频。我知道Google Play中的几个应用程序使用Media Pack制作相同的文件,FFmpeg可以实现这个任务。您首先需要在Android中编译ffmpeg库(请参阅本文“”)

您可以参考FFmpeg中的示例,了解如何实现任务


Android中的P>实现C++中的任务;然后使用JNI将C++代码集成到Android应用程序中。

< P>我尝试了Android的JCODEC 1.7。与其他两个选项相比,这是非常简单的。android软件包中有一个SequenceEncoder类,它接受位图实例并将它们编码为视频。我最终将这个类克隆到我的应用程序中,以覆盖一些设置,例如fps。JCodec的问题是性能很差——编码单个720x480像素帧只需45秒。我想在fullHD上制作timelapse视频,最初我认为任何编码器都可以,因为我不希望编码一帧需要超过一秒(我的应用程序中帧之间的最小间隔是3秒)。正如您可以猜测的那样,每帧45秒JCodec并不合适

我正在关注你的问题,寻找其他可能有用的答案

MediaCodec/MediaMuxer的方式似乎还可以,但它非常复杂。我需要学习很多关于OpenGL ES、视频格式和一些Android voodoo的知识,才能让这一切顺利进行。哦,这只适用于最新的手机4.3+。对于谷歌来说,这是一个真正的耻辱,因为他们都声称自己很出名。我发现了一些关于这个话题的讨论。存在两个子路径-OpenGL方式与设备无关。还有另一种方法涉及将RGB位图数据转码到YUV。YUV的特点是,它有3种口味,取决于设备HW-平面、半平面和半平面压缩(我不确定未来是否会出现第四种方式,所以…)

这里有两个关于OpenGL的有用链接

CTS试验-

许多类似CTS的测试-

其中两个似乎是相关和有用的

EncodeAndMuxTest- CameraToMpegTest-(我相信这是最接近我需要的,只需要了解所有OpenGL巫术,并将我的位图作为纹理填充到整个帧中,即投影、相机和不起作用的内容)

ffmpeg路由似乎也不够直接。C++中的一些东西从java中接受……我猜位图的一些奇怪的转换是字节[]/ByteBuffer将首先需要的- CPU密集和缓慢。实际上,我有JPEG字节[],但不确定这是否会对ffmpeg库有用。我不确定ffmpeg是否利用了GPU或其他硬件加速功能,因此它很可能会以每帧10秒的速度结束,并真正地烘烤手机。

查看我的