好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java用20行代码实现抖音小视频批量转换为gif动态图

本文主要介绍了Java用20行代码实现抖音小视频批量转换为gif动态图,分享给大家,具体如下:

效果图 

本功能实现需要用到第三方jar包 jave,JAVE 是java调用FFmpeg的封装工具。

spring boot项目pom文件中添加以下依赖

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<!-- https://mvnrepository.com/artifact/ws.schild/jave-core -->

     < dependency >

         < groupId >ws.schild</ groupId >

         < artifactId >jave-core</ artifactId >

         < version >3.1.1</ version >

     </ dependency >

  <!-- 以下依赖根据系统二选一 -->

  <!-- win系统平台的依赖 -->

     < dependency >

         < groupId >ws.schild</ groupId >

         < artifactId >jave-nativebin-win64</ artifactId >

         < version >3.1.1</ version >

     </ dependency >

  <!-- linux系统平台的依赖 -->

     < dependency >

         < groupId >ws.schild</ groupId >

         < artifactId >jave-nativebin-linux64</ artifactId >

         < version >3.1.1</ version >

     </ dependency >

Java单类实现代码,复制到Spring boot项目中,用idea编辑器 主方法运行。

?

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

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

import ws.schild.jave.Encoder;

import ws.schild.jave.EncoderException;

import ws.schild.jave.MultimediaObject;

import ws.schild.jave.encode.EncodingAttributes;

import ws.schild.jave.encode.VideoAttributes;

import ws.schild.jave.info.MultimediaInfo;

import ws.schild.jave.info.VideoInfo;

import ws.schild.jave.info.VideoSize;

 

import java.io.File;

import java.util.Arrays;

 

public class VideoToGIf {

 

     //输出格式

     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() / 5 , sourceSize.getHeight() / 5 );

             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 static void 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));

             });

         }

     }

 

 

     public static void main(String[] args) {

         batchTransform( "C:\\Users\\tarzan\\Desktop\\video" , "C:\\Users\\tarzan\\Desktop\\gif" );

     }

 

 

}

运行结果截图

再桌面建立video文件夹,将要转换的视频文件放入进去。(gif文件夹可以不建,程序会自动生成)

原视频文件 

转化后的git文件

测试结果

视频格式为mp4,大小约4.77MB,转为同分辨率,帧率为5的gif文件,大小约4.70MB,转化时间1s左右。

相关文章《 震惊,java仅用30行代码就实现了视频转音频的批量转换 》

到此这篇关于Java用20行代码实现抖音小视频批量转换为gif动态图的文章就介绍到这了,更多相关Java小视频批量转换为gif内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://blog.csdn.net/weixin_40986713/article/details/115939961

查看更多关于Java用20行代码实现抖音小视频批量转换为gif动态图的详细内容...

  阅读:16次