[英]How do I extract all the frames from a video in Java?
我正在嘗試從視頻中抓取幀並將它們放入 BufferedImage 集合中,以便稍后使用這些圖像。 我嘗試使用這個問題的第二個答案中的代碼,但這並不是很有幫助,因為他們提供的代碼只抓取了第一幀。 我將如何提取所有幀並將它們放入集合中?
因此,通過一些谷歌搜索(並閱讀源代碼),我是否能夠將這個基本概念拼湊在一起。
“明顯”的解決方案是循環播放視頻中的幀並提取它們,“不明顯”的解決方案是“如何”?!
您需要的兩種方法是FFmpegFrameGrabber#getLengthInFrames
和FFmpegFrameGrabber#setFrameNumber
,從那里它只是一種轉換當前幀並將其寫入文件的簡單方法(已經在上一個問題中進行了演示)
File videoFile = new File("Storm - 106630.mp4");
FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(videoFile.getAbsoluteFile());
frameGrabber.start();
Java2DFrameConverter c = new Java2DFrameConverter();
int frameCount = frameGrabber.getLengthInFrames();
for (int frameNumber = 0; frameNumber < frameCount; frameNumber++) {
System.out.println("Extracting " + String.format("%04d", frameNumber) + " of " + String.format("%04d", frameCount) + " frames");
frameGrabber.setFrameNumber(frameNumber);
Frame f = frameGrabber.grab();
BufferedImage bi = c.convert(f);
ImageIO.write(bi, "png", new File("Frame " + String.format("%04d", frameNumber) + "-" + String.format("%04d", frameCount) + ".png"));
}
frameGrabber.stop();
現在,顯然,您可以將圖像存儲到內存中的某種List
中,請注意,根據原始視頻的大小和長度,這可能會使您遇到內存問題。
您可以使用 OpenCV 提取視頻中的幀,試試下面的代碼。 input是你電腦的視頻文件路徑
VideoCapture cap = new VideoCapture();
String output = "resources/output";
cap.open(input);
int video_length = (int) cap.get(Videoio.CAP_PROP_FRAME_COUNT);
int frames_per_second = (int) cap.get(Videoio.CAP_PROP_FPS);
Mat frame = new Mat();
if (cap.isOpened()) {
System.out.println("Video is opened");
System.out.println("Number of Frames: " + video_length);
System.out.println(frames_per_second + " Frames per Second");
System.out.println("Converting Video to images...");
cap.read(frame);
int frame_number = 0;
while (cap.read(frame)) {
Imgcodecs.imwrite(output + "/" + frame_number + ".jpg", frame);
frame_number++;
}
cap.release();
processingStatus = video_length + " Frames extracted";
System.out.println(processingStatus);
} else {
processingStatus = "Failed";
System.out.println(processingStatus);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.