Код: Выделить всё
ProcessBuilder pb = new ProcessBuilder(
"ffmpeg",
"-i", filename,
"-ss", String.valueOf(startFrame / videoFps),
"-vf", String.format("scale=%d:%d:force_original_aspect_ratio=decrease,pad=%d:%d:(ow-iw)/2:(oh-ih)/2,fps=%.2f",
canvasWidth, canvasHeight, canvasWidth, canvasHeight, targetFps),
"-f", "image2pipe",
"-vcodec", "rawvideo",
"-pix_fmt", "rgb24",
"-an",
"-"
);
System.out.println("Starting FFmpeg: " + String.join(" ", pb.command()));
ffmpegProcess = pb.start();
int frameSize = canvasWidth * canvasHeight * 3; // RGB24 = 3 bytes per pixel
byte[] buffer = new byte[frameSize];
try (InputStream inputStream = ffmpegProcess.getInputStream();
BufferedReader errorReader = new BufferedReader(new InputStreamReader(ffmpegProcess.getErrorStream()))) {
int frameNum = startFrame;
while (!shouldStop && ffmpegProcess.isAlive()) {
int bytesRead = inputStream.read(buffer);
if (bytesRead != frameSize) {
System.err.println("Incomplete frame read");
break;
}
BufferedImage frame = new BufferedImage(canvasWidth, canvasHeight, BufferedImage.TYPE_3BYTE_BGR);
frame.getRaster().setDataElements(0, 0, canvasWidth, canvasHeight, buffer);
// ...
}
} catch (IOException e) {
// ...
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... he-process