public static void main(String[] args) {
String result = processFLV("E:\\video\\test.mp4");
PatternCompiler compiler =new Perl5Compiler();
try {
String regexDuration ="Duration: (.*?), start: (.*?), bitrate: (\\d*) kb\\/s";
String regexVideo ="Video: (.*?), (.*?), (.*?)[,\\s]";
String regexAudio ="Audio: (\\w*), (\\d*) Hz";
Pattern patternDuration = compiler.compile(regexDuration,Perl5Compiler.CASE_INSENSITIVE_MASK);
PatternMatcher matcherDuration = new Perl5Matcher();
if(matcherDuration.contains(result, patternDuration)){
MatchResult re = matcherDuration.getMatch();
System.out.println("提取出播放时间 ===" +re.group(1));
System.out.println("开始时间 =====" +re.group(2));
System.out.println("bitrate 码率 单位 kb==" +re.group(3));
}
Pattern patternVideo = compiler.compile(regexVideo,Perl5Compiler.CASE_INSENSITIVE_MASK);
PatternMatcher matcherVideo = new Perl5Matcher();
if(matcherVideo.contains(result, patternVideo)){
MatchResult re = matcherVideo.getMatch();
System.out.println("编码格式 ===" +re.group(1));
System.out.println("视频格式 ===" +re.group(2));
System.out.println(" 分辨率 == =" +re.group(3));
}
Pattern patternAudio = compiler.compile(regexAudio,Perl5Compiler.CASE_INSENSITIVE_MASK);
PatternMatcher matcherAudio = new Perl5Matcher();
if(matcherAudio.contains(result, patternAudio)){
MatchResult re = matcherAudio.getMatch();
System.out.println("音频编码 ===" +re.group(1));
System.out.println("音频采样频率 ===" +re.group(2));
}
} catch (MalformedPatternException e) {
e.printStackTrace();
}
}
// ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
private static String processFLV(String inputPath) {
/*
if (!checkfile(inputPath)){
_log.warn(inputPath+" is not file");
return false;
}
*/
List<String> commend=new java.util.ArrayList<String>();
// commend.add("D:\\ffmpeg-20140727-git-ad91bf8-win32-static\\bin\\ffmpeg ");//可以设置环境变量从而省去这行
commend.add("ffmpeg");
commend.add("-i");
commend.add(inputPath);
try {
ProcessBuilder builder = new ProcessBuilder();
builder.command(commend);
builder.redirectErrorStream(true);
Process p= builder.start();
//1. start
BufferedReader buf = null; // 保存ffmpeg的输出结果流
String line = null;
//read the standard output
buf = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuffer sb= new StringBuffer();
while ((line = buf.readLine()) != null) {
System.out.println(line);
sb.append(line);
continue;
}
int ret = p.waitFor();//这里线程阻塞,将等待外部转换进程运行成功运行结束后,才往下执行
//1. end
return sb.toString();
} catch (Exception e) {
// System.out.println(e);
return null;
}
}
分享到:
相关推荐
在Java中使用FFmpeg获取视频时长,首先需要安装FFmpeg命令行工具,并将其添加到系统的PATH环境变量中,以便Java程序可以调用。此外,还需要引入一个Java的FFmpeg绑定库,例如`ffmpeg-java`或`fluent-ffmpeg`,这些库...
总结来说,通过Java调用FFmpeg获取视频时长的关键知识点包括了解FFmpeg的功能和作用、掌握Java中ProcessBuilder类的使用方法、熟悉正则表达式在字符串匹配中的应用以及对FFmpeg命令输出结果的解析。掌握这些知识点后...
java调用ffmpeg转换视频,并读取转换后视频的分辨率、大小以及时长。主要参考http://blog.sina.com.cn/s/blog_a5116c670102wiwj.html 的代码方式。步骤: 1.研究java如何调用外部程序 2.研究ffmpeg转换视频格式的...
根据提供的文件信息,我们可以深入探讨如何使用FFmpeg来获取视频的关键属性,如视频时长、码率、编码格式、分辨率以及音频的相关信息,并且通过Java编程语言实现这一过程。 ### FFmpeg简介 FFmpeg是一个非常强大的...
Java使用FFmpeg解析视频、截图和获取播放时间的实践是一个重要的技术主题,尤其在多媒体处理领域。FFmpeg是一个强大的开源工具集,包含了多种用于处理音频和视频的工具,如ffprobe、ffmpeg等。在Java中集成FFmpeg,...
本篇文章将详细探讨如何使用`ffmpeg`来获取视频的封面图以及视频的时长信息,尤其对于Java开发者来说,这些知识是进行多媒体处理时的基础。 首先,让我们了解如何通过`ffmpeg`获取视频封面图。视频封面图通常是指...
5. **获取视频信息**:源码可能包含解析FFmpeg的元数据信息,如分辨率、编码器、帧率、时长等。这些信息对于视频处理和分析非常有用。 6. **环境搭建**:配合"windows下java调用ffmpeg视频处理环境搭建",这部分...
总的来说,获取视频时长需要对Java的文件I/O、网络请求以及多媒体处理有一定的了解。使用合适的库可以简化这个过程,提高效率。在实际应用中,确保处理的健壮性和效率是非常重要的,例如处理网络延迟、错误重试等。
1. **获取视频时长**: 视频时长通常存储在视频文件的元数据中,JAVE可以通过解析这些数据来获取。以下是一个简单的示例代码片段: ```java import it.sauronsoftware.jave.*; File source = new File("path_...
使用ffmpeg.exe获取文件属性信息,ffmpeg是java开发的用于多媒体文件编辑的命令行工具,有多个版本,功能比较强大,C#中可以在进程外异步调用这个工具 using (System.Diagnostics.Process pro = new System....
获取视频时长,我们可以使用`ffprobe`,它是FFmpeg的一部分,用于提取媒体元数据。命令可能如下: ```java String durationCommand = "ffprobe -v error -show_entries format=duration -of default=noprint_...
3. **获取视频时长**:视频流中包含了视频的详细信息,如编码、分辨率等。你可以通过`getDuration()`方法获取视频的持续时间,单位为微秒。 ```java long durationMicros = videoStream.map(FFmpegStream::...
util 类 内含 java-1.0.2.jar 开发人员可以使用JAVE 在不同的格式间转换视频和音频 例如将 AVI 转成 MPEG 动画 等等 ffmpeg 中可以完成的在 JAVE 都有对应的方法
总的来说,Xuggler为Java开发者提供了一个强大且灵活的工具,用于处理和分析音视频文件,包括获取视频的时长、分辨率、高宽比和码率等关键信息。通过熟练掌握Xuggler的使用,你可以轻松地构建出能够处理多媒体文件的...
当然,为了更精确地截取特定帧,你需要解析视频的时长信息,并根据需要调整`-vframes`参数。 总结来说,通过Java后台结合`ffmpeg.jar`,我们可以轻松地实现从视频中截取特定帧图片的功能。这涉及到了FFmpeg的加载、...
ffmpeg本身没有支持java的AIP,所以在这里使用java中runtime操作ffmpeg获取视频文件的分辨率、码率、时长等信息,以及自动截图功能。 其中有个java项目、ffmpeg-win32程序包
上述命令会将`input.mp4`转换为`output.m3u8`,`-hls_time 10`表示每个TS分片的时长为10秒,`-hls_list_size 0`表示不保留旧的TS文件,仅保留最新的分片。 4. 处理结果和错误: 在Java程序中,你需要监听`process...
java 服务器处理使用ffmpeg处理视频工具类,使用前先按照ffmpeg,并将其安装目录的bin路径加入环境变量,目前主要实现压缩,转码,增加字幕(可设定字体及位置),获取视频时长及源数据信息等功能,也可再此基础上...
因此,在使用Java和OpenCV从视频文件中获取帧时,需要确保视频文件格式正确并且ffmpeg已安装正确。 Java使用OpenCV从视频文件中获取帧是一个非常有用的技术,它可以应用于很多领域,例如视频监控、图像识别、视频...
要使用`ffmpeg`在命令行获取视频时长,可以执行以下命令: ```bash ffmpeg -i input.mp4 -f null - 2>&1 | grep "Duration" | awk '{print $2}' | tr -d ,' ``` 这个命令会输出视频的时长,格式通常是`HH:MM:SS.MS...