使用JavaCv的工具类实现流媒体解码存图


前言

这两天项目中有个需求是从视频流中定时截图保存至服务器,之前没操作过视频,大致花了半天查网上的资料,做了个可以从视频中截图的demo,仅供参考


一、JavaCv是什么?

JavaCv:是一个工具类,里面封装了对视频进行操作的方法。说JavaCv,就不得不说一下FFmpeg、OpenCV、JavaCPP,我们使用的JavaCv都是对这三个的封装

工具 特点 java’是否可以直接使用
FFmpeg C语言版的本地库
OpenCV C语言版的本地库
JavaCPP 对FFmpeg、OpenCV这些常用库进行包装,成为API
JavaCv 对JavaCPP进行封装,成为工具类,比JavaCpp更简单易用

我们本次就使用JavaCv来操作视频流,因为JavaCv底层也是使用FFmpeg,内部原理都是一致的,所以可以先学习用JavaCPP操作FFmpeg获取视频流的方式,从中学习原理,便于更好的理解FFmpeg。大佬已经做了很完整的demo攻略,大家可以参考学习:Java版流媒体编解码和图像处理(JavaCPP+FFmpeg)

二、使用步骤

1.引入库

在pom文件中引入包ffmpeg、javacpp、javacv:

<!-- 视频截图 ffmpeg  javacpp  javacv -->
        <dependency>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>ffmpeg-platform</artifactId>
            <version>4.0.2-1.4.3</version>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacpp</artifactId>
            <version>1.4.3</version>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
            <version>1.4.3</version>
        </dependency>

2.获取本地视频的截图并保存

  • 在D盘创建一个两个文件夹D:\files\video、D:\files\img,在video下放一个MP4格式的视频文件,供截图使用;img下存储的为截图文件,文件名为当前截图时间;获取本地视频文件的第六桢截图保存至本地文件中

代码如下(示例):

package com.example.common.util.video;

import lombok.extern.slf4j.Slf4j;
import org.bytedeco.javacpp.opencv_core;
import org.bytedeco.javacv.*;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author sliu
 * @date 2023/6/13 10:26
 **/
@Slf4j
public class VideoUtil {
   

	public static void main(String[] args) throws IOException {
   
		getScreenshotByFile(
				"D:\\files\\video\\blue.mp4",
				"D:\\files\\img\\" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpg");
	
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值