ffmpeg 是领先的多媒体框架,能够解码、编码、转码、混合、解密、流媒体、过滤音视频文件。
jave2是一个内置了ffmpeg.exe 的jar,并提供了对ffmpeg命令的封装。
使用jave2可以不用先安装配置ffmpeg的环境变量。
注:jave2 版本3.0后, windows 下视频加水印由于:路径问题有bug。
导入依赖:
<!--引入全平台windows 32/64 linux 32/64 下的ffmpeg 可执行程序,实际运行不需要这么多-->
<!-- <dependency>-->
<!-- <groupId>ws.schild</groupId>-->
<!-- <artifactId>jave-all-deps</artifactId>-->
<!-- <version>3.1.1</version>-->
<!-- </dependency>-->
<!--操作ffmpeg命令的jar-->
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-core</artifactId>
<version>3.1.1</version>
</dependency>
<!--windows 引用jar,主要集成 ffmpeg-amd64-3.1.1.exe -->
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-nativebin-win64</artifactId>
<version>3.1.1</version>
</dependency>
<!--linux 引用jar,主要集成 ffmpeg-amd64-3.1.1 linux下可执行文件 -->
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-nativebin-linux64</artifactId>
<version>3.1.1</version>
</dependency>
具体代码如下:
import org.apache.commons.lang3.time.StopWatch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ws.schild.jave.Encoder;
import ws.schild.jave.EncoderException;
import ws.schild.jave.MultimediaObject;
import ws.schild.jave.ScreenExtractor;
import ws.schild.jave.encode.AudioAttributes;
import ws.schild.jave.encode.EncodingAttributes;
import ws.schild.jave.encode.VideoAttributes;
import ws.schild.jave.filtergraphs.OverlayWatermark;
import ws.schild.jave.filters.helpers.OverlayLocation;
import ws.schild.jave.info.AudioInfo;
import ws.schild.jave.info.MultimediaInfo;
import ws.schild.jave.info.VideoSize;
import java.io.File;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* 视频处理工具类,利用jave2 jar处理
* 1:截取视频多张图
* 2:获取视频时长,格式等信息
* 3:视频压缩
* 4:视频添加图片水印
*
* @author lin
* @version 1.0.0
* @Description
* @createTime 2021年06月15日 16:32:00
*/
public class VideoJave2Utils {
static Logger logger = LoggerFactory.getLogger(VideoJave2Utils.class);
/**
* 允许的视频格式
*/
static final String ALLOW_IMG_FORMAT = "avi|wma|rmvb|flash|mp4|mid|3gp|wmv|mpg|mp3|mkv|mpeg|mov|flv";
/**
* 水印视频名字拼接
*/
static final String NEW_VIDOE_WATER_NAME_PRE_STR = "_water";
/***
* 压缩视频文件后缀
*/
static final String NEW_VIDOE_ZIP_NAME_PRE_STR = "_ys";
/**
* 视频截图文件名拼接
* eg:原视频 test.mp4
* 截图名称 test_sc1.jpg 、test_sc10.jpg