从java程序中的FFMpeg中的视频图像

时间:2017-12-11 16:56:35

标签: java image video ffmpeg

当我将BufferedImages写入临时文件夹然后调用ffmpeg将其转换为视频时。有没有办法将图像从java中直接发送到ffmpeg而不是先写出来?我假设如果可能的话,这将是一种更快的方法吗?

这就是我目前正在从目录中精确读取的内容。

            ProcessBuilder processBuilder = new ProcessBuilder(
                    "ffmpeg",
                    "-y", 
                    "-r", framerate,
                    "-f", "image2",
                    "-i", imageFramesDir,
                    "-itsoffset", offset.toString(),
                    "-i", audioFile,
                    "-c:v", "libx264",
                    "-c:a", "aac",
                    "-pix_fmt", "yuv420p",
                    "-crf", "23",
                    "-r", "24",
                    "-vf", "scale=720x406,setdar=16:9",
                    outputFile);

            processBuilder.redirectErrorStream(false);
            Process process = processBuilder.start();

1 个答案:

答案 0 :(得分:0)

当您向ffmpeg输入图像时,您有多个选项,例如图像顺序,带有水母图案,通过滚边或使用concat demuxer。由于图像存储在内存中,因此您无需将图像写入本地驱动器。它会降低应用程序的速度并严重影响性能。您可以使用管道将图像提供给ffmpeg。检查this链接以查看有关ffmpeg的管道数据的更多信息。

此外,您可以使用concat demuxer从多个图像创建视频。 Concat demuxer允许您使用单个文本文件使用多个位置图像。您只需将图像路径保存到文本文件中并运行以下命令。

ffmpeg -f concat -safe 0 -i text.txt -vcodec mpeg4  -f mpegts test.mp4

根据您的要求,管道将是更加可靠的选择。但这两种方法都可以应用于您的问题。