飞道的博客

Java用20行代码实现抖音小视频批量转换为gif动态图【值得收藏】

244人阅读  评论(0)

效果图 

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

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


  
  1. <!-- https://mvnrepository.com/artifact/ws.schild/jave-core -->
  2. <dependency>
  3. <groupId>ws.schild </groupId>
  4. <artifactId>jave-core </artifactId>
  5. <version>3.1.1 </version>
  6. </dependency>
  7. <!-- 以下依赖根据系统二选一 -->
  8. <!-- win系统平台的依赖 -->
  9. <dependency>
  10. <groupId>ws.schild </groupId>
  11. <artifactId>jave-nativebin-win64 </artifactId>
  12. <version>3.1.1 </version>
  13. </dependency>
  14. <!-- linux系统平台的依赖 -->
  15. <dependency>
  16. <groupId>ws.schild </groupId>
  17. <artifactId>jave-nativebin-linux64 </artifactId>
  18. <version>3.1.1 </version>
  19. </dependency>

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


  
  1. import ws.schild.jave.Encoder;
  2. import ws.schild.jave.EncoderException;
  3. import ws.schild.jave.MultimediaObject;
  4. import ws.schild.jave.encode.EncodingAttributes;
  5. import ws.schild.jave.encode.VideoAttributes;
  6. import ws.schild.jave.info.MultimediaInfo;
  7. import ws.schild.jave.info.VideoInfo;
  8. import ws.schild.jave.info.VideoSize;
  9. import java.io.File;
  10. import java.util.Arrays;
  11. public class VideoToGIf {
  12. //输出格式
  13. private static final String outputFormat = "gif";
  14. /**
  15. * 获得转化后的文件名
  16. *
  17. * @param sourceFilePath : 源视频文件路径
  18. * @return
  19. */
  20. public static String getNewFileName( String sourceFilePath) {
  21. File source = new File(sourceFilePath);
  22. String fileName = source.getName().substring( 0, source.getName().lastIndexOf( "."));
  23. return fileName + "." + outputFormat;
  24. }
  25. /**
  26. * 转化音频格式
  27. *
  28. * @param sourceFilePath : 源视频文件路径
  29. * @param targetFilePath : 目标gif文件路径
  30. * @return
  31. */
  32. public static void transform( String sourceFilePath, String targetFilePath) {
  33. File source = new File(sourceFilePath);
  34. File target = new File(targetFilePath);
  35. try {
  36. //获得原视频的分辨率
  37. MultimediaObject mediaObject = new MultimediaObject(source);
  38. MultimediaInfo multimediaInfo = mediaObject.getInfo();
  39. VideoInfo videoInfo = multimediaInfo.getVideo();
  40. VideoSize sourceSize = videoInfo.getSize();
  41. //设置视频属性
  42. VideoAttributes video = new VideoAttributes();
  43. video.setCodec(outputFormat);
  44. //设置视频帧率 正常为10 ,值越大越流畅
  45. video.setFrameRate( 10);
  46. //设置视频分辨率
  47. VideoSize targetSize = new VideoSize(sourceSize.getWidth() / 5, sourceSize.getHeight() / 5);
  48. video.setSize(targetSize);
  49. //设置转码属性
  50. EncodingAttributes attrs = new EncodingAttributes();
  51. attrs.setVideoAttributes(video);
  52. // 音频转换格式类
  53. Encoder encoder = new Encoder();
  54. encoder.encode(mediaObject, target, attrs);
  55. System.out.println( "转换已完成...");
  56. } catch (EncoderException e) {
  57. e.printStackTrace();
  58. }
  59. }
  60. /**
  61. * 批量转化视频格式
  62. *
  63. * @param sourceFolderPath : 源视频文件夹路径
  64. * @param targetFolderPath : 目标gif文件夹路径
  65. * @return
  66. */
  67. public static void batchTransform( String sourceFolderPath, String targetFolderPath) {
  68. File sourceFolder = new File(sourceFolderPath);
  69. if (sourceFolder. list().length != 0) {
  70. Arrays.asList(sourceFolder. list()). forEach(e -> {
  71. transform(sourceFolderPath + "\\" + e, targetFolderPath + "\\" + getNewFileName(e));
  72. });
  73. }
  74. }
  75. public static void main( String[] args) {
  76. batchTransform( "C:\\Users\\tarzan\\Desktop\\video", "C:\\Users\\tarzan\\Desktop\\gif");
  77. }
  78. }

运行结果截图

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

 

原视频文件 

转化后的git文件

 

测试结果

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

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


转载:https://blog.csdn.net/weixin_40986713/article/details/115939961
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场