我基本上有一个字节矩阵。每行(含义为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)。
谢谢!
解决方案似乎是使用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”等。
您听说过JMF(Java Media Framework),从示例中可以找到以下示例:Generating a Movie File from a List of (JPEG) Images
您可以尝试用此gif encoder制作gif。
我写了一个MJPEG读写器,用于在Java小程序中播放视频。 MJPEG不是最高级的视频格式,但是非常易于操作。该代码是我的计算机视觉库BoofCV的一部分,但您可以为自己的目的而剔除这一类。
从另一个问题37963625/answer-38024735,您也可以使用ffmpeg
实现您的目标,而且我可以保证该答案中的示例适用于从一系列图像生成视频的情况。