添加jar包依赖
<!-- 视频截图 -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.4.2</version>
</dependency>
<!-- gif -->
<dependency>
<groupId>com.madgag</groupId>
<artifactId>animated-gif-lib</artifactId>
<version>1.4</version>
</dependency>
Gif生成工具类
package org.pet.king.util;
importjava.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;
import com.madgag.gif.fmsware.AnimatedGifEncoder;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class GifUtil {
/**
* 默认每截取一次跳过多少帧(默认:2)
*/
private static final Integer DEFAULT_MARGIN = 2;
/**
* 默认帧频率(默认:10)
*/
private static final Integer DEFAULT_FRAME_RATE = 10;
/**
* 截取视频指定帧生成gif,存储路径同级下
*
* @param videofile
* 视频文件
* @param startFrame
* 开始帧
* @param frameCount
* 截取帧数
* @param frameRate
* 帧频率(默认:2)
* @param margin
* 每截取一次跳过多少帧(默认:10)
* @throws IOException
*
*/
public static String buildGif(String filePath, int startFrame, int frameCount, Integer frameRate, Integer margin)
throws IOException {
if (margin == null) {
margin = DEFAULT_MARGIN;
}
if (frameRate == null) {
frameRate = DEFAULT_FRAME_RATE;
}
// gif存储路径
String gifPath = filePath.substring(0, filePath.lastIndexOf(".")) + ".gif";
// 输出文件流
FileOutputStream targetFile = new FileOutputStream(gifPath);
// 读取文件
FFmpegFrameGrabber ff = new FFmpegFrameGrabber(filePath);
Java2DFrameConverter converter = new Java2DFrameConverter();
// 无限期的循环下去、注意,此参数设置必须在下面for循环之前,即在添加第一帧数据之前
en.setRepeat(0);
ff.start();
try {
Integer videoL