目标
将所有格式的视频转码为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="

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

被折叠的 条评论
为什么被折叠?



