Java:如何从图像数组创建电影?

时间:2012-01-13 20:23:31

标签: java image movie avi mpeg

我基本上有一个字节矩阵。每行(意为byte [])表示图像。如何创建一个电影(任何格式 - 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)。

谢谢!

4 个答案:

答案 0 :(得分:8)

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

这是一个专门解决Mencoder中images-to-movies功能的链接。

至于在将帧文本作为视频的一部分进行编码之前将文本渲染到帧上,您可以使用Java2D的图像处理库来预先在图像上方绘制文本。例如:

这是一种方法,this FAQ应该让你开始使用Java2D,字体渲染等方面,并提供指向更多资源的指针。

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

根据您要支持的输出格式数量,您可能会执行类似

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

...其中“destinationFormat”类似于“m4v”,“mpeg2”,“h.264”,“gif”等。

答案 1 :(得分:5)

您是否听说过JMF(Java Media Framework),您可以在此示例中找到示例:Generating a Movie File from a List of (JPEG) Images

答案 2 :(得分:2)

您可以尝试使用此gif encoder制作一个gif。

答案 3 :(得分:1)

我写了一个MJPEG读写器,用于在Java applet中播放视频。 MJPEG不是最先进的视频格式,但它很容易操作。代码是我的计算机视觉库BoofCV的一部分,但你可以为了自己的目的而撕掉这一个类。

  1. 下载此文件:CreateMJpeg.java
  2. 看主要功能。在jpeg图像中读取你的byte []数据,但你需要先将其转换为jpeg。
    • 您可以使用标准java库将其转换为jpeg
  3. 运行修改后的代码并欣赏您的电影
  4. 对不起,它不是一个更友好的用户格式,但至少你不需要像其他一些解决方案那样混淆JNI。