我基本上有一个字节矩阵。每行(意为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)。
谢谢!
答案 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的一部分,但你可以为了自己的目的而撕掉这一个类。
对不起,它不是一个更友好的用户格式,但至少你不需要像其他一些解决方案那样混淆JNI。