以MultipartFile
上传时,是否有一种优雅的方式可以检查视频的长度(以毫秒为单位)?
public long checkVideoLength(MultipartFile video) {
long length = 0;
if(video.getContentType().equals("video/mp4")) {
//Resolve the video's length if it's an mp4
}
return length;
}
我一直无法找到一个优雅的解决方案。
答案 0 :(得分:0)
您需要一个可以读取文件并告诉您长度的库。例如,使用包含VLC的Caprica VLCJ,一旦您将MediaPlayer
指向您的文件,就可以要求its length in seconds。不过,我不确定这是否可以在没有接口的情况下工作。
另一个选项是Xuggler,它封装了FFMPEG。在那里,您可以编写以下内容来打开文件并询问其持续时间:
IMediaReader reader = ToolFactory.makeReader(filename);
IContainer container = reader.getContainer();
if (container.queryStreamMetaData() >= 0) {
long duration = container.getDuration(); // <-- got it
}
请注意,.mp4文件(mp4 is a container,而不是编码)可以带来很多变化 - 因此请注意格式错误或不受支持的变体。
VLCJ和Xuggler都是GPLv3;您可能需要将程序与插件隔离,除非您的代码也是GPL,这取决于您如何解释java链接。
另一种选择是调用为您提供号码的系统脚本。这省去了Java集成,但强制您保持脚本更新并使其系统依赖性可用。对于ubuntu linux,这些可以工作:
ffprobe file.mp4 -show_format_entry duration
或
avprobe file.mp4 -show_format_entry duration
或
$ mediainfo --Inform="Video;%Duration%" [inputfile]
所有这些都在this answer
中找到