基于javacv的视频截图、转码、提取音频

本文介绍如何使用Video类进行视频转码、截图和音频提取,提供详细配置与实例代码。从全量依赖到最小依赖配置,以及TargetShot、TargetVideo和TargetSound类的使用方法都被详细阐述。

目标

将所有格式的视频转码为H5能播放的mp4格式,也可以截取任意一帧图片

全量依赖

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

最小依赖

直接引入javacv-platform依赖,打包后大约有800MB,以下是支持linux-x86_64和windows-x86_64平台的转码和截图功能的最小依赖配置

<properties>
	<javacv.version>1.5.3</javacv.version>
	<javacv.linux-x86_64>linux-x86_64</javacv.linux-x86_64>
	<javacv.windows-x86_64>windows-x86_64</javacv.windows-x86_64>
</properties>

<dependencies>
	<dependency>
	    <groupId>org.bytedeco</groupId>
	    <artifactId>javacv</artifactId>
	    <version>${javacv.version}</version>
	    <exclusions>
	    	<exclusion>
	    		<groupId>org.bytedeco</groupId>
	    		<artifactId>flycapture</artifactId>
	    	</exclusion>
	    	<exclusion>
	    		<groupId>org.bytedeco</groupId>
	    		<artifactId>libdc1394</artifactId>
	    	</exclusion>
	    	<exclusion>
	    		<groupId>org.bytedeco</groupId>
	    		<artifactId>libfreenect</artifactId>
	    	</exclusion>
	    	<exclusion>
	    		<groupId>org.bytedeco</groupId>
	    		<artifactId>libfreenect2</artifactId>
	    	</exclusion>
	    	<exclusion>
	    		<groupId>org.bytedeco</groupId>
	    		<artifactId>librealsense</artifactId>
	    	</exclusion>
	    	<exclusion>
	    		<groupId>org.bytedeco</groupId>
	    		<artifactId>librealsense2</artifactId>
	    	</exclusion>
	    	<exclusion>
	    		<groupId>org.bytedeco</groupId>
	    		<artifactId>videoinput</artifactId>
	    	</exclusion>
	    	<exclusion>
	    		<groupId>org.bytedeco</groupId>
	    		<artifactId>artoolkitplus</artifactId>
	    	</exclusion>
	    	<exclusion>
	    		<groupId>org.bytedeco</groupId>
	    		<artifactId>flandmark</artifactId>
	    	</exclusion>
	    	<exclusion>
	    		<groupId>org.bytedeco</groupId>
	    		<artifactId>leptonica</artifactId>
	    	</exclusion>
	    	<exclusion>
	    		<groupId>org.bytedeco</groupId>
	    		<artifactId>tesseract</artifactId>
	    	</exclusion>
	    </exclusions>
	</dependency>
	<dependency>
	    <groupId>org.bytedeco</groupId>
	    <artifactId>ffmpeg</artifactId>
	    <version>4.2.2-${javacv.version}</version>
	    <classifier>${javacv.linux-x86_64}</classifier>
	</dependency>
	<dependency>
	    <groupId>org.bytedeco</groupId>
	    <artifactId>ffmpeg</artifactId>
	    <version>4.2.2-${javacv.version}</version>
	    <classifier>${javacv.windows-x86_64}</classifier>
	</dependency>
	<dependency>
	    <groupId>org.bytedeco</groupId>
	    <artifactId>javacpp</artifactId>
	    <version>${javacv.version}</version>
	    <classifier>${javacv.linux-x86_64}</classifier>
	</dependency>
	<dependency>
	    <groupId>org.bytedeco</groupId>
	    <artifactId>javacpp</artifactId>
	    <version>${javacv.version}</version>
	    <classifier>${javacv.windows-x86_64}</classifier>
	</dependency>
	<dependency>
	    <groupId>org.bytedeco</groupId>
	    <artifactId>openblas</artifactId>
	    <version>0.3.9-${javacv.version}</version>
	    <classifier>${javacv.linux-x86_64}</classifier>
	</dependency>
	<dependency>
	    <groupId>org.bytedeco</groupId>
	    <artifactId>openblas</artifactId>
	    <version>0.3.9-${javacv.version}</version>
	    <classifier>${javacv.windows-x86_64}</classifier>
	</dependency>
	<dependency>
	    <groupId>org.bytedeco</groupId>
	    <artifactId>opencv</artifactId>
	    <version>4.3.0-${javacv.version}</version>
	    <classifier>${javacv.linux-x86_64}</classifier>
	</dependency>
	<dependency>
	    <groupId>org.bytedeco</groupId>
	    <artifactId>opencv</artifactId>
	    <version>4.3.0-${javacv.version}</version>
	    <classifier>${javacv.windows-x86_64}</classifier>
	</dependency>
</dependencies>

截图配置类

TargetShot.java

package com.videotest.video;

public class TargetShot {
   
   

	private String targetParentPath;//截图保存目录,如果不设置,则与源文件目录相同
	
	private String prefix = "";//截图文件名前缀
	
	private String suffix = "_shot";//截图文件简单名后缀
	
	private String extName = "jpg";//截图文件扩展名
	
	private int frameNum = 1;//截取视频第几帧

	public String getTargetParentPath() {
   
   
		return targetParentPath;
	}

	public TargetShot setTargetParentPath(String targetParentPath) {
   
   
		this.targetParentPath = targetParentPath;
		return this;
	}

	public String getPrefix() {
   
   
		return prefix;
	}

	public TargetShot setPrefix(String prefix) {
   
   
		this.prefix = prefix;
		return this;
	}

	public String getSuffix() {
   
   
		return suffix;
	}

	public TargetShot setSuffix(String suffix) {
   
   
		this.suffix = suffix;
		return this;
	}

	public String getExtName() {
   
   
		return extName;
	}

	public TargetShot setExtName(String extName) {
   
   
		this.extName = extName;
		return this;
	}

	public int getFrameNum() {
   
   
		return frameNum;
	}

	public TargetShot setFrameNum(int frameNum) {
   
   
		if (frameNum < 1) {
   
   
			frameNum = 1;
		}
		this.frameNum = frameNum;
		return this;
	}

	@Override
	public String toString() {
   
   
		return "TargetShot [targetParentPath=" + targetParentPath + ", prefix=" + prefix + ", suffix=" + suffix
				+ ", extName=" 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值