Java:我如何从一组图像创build一个电影?

我基本上有一个字节matrix。 每一行(意思是字节[])代表一个图像。 如何创build一个电影(任何格式 – 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. 

我可以select任何我喜欢的格式,只要我开始制作电影。

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

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

我还需要在创build电影(添加一些文本)之前编辑一些图像(字节stream)。 我怎样才能做到这一点?

解决scheme需要是“仅Java”! 没有外部程序,没有外部命令(但我可以使用外部的jar子)。

谢谢!

解决scheme似乎是使用Mencoder (或者至less,这似乎是一个半stream行的select)。

这是一个专门解决Mencoder中的图像到电影function的链接。

至于在将这些文本作为video的一部分进行编码之前将文本渲染到帧上,您可以使用Java2D的image processing库来预先简单地在图像上绘制文本。例如:

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

这是做这件事的一种方法, 这个常见问题应该让你从Java2D,字体渲染等方面开始,并提供进一步资源的指针。

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

根据你想要支持多less种输出格式,你可能会这样做

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

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

您是否听说过JMF (Java Media Framework),从示例中可以find这个示例: 从(JPEG)图像列表生成电影文件

你可以尝试用这个gif编码器做一个gif。

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

  1. 下载这个文件: CreateMJpeg.java
  2. 看主要function。 在jpeg图像中读取byte []数据的位置,但是需要将其转换为jpeg的第一个数据。
    • 你可以使用标准的Java库将它转换成JPEG格式
  3. 运行修改后的代码,享受你的电影

对不起,它不是一个更友好的格式,但至less你不需要像其他一些解决scheme一样搞乱JNI。