目录
2021SC@SDUSC
项目名称:multimedia-utils
博客三
使用(部分)
在上篇文章中我们对视频的使用部分进行了获取视频信息以及生成视频封面图实现的讲解,下面我将继续介绍其他功能的实现。
压缩视频
此部分与前面功能实现类似,均需要先生成上传视频的临时文件,然后再调用视频处理工具类。但是之后的工作我们需要注意,我们要设置视频压缩完成时的回调URL定位。然后设置好视频压缩具体参数。最后再删除临时文件。具体设置视频参数方法在后期会讲解。
/**
* 压缩视频
*/
@PostMapping("/compressionVideo")
public Object compressionVideo(@RequestParam MultipartFile file) {
String location = multipartProperties.getLocation();
// 生成上传视频的临时文件
File inputFile = FileUtil.multipartFile2File(file, location);
// 调用视频处理工具类
CompressionAttributes compressionAttributes = new CompressionAttributes();
// 设置视频压缩完成时的回调URL
compressionAttributes.setProgressUrl("http://localhost:8999/file/callback?fileId=111111&a=456");
// 设置视频压缩参数
VideoAttributes videoAttributes = new VideoAttributes();
videoAttributes.setMaxDuration(15);
videoAttributes.setMaxFps(20);
videoAttributes.setVideoSize(VideoSize.HD480);
compressionAttributes.setVideoAttributes(videoAttributes);
String outputFileName = fFmpegUtils.putCompressionTask(location, inputFile.getName(), compressionAttributes);
return outputFileName;
}
压缩视频完成时的回调
这里主要是针对上述要求,提取回调信息,回调参数 fileId,根据fileId查询数据库的上传临时文件名和下载临时文件名,进行文件上传和文件删除。
@PostMapping("/callback")
public Object callback(@RequestBody String info, @RequestParam("fileId") String fileId, @RequestParam("a") String a) {
String[] split = info.split("/");
System.out.println(String.format("fileId为%s的文件已压缩完成", fileId));
return null;
}
图片裁切
对于图片的处理和对视频的处理相似,都是先生成上传的临时文件然后再调用相应的图片处理工具类,裁切图片,最后删除上传图片的临时文件即可。代码如下
@PostMapping("/crop")
public Object crop(@RequestParam MultipartFile file) {
String location = multipartProperties.getLocation();
// 生成上传图片的临时文件
File inputFile = FileUtil.multipartFile2File(file, location);
// 调用图片处理工具类
// 裁切成3000x1200的图后,修改分辨率为宽800的图(高度按比例缩小)
CropAttributes cropAttributes = new CropAttributes(3000, 1200, 1000, 500);
ResizeAttributes resizeAttributes = new ResizeAttributes(800, null);
String outputFileName = imageMagickUtils.cropAndResize(location, inputFile.getName(), cropAttributes, resizeAttributes);
// 删除上传图片的临时文件
inputFile.delete();
return outputFileName;
}
图片分辨率修改代码如下(已给出对应注释)
/**
* 图片分辨率修改
*/
@PostMapping("/resize")
public Object resize(@RequestParam MultipartFile file) {
String location = multipartProperties.getLocation();
// 生成上传图片的临时文件
File inputFile = FileUtil.multipartFile2File(file, location);
// 调用图片处理工具类
ResizeAttributes resizeAttributes = new ResizeAttributes(800, null);
String outputFileName = imageMagickUtils.resize(location, inputFile.getName(), resizeAttributes, Suffix.JPG);
// 删除上传图片的临时文件
inputFile.delete();
return outputFileName;
}
}
视频工具FFmpegUtils
方法
1.获取视频信息
getInfo(tempDirectory,inputFileName)
输入参数
参数 | 类型 | 必需 | 注释 |
---|---|---|---|
tempDirectory | String | 是 | 临时文件目录 |
inputFileName | String | 是 | 输入文件名 |
输出参数
参数 | 类型 | 必需 | 注释 |
---|---|---|---|
format | FFFormat | 是 | 文件信息 |
videoInfo | VideoInfo | 是 | 视频信息 |
audioInfo | AudioInfo | 是 | 音频信息 |
其中:
FFFormat
参数 | 类型 | 必需 | 注释 |
---|---|---|---|
filename | String | 是 | 文件名全路径名 |
duration | String | 是 | 文件时长 |
size | String | 是 | 文件大小 |
bitRate | String | 是 | 文件比特率 |
VideoInfo
参数 | 类型 | 必需 | 注释 |
---|---|---|---|
codecName | String | 是 | 视频 编码名称 |
codecType | String | 是 | 类型 video |
width | Integer | 是 | 视频 宽度 |
height | Integer | 是 | 视频 高度 |
frameRate | Integer | 是 | 视频 帧率 |
duration | Integer | 是 | 视频 时长 |
bitRate | Integer | 是 | 视频 比特率 |
nbFrames | Integer | 是 | 视频 总帧数 |
AudioInfo
参数 | 类型 | 必需 | 注释 |
---|---|---|---|
codecName | String | 是 | 音频 编码名称 |
codecType | String | 是 | 类型 audio |
duration | Integer | 是 | 音频 时长 |
bitRate | Integer | 是 | 音频 比特率 |
sampleRate | Integer | 是 | 音频 采样率 |
channels | Integer | 是 | 音频 声道数 1:单声道 2:双声道 |