Regalamiunsorriso/decompiled-libs/www/acxent-videoj-1.0.0/it/acxent/videoj/ManageVideoJ.java

52 lines
1.8 KiB
Java
Raw Normal View History

2026-04-22 18:41:37 +02:00
package it.acxent.videoj;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.LinkedHashSet;
import javax.imageio.ImageIO;
import org.jcodec.api.FrameGrab;
import org.jcodec.common.io.NIOUtils;
import org.jcodec.common.model.Picture;
public class ManageVideoJ {
public static final LinkedHashSet<String> extractNFrames(String videoFileName, String targetDir, String targetName, int nFrames) throws Exception {
Timer timer = new Timer();
timer.start();
FrameGrab g = FrameGrab.createFrameGrab(NIOUtils.readableChannel(new File(videoFileName)));
LinkedHashSet<String> frames = new LinkedHashSet<>();
BufferedImage bufferedImage = null;
Picture picture = null;
try {
File targetDirFile = new File(targetDir);
if (!targetDirFile.exists())
targetDirFile.mkdirs();
int movieLen = g.getVideoTrack().getMeta().getTotalFrames();
int step = movieLen / (nFrames + 1);
System.out.println("len:" + movieLen + " step: " + step);
for (int i = 0; i < nFrames; i++) {
g.seekToFrameSloppy(i * step);
picture = g.getNativeFrame();
bufferedImage = AWTUtil.toBufferedImage(picture);
String currentFile = targetDir + targetDir + "_" + targetName + ".jpg";
frames.add(currentFile);
File frameFile = new File(currentFile);
ImageIO.write(bufferedImage, "jpg", frameFile);
bufferedImage.flush();
bufferedImage = null;
picture = null;
}
} finally {
if (bufferedImage != null) {
bufferedImage.flush();
bufferedImage = null;
}
if (g != null) {
g.getDecoder().shutdownThreadPool();
g = null;
}
}
timer.stop();
System.out.println("extractNFrames. DURATA: " + timer.getDurataHourMin());
return frames;
}
}