MP4转gif [置顶]

MP4文件批量转换转gif实现

本功能实现是基于FFmpeg,以及用于调用FFmpeg的工具jar包Jave

下载FFmpeg

  1. 进入FFmpeg官网下载地址 https://www.ffmpeg.org/download.html#build-windows
    进入FFmpeg官网下载地址
  2. 下载FFmpeg
    下载FFmpeg
  3. 将下载的zip文件夹解压
    下载FFmpeg
  4. 配置FFmpeg的环境变量
    下载FFmpeg
  5. 验证
    验证时仍有可能会报错(找不到文件),重启后使用
    下载FFmpeg

编写代码

导入jia包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        <!-- https://mvnrepository.com/artifact/ws.schild/jave-core -->
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-core</artifactId>
<version>3.3.1</version>
</dependency>
<!-- 两个平台可通用的jar包,linux未测试 -->
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-all-deps</artifactId>
<version>3.3.1</version>
</dependency>
<!-- 以下依赖根据系统二选一 -->
<!-- win系统平台的依赖 -->
<!-- <dependency>-->
<!-- <groupId>ws.schild</groupId>-->
<!-- <artifactId>jave-nativebin-win64</artifactId>-->
<!-- <version>3.3.1</version>-->
<!-- </dependency>-->
<!-- linux系统平台的依赖 -->
<!-- <dependency>-->
<!-- <groupId>ws.schild</groupId>-->
<!-- <artifactId>jave-nativebin-linux64</artifactId>-->
<!-- <version>3.3.1</version>-->
<!-- </dependency>-->

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//输出格式
private static final String outputFormat = "gif";
/**
* 获得转化后的文件名
*
* @param sourceFilePath : 源视频文件路径
* @return
*/
public static String getNewFileName(String sourceFilePath) {
File source = new File(sourceFilePath);
String fileName = source.getName().substring(0, source.getName().lastIndexOf("."));
return fileName + "." + outputFormat;
}
/**
* 转化音频格式
*
* @param sourceFilePath : 源视频文件路径
* @param targetFilePath : 目标gif文件路径
* @return
*/
public static void transform(String sourceFilePath, String targetFilePath) {
File source = new File(sourceFilePath);
File target = new File(targetFilePath);
try {
//获得原视频的分辨率
MultimediaObject mediaObject = new MultimediaObject(source);
MultimediaInfo multimediaInfo = mediaObject.getInfo();
VideoInfo videoInfo = multimediaInfo.getVideo();
VideoSize sourceSize = videoInfo.getSize();
//设置视频属性
VideoAttributes video = new VideoAttributes();
video.setCodec(outputFormat);
//设置视频帧率 正常为10 ,值越大越流畅
video.setFrameRate(10);
//设置视频分辨率
VideoSize targetSize = new VideoSize(sourceSize.getWidth() / 2, sourceSize.getHeight() / 2);
video.setSize(targetSize);
//设置转码属性
EncodingAttributes attrs = new EncodingAttributes();
attrs.setVideoAttributes(video);
// 音频转换格式类
Encoder encoder = new Encoder();
encoder.encode(mediaObject, target, attrs);
System.out.println("转换已完成...");
} catch (EncoderException e) {
e.printStackTrace();
}
}

/**
* 批量转化视频格式
*
* @param sourceFolderPath : 源视频文件夹路径
* @param targetFolderPath : 目标gif文件夹路径
* @return
*/
public synchronized static String batchTransform(String sourceFolderPath, String targetFolderPath) {

File sourceFolder = new File(sourceFolderPath);
if (sourceFolder.list().length != 0) {
Arrays.asList(sourceFolder.list()).forEach(e -> {
transform(sourceFolderPath + "/" + e, targetFolderPath + "/" + getNewFileName(e));
});
}
return "转换完成!";
}

验证

1
2
3
public static void main(String[] args) {
batchTransform("C:\\Users\\lihao\\Videos\\old", "C:\\Users\\lihao\\Videos\\gif");
}

下载FFmpeg