ps:
经常查阅资料,目前找到两种使用Java获取视频信息的方案:1.xuggler;2.ffmpeg。
官网提供的用Java封装ffmpeg的api:http://www.sauronsoftware.it/projects/jave/download.php,不过最后一次代码更新是2009年,已经多年未维护了。
1. 可以直接在官网上下载JAVE 1.0.2.jar包,放在项目lib包下(官网未提供maven pom)
2.github上使用别人提供的
pom.xml:
<dependency>
<groupId>com.github.dadiyang</groupId>
<artifactId>jave</artifactId>
<version>1.0.4</version>
</dependency>
java代码段:
package com.lucifer;
import it.sauronsoftware.jave.*;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.InputStream;
public class demo {
private static Logger logger = LoggerFactory.getLogger(demo.class);
public static void test(MultipartFile multipartFile) throws Exception {
Encoder encoder = new Encoder();
File file = new File(multipartFile.getOriginalFilename());
InputStream inputStream = multipartFile.getInputStream();
FileUtils.copyInputStreamToFile(inputStream, file);
MultimediaInfo encoderInfo = encoder.getInfo(file);
//视频播放时长
long duration = encoderInfo.getDuration();
logger.debug("视频播放时长:{}秒", duration / 1000);
//多媒体文件格式名称
String encoderInfoFormat = encoderInfo.getFormat();
logger.debug("多媒体文件格式名称:{}", encoderInfoFormat);
//音频 返回一组特定于音频的信息。如果为空,则多媒体文件中没有音频*流。
AudioInfo audio = encoderInfo.getAudio();
if (audio != null) {
//音频流解码器名称
String audioDecoder = audio.getDecoder();
logger.debug("音频流解码器名称:{}", audioDecoder);
}
//视频
VideoInfo videoInfo = encoderInfo.getVideo();
if (videoInfo == null) {
throw new RuntimeException("多媒体文件中没有视频流");
}
//视频流解码器名称
String videoInfoDecoder = videoInfo.getDecoder();
logger.debug("视频流解码器名称:{}", videoInfoDecoder);
//返回视频大小。如果为空,则此信息不可用
VideoSize videoInfoSize = videoInfo.getSize();
if (videoInfoSize == null) {
throw new RuntimeException("视频分辨率获取失败");
}
//视频高度
int height = videoInfoSize.getHeight();
//视频宽度
int width = videoInfoSize.getWidth();
logger.debug("视频高度:{},视频宽度:{}",height,width);
}
}