首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种方法可以将一堆图像转换成java中的mp4文件?

有没有一种方法可以将一堆图像转换成java中的mp4文件?
EN

Stack Overflow用户
提问于 2022-05-25 10:52:40
回答 1查看 37关注 0票数 1

我正致力于一种在Java中可视化分形的方法。它背后的数学运作非常好,我对照片的结果很满意。现在我想把这些图片变成一个视频。我编写了一个Java程序,生成任意数量的图片,并将它们(按字母顺序)保存在一个新目录中。现在,我需要一种Java将这些图像转换为视频的方法。我知道有一些解决方案,比如ffmpeg,但是我需要这个过程是可重复的,所以我不认为命令行应用程序是最好的选择。

有任何方法可以直接将这样的函数实现到Java中吗?

EN

回答 1

Stack Overflow用户

发布于 2022-07-27 21:08:37

如果您愿意使用第三方库并支持该平台(Windows或Linux,64位)。您可以使用Pilecv4j (完全公开,我是主要提交者)。

有一个检查过的测试就是这样做的。你可以在这里找到它:TestSplitIntoFiles.java

以下是执行此操作的相关函数,其细微差别在于它没有从磁盘上的内容中读取图像文件名:

代码语言:javascript
复制
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会产生更大的尺寸

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72376285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档