Java:我如何从一组图像中创建一部电影



我基本上有一个字节矩阵。每一行(表示字节[])表示一个图像。我如何用它创建一部电影(任何格式——avi、mpeg,等等),并将其保存为文件?每个图像可以是以下图像之一:

int JPEG    Encoded formats.
int NV16    YCbCr format, used for video.
int NV21    YCrCb format used for images, which uses the NV21 encoding format.
int RGB_565 RGB format used for pictures encoded as RGB_565.
int YUY2    YCbCr format used for images, which uses YUYV (YUY2) encoding format.
int YV12    Android YUV format: This format is exposed to software decoders and applications.

我可以选择任何我喜欢的格式,只要我能创作电影。

public void createMovie(byte[][] images) {
  // and ideas on what to write here?
}

我不需要实际的实现,只要让我知道这个想法以及我需要什么外部库(如果我需要的话)。

在创建电影(添加一些文本)之前,我还需要编辑一些图像(字节流)。我该怎么做?

解决方案需要"仅限Java"!没有外部程序,没有外部命令(但我可以使用外部jar)。

谢谢!

解决方案似乎是使用Mencoder(或者至少,这似乎是一个半流行的选择)。

这里有一个链接,专门针对Mencoder中的图像到电影功能。

至于在将文本编码为视频的一部分之前将其渲染到帧上,您可以使用Java2D的图像操作库预先简单地在图像顶部绘制文本。例如:

  • 通过ImageIO库的.read方法将图像加载到BufferedImage对象中
  • 使用Graphics2D的.drawString方法来呈现文本

这是一种方法,这个常见问题解答应该让你从Java2D、字体渲染等方面开始,并提供指向更多资源的指针。

ImageIO库还允许您读取/写入多种图像格式,有效地允许您从.jpg->BufferedImage->.png或任何需要的方式对图像进行转码,如果您想在转换过程中临时存储图像文件,和/或在为转换项目导入图像时将所有图像转换为单一格式,等等。

根据您想要支持的输出格式,您可能会执行类似的操作

public void createMovie(BufferedImage[] frames, String destinationFormat)

其中"destinationFormat"类似于"m4v"、"mpeg2"、"h.264"、"gif"等。

您听说过JMF(Java Media Framework)吗?从示例中可以找到以下示例:从(JPEG)图像列表生成电影文件

您可以尝试使用此gif编码器制作gif。

我编写了一个MJPEG读写器,用于在Java小程序中播放视频。MJPEG不是最先进的视频格式,但它非常容易操作。该代码是我的计算机视觉库BoofCV的一部分,但你可以出于自己的目的删除这一类。

  1. 下载此文件:CreateMJpeg.java
  2. 看看主要功能。它读取jpeg图像的地方放上你的byte[]数据,但你需要首先将其转换为jpeg
    • 您可以使用标准的java库将其转换为jpeg
  3. 运行修改后的代码并欣赏您的电影

很抱歉,它不是一个更用户友好的格式,但至少你不需要像其他一些解决方案那样干扰JNI。

最新更新