Java截取视频生成Gif动图

添加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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值