ffmpeg视频上传及压缩SpringBoot篇上()

  本篇文章为你整理了ffmpeg视频上传及压缩SpringBoot篇上()的详细内容,包含有 ffmpeg视频上传及压缩SpringBoot篇上,希望能帮助你了解 ffmpeg视频上传及压缩SpringBoot篇上。

   在SpringBoot项目中实现视频的上传和下载,地址都是存放至阿里云的,但是由于视频数量越来越多占用的内存也越来越大,导致服务器内存不足,公司为了减少服务器开支,要求我们研发人员把最好把内存利用到极致,尽量减少不必要的浪费,所以就需要把视频进行压缩。

  上传前要先下载ffmpeg软件,这个软件会执行压缩命令,百度上可搜索到直接下载

  

  

  一、定义视频上传请求接口

  

public AjaxResult videoUploadFile(MultipartFile file){
 try {
 if(null == file file.isEmpty()){
 return AjaxResult.error("文件为空");
 }
 String ossFilePrefix = StringUtils.genUUID();
 String fileName = ossFilePrefix +"-"+ file.getOriginalFilename();
 String fileurl = AliOssUtils.videoUploadFile(file,fileName);
 AjaxResult ajax = AjaxResult.success();
 ajax.put("fileName", "after_"+fileName);
 ajax.put("url", fileurl);
 return ajax;
 } catch (Exception e) {
 return AjaxResult.error(e.getMessage());
 }
}

 

  二、视频暂存至本地文件夹

  

public static final String uploadVideo(String baseDir, MultipartFile file, String fileName) throws FileSizeLimitExceededException, IOException {
 File desc = getAbsoluteFile(baseDir, fileName);
 file.transferTo(desc);
 String pathFileName = getPathFileName(baseDir, fileName);
 return pathFileName;
}

 

  三、开始压缩视频

  

public static boolean toCompressFile(String convertFile,String targetFile){
 try{
 /**将视频压缩为 每秒15帧 平均码率600k 画面的宽与高 为1280*720*/
 String cutCmd="ffmpeg -i " + convertFile + " -r 15 -b:v 600k -s 1280x720 "+ targetFile;
 log.info("cutCmd: " + cutCmd);
 runCmd(cutCmd);
 log.info("文件:"+convertFile+" 视屏压缩完成");
 }catch(Exception e){
 e.printStackTrace();
 log.info("压缩文件出现异常:"+e.getMessage());
 return false;
 }
 return true;
}

 

  四、上传至阿里云并获取压缩后的视频路径

  

private static String getFileUrl(String path) throws IOException {
 File file = new File(path);
 FileInputStream fileInputStream = new FileInputStream(file);
 MultipartFile multipartFile1 = new MockMultipartFile(file.getName(), file.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);
 uploadFile(multipartFile1, file.getName());
 String url = getUrl(file.getName());
 return url;
}

 

  五、核心调用

  

public static String videoUploadFile(MultipartFile multipartFile, String fileName) throws IOException {
 //存放路径
 String filePath = FileUploadUtils.uploadVideo(getDefaultBaseDir(), multipartFile, fileName);
 String convertFile = filePath.replace("/profile", getDefaultBaseDir()).replaceAll("//", "/");
 //字符串第一个字符最后出现的下标
 int lastIndex = convertFile.lastIndexOf("/");
 StringBuilder sb = new StringBuilder(convertFile);
 String convertFile1 = sb.insert(lastIndex + 1, "after_").toString();
 boolean flag = toCompressFile(convertFile, convertFile1);
 if (!flag) {
 throw new CustomException("文件压缩出现异常");
 }
 //读取压缩后的文件并上传至阿里云
 String url = getFileUrl(convertFile1);
 //删除本地暂存文件
 FileUtils.deleteFile(convertFile);
 log.info("文件:" + convertFile + " 删除成功");
 FileUtils.deleteFile(convertFile1);
 log.info("文件:" + convertFile1 + " 删除成功");
 return url;
}

 

  六、spring boot的yml配置文件

  修改application.yml文件:
spring:
servlet:
mvc:
async:
request-timeout: 2000000

  
修改application-prd.yml文件:
spring:
servlet:
multipart:
max-file-size: 1024MB
max-request-size: 1024MB

  视频上传至阿里云这一块代码没有贴出来,每个项目都大同小异,可根据自己项目实际情况做调整,这篇最核心的是视频压缩的方法及思路。

  以上就是ffmpeg视频上传及压缩SpringBoot篇上()的详细内容,想要了解更多 ffmpeg视频上传及压缩SpringBoot篇上的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: