我正致力于一种在Java中可视化分形的方法。它背后的数学运作非常好,我对照片的结果很满意。现在我想把这些图片变成一个视频。我编写了一个Java程序,生成任意数量的图片,并将它们(按字母顺序)保存在一个新目录中。现在,我需要一种Java将这些图像转换为视频的方法。我知道有一些解决方案,比如ffmpeg,但是我需要这个过程是可重复的,所以我不认为命令行应用程序是最好的选择。
有任何方法可以直接将这样的函数实现到Java中吗?
发布于 2022-07-27 21:08:37
如果您愿意使用第三方库并支持该平台(Windows或Linux,64位)。您可以使用Pilecv4j (完全公开,我是主要提交者)。
有一个检查过的测试就是这样做的。你可以在这里找到它:TestSplitIntoFiles.java
以下是执行此操作的相关函数,其细微差别在于它没有从磁盘上的内容中读取图像文件名:
private static void encodeFiles(final File imageDir, final long numFrames, final File outputVideo) throws IOException {
try(final CvMat firstFrame = ImageFile.readMatFromFile(new File(imageDir, "image-0.jpg").getAbsolutePath());
final EncodingContext ectx = Ffmpeg2.createEncoder()
.outputStream(outputVideo.getAbsolutePath())
.openVideoEncoder("libx264", "vidEncoder")
.addCodecOptions("preset", "slow")
.addCodecOptions("crf", "40")
.enable(firstFrame, false)
;) {
final VideoEncoder ve = ectx.getVideoEncoder("vidEncoder");
ectx.ready();
LongStream.range(0, numFrames)
.mapToObj(fn -> new File(imageDir, "image-" + fn + ".jpg").getAbsolutePath())
.forEach(frameFile -> {
try(CvMat mat = uncheck(() -> ImageFile.readMatFromFile(frameFile));) {
ve.encode(mat, false);
}
});
}
}如果你决定试一试,如果你遇到任何问题,请告诉我。您可以在GitHub上使用这些问题。我已经用了很长一段时间了。
另外,请参见这个问题的答案:读一个mp4,然后写到花药,mp4会产生更大的尺寸
https://stackoverflow.com/questions/72376285
复制相似问题