java如何做视频抽帧,视频转图片操作Demo!现在市面上很多客户提成需求,希望可以把本地的视频,抽帧(一个一个静态的图片)。至于为什么要抽帧,大家自己去百度查询。我们本次仅仅讨论如何使用java技术,实现视频的抽帧操作。
1:我们需要用到市面上一个的maven插件包。名字叫做:【javacv-platform】
在项目的pom.xml文件中加入依赖项。maven从仓库下载到本地仓库来,我们就可以开始写测试代码了。
<dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv-platform</artifactId> <version>1.5.7</version> </dependency>
2:测试的demo代码如下所示:
这个代码仅仅是针对本地视频,某一个视频文件的抽帧操作。
package com.yrl.managedemo.util;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class FrameExtractor {
public static void main(String[] args) {
// 本地存储的视频文件路径
String videoFilePath = "H:\\base\\video\\3.mp4";//此处写自己的视频路径
// 创建FFmpegFrameGrabber对象
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(videoFilePath);
try {
//记录开始的时间节点
long startTime = System.currentTimeMillis();
// 打开视频文件
grabber.start();
// 逐帧抓取视频
Frame frame;
int frameNumber = 1;
//只要获取到帧对象不为null.就一直循环下去。
while ((frame = grabber.grabImage()) != null) {
BufferedImage bufferedImage = frameToBufferedImage(frame);
// 生成保存帧图像的文件路径
//字符串是帧图片的默认起始内容,不会变化的,唯一变化的是后面的数字,起始值是1
String outputFilePath = String.format("%s/frame_%06d.jpg", "H:\\base\\frame-video\\3", frameNumber);//此处写自己的保存路径
// 保存帧图像到文件
try {
ImageIO.write(bufferedImage, "jpg", new File(outputFilePath));
System.out.println("保存帧图像:" + outputFilePath);
} catch (IOException e) {
e.printStackTrace();
}
//完成一次帧图的存储后,末尾数字自动加1
frameNumber++;
}
// 关闭视频文件
grabber.stop();
long endTime = System.currentTimeMillis();
System.out.println("NeedTime is:" + (endTime - startTime)/1000 + " 秒");
} catch (org.bytedeco.javacv.FrameGrabber.Exception e) {
e.printStackTrace();
}
}
/**
* 将Frame转换为BufferedImage
*/
private static BufferedImage frameToBufferedImage(Frame frame) {
Java2DFrameConverter converter = new Java2DFrameConverter();
return converter.getBufferedImage(frame);
}
}
如图所示,代码开始疯狂的在存储帧图片到本地指定的目录下面。
12秒完成了这个操作任务。视频容积是 2.3MB.抽取帧后,存储的文件夹内占容积是28MB。
如图,视频原始长度是14秒,图片帧存储了441张图片,由此,我们可以推算出来,视频是按照每秒30帧的帧速率制作的。文章来源:https://www.toymoban.com/news/detail-845003.html
里面的文字注解,写的很清晰了。不懂的话,可以留言咨询。很高兴和大家一起学习java知识。文章来源地址https://www.toymoban.com/news/detail-845003.html
到了这里,关于java如何做视频抽帧,视频转图片操作Demo的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!