javacv视频抽帧的实现过程详解(附代码)

网友投稿 629 2023-01-02


javacv视频抽帧的实现过程详解(附代码)

视频抽帧可以做一些处理,比如水印,去水印等操作,然后再合成视频。下面直接上代码:

引入maven步骤看javacv去水印的文章

这里直接上关键操作:

/**

* 视频文件指定时间段的帧截取

* @param file

* @param start

* @param end

*/

public static List videoIntercept(File file, Integer start, Integer end) {

Frame frame = null;

List files = Lists.newArrayList();

FFmpegFrameGrabber fFmpegFrameGrabber = new FFmpegFrameGrabber(file);

String filePath = "D://video//images//";

String fileTargetName = "movie";

try {

fFmpegFrameGrabber.start();

int ftp = fFmpegFrameGrabber.getLengthInFrames();

SystelGXwhm.out.println("开始视频提取帧");

for (int i=0 ; i < ftp ; i++){

if( i >= start && i <= end){

frame = fFmpegFrameGrabber.grabImage();

doExecuteFrame(frame, filePath, fileTargetName, i ,files);

}

}

System.out.println("============运行结束============");

fFmpegFrameGrabber.stop();

} catch (IOException E) {

// Loggers.ERROR.error("视频抽帧异常", e);

}

return files;

}

public static void doExecuteFrame(Frame frame, String targetFilePath, String targetFileName, int index ,List files) {

if ( frame == null || frame.image == null) {

return;

}

Java2DFrameConverter convlGXwherter = new Java2DFrameConverter();

String imageMat = "jpg";

String fileName = targetFilePath + targetFileName + "_" + index + "." + imageMat;

BufferedImage bi = converter.getBufferedImage(frame);

File output = new File(fileName);

files.add(output);

try{

ImageIO.write(bi, imageMat, output);

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

List files = videoIntercept(new File("D://video//1553583033205-480p.mp4"), 10, 20);

System.out.println(files);

}

我们可以lGXwh看到文件夹下抽取了视频的第10,20之间的帧。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:企业内部系统接口设计案例(企业内部系统接口设计案例分析)
下一篇:微服务网关 开源(微服务网关集群)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~