首页 > 其他分享 >视频抽帧

视频抽帧

时间:2023-11-21 17:02:41浏览次数:23  
标签:视频 videoPath fileName 抽帧 ffg String

目录

视频抽帧

1. maven依赖

<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5</version>
</dependency>


2. 实例

public class CommonUtils {
    private final static Logger log = LoggerFactory.getLogger(CommonUtils.class);
    
	/**
     * 视频抽帧(每second抽一帧)
     * @param videoPath
     * @param second 
     * @return
     */
    public static List<String> videoFrameExtract(String videoPath, Integer second){
        long start = System.currentTimeMillis();
        ArrayList<String> fl = new ArrayList<>();  // 返回的抽帧图片地址
        String saveFilePrefix = videoPath.substring(0, videoPath.lastIndexOf(".")); // 保存的文件名前缀
        Frame frame;
        FFmpegFrameGrabber ffg = null;
        int fps = 0;  // 帧率
        long videoTime = 0L;  // 视频时长
        int frameCount = 0; // 视频总帧数(该视频有多少张图片)
        try{
            ffg = new FFmpegFrameGrabber(videoPath);
            ffg.start();
            fps = (int)ffg.getFrameRate();
            videoTime = ffg.getLengthInTime() / (1000*1000);
            while ((frame=ffg.grabImage()) != null){
                if (frame.image != null){
                    // 获取特定帧(间隔n秒获取一帧图片)
                    if (frameCount>=1 && frameCount%(second*fps)==0){
                        // 文件保存
                        String fileName = saveFilePrefix + "-" + frameCount + ".jpg";
                        boolean saveFlag = false;
                        try {
                            Java2DFrameConverter converter = new Java2DFrameConverter();
                            BufferedImage bufferedImage = converter.getBufferedImage(frame);
                            saveFlag = ImageIO.write(bufferedImage, "jpg", new File(fileName));
                            if (saveFlag){
                                fl.add(fileName);
                            }

                        }catch (Exception e){
                            log.error("帧图片保存异常({}):{}", fileName, String.valueOf(e));
                        }
//                        log.info("帧图片保存({}):{}", fileName, saveFlag);
                    }
                }
                frameCount ++;
            }
        }catch (Exception e){
            e.printStackTrace();
            log.error("视频抽帧异常({}):{}", videoPath, String.valueOf(e));
        }finally {
            try {
                if (ffg != null){
                    ffg.stop();
                } 
            }catch (Exception ignored){}
        }
        long cost = System.currentTimeMillis() - start;
        log.info("视频抽帧({})-帧率:{}fps;时长:{}s;总帧数:{};抽帧耗时:{}ms;抽帧数据({}):{};", videoPath, fps, videoTime, frameCount, cost, fl.size(),  fl);
        return fl;
    }

    public static void main(String[] args) {
        videoFrameExtract("F:\\test\\file\\test\\a.mp4", 1);
    }
}

image

image


标签:视频,videoPath,fileName,抽帧,ffg,String
From: https://www.cnblogs.com/fsh19991001/p/17846968.html

相关文章

  • 羚通视频智能分析平台基于 AI 智能安防视频监控烟火识别、烟火检测算法分析
    羚通视频智能分析平台是一种基于先进的智能视频分析和深度学习技术的算法分析平台,专门致力于提供烟火识别检测的智能算法方案。这一方案具有高精度检测、实时性强、可扩展性强、智能分析和预警等优点,能够满足安防监控领域中对烟火检测的需求,有效提高监控效率和安全性。在实际应用中......
  • 羚通视频智能分析平台基于 AI 智能安防视频监控烟火识别、烟火检测算法分析
    羚通视频智能分析平台是一种基于先进的智能视频分析和深度学习技术的算法分析平台,专门致力于提供烟火识别检测的智能算法方案。这一方案具有高精度检测、实时性强、可扩展性强、智能分析和预警等优点,能够满足安防监控领域中对烟火检测的需求,有效提高监控效率和安全性。......
  • 零代码编程:用ChatGPT根据视频标题来批量重命名字幕文件
    现在有很多视频文件:还有视频相对应的字幕文件:F:\儿童学习教育\Abadas.适合2岁以上.BBC儿童学习单词的动画\abadas字幕两者的文件标题不一样,现在要将字幕文件的标题全部根据视频文件来重命名。在chatGPT中输入提示词:你是一个Python编程专家,要完成一个根据视频标题来批量重命名字幕文......
  • 羚通视频智能分析平台打电话算法检测 打电话、玩手机算法预警
    羚通视频智能分析平台是一款利用人工智能技术对监控视频进行智能分析的工具,它具备强大的算法检测和识别功能。该平台的主要功能是自动识别和检测违规行为,如打电话和使用手机等,从而帮助管理人员提高管理效率和管理水平。具体来说,该平台的打电话检测识别系统能够自动识别和检测打电话......
  • 羚通视频智能分析平台打电话算法检测 打电话、玩手机算法预警
    羚通视频智能分析平台是一款利用人工智能技术对监控视频进行智能分析的工具,它具备强大的算法检测和识别功能。该平台的主要功能是自动识别和检测违规行为,如打电话和使用手机等,从而帮助管理人员提高管理效率和管理水平。具体来说,该平台的打电话检测识别系统能够自动识......
  • 羚通视频智能分析平台安全帽佩戴识别检测
    羚通视频智能分析平台是一款利用深度学习和计算机视觉技术的算法平台,旨在提供一种安全帽佩戴识别检测的智能算法方案。该平台具有多项优点,包括高精度检测、实时性强、可扩展性强、自定义配置和智能分析和预警等,能够满足工地安全管理的需求,提高监控效率和安全性。 ......
  • 羚通视频智能分析平台安全帽佩戴识别检测
    羚通视频智能分析平台是一款利用深度学习和计算机视觉技术的算法平台,旨在提供一种安全帽佩戴识别检测的智能算法方案。该平台具有多项优点,包括高精度检测、实时性强、可扩展性强、自定义配置和智能分析和预警等,能够满足工地安全管理的需求,提高监控效率和安全性。首先,羚通视频智能分......
  • 视频监控管理平台EasyCVR告警查询拖动条无法显示,该如何解决?
    视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等,视频智能分析平台EasyCVR融合性强、开放度高、部署轻快,在智慧工地、智慧园区、智慧......
  • 安防视频监控平台EasyCVR服务器部署后出现报错,导致无法级联到域名服务器,该如何解决?
    视频监控平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,安防监控平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视频定时轮播。视频监控汇聚平台EasyCVR支持多种播放协议,包括:HLS、HTTP-FLV、WebSocket-FLV......
  • Lnton羚通视频分析算法平台提供烟雾和火焰的智能检测与识别系统
    Lnton羚通视频分析算法平台是一款利用智能视频分析和深度学习技术的创新解决方案,提供一种高精度、实时性强、可扩展性强、智能分析和预警的烟火识别检测算法方案。该平台能够满足安防监控领域中对烟火检测的需求,提高监控效率和安全性。首先,该平台能够实时准确地识别......