public static void main(String[] args) {
String result = processFLV("E:\\test\\京视传媒\\体育类\\xiao.flv");
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("e:\\videoconver\\ffmpeg\\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;
}
}
分享到:
相关推荐
源码可能包含定位起始和结束时间,然后使用FFmpeg的`-ss`和`-t`参数进行切割的函数。 5. **获取视频信息**:源码可能包含解析FFmpeg的元数据信息,如分辨率、编码器、帧率、时长等。这些信息对于视频处理和分析非常...
这样,Java代码可以调用FFmpeg的函数,执行多媒体操作,而无需离开Java虚拟机。Jave项目可能是其中一个已经封装好的库,允许开发者通过简单的Java API来调用FFmpeg的功能。 1. **视频截图**:使用Java封装的FFmpeg...
5. **保存图像**:一旦解码得到视频帧(通常是`org.bytedeco.ffmpeg.avutil.AVFrame`类型),你可以使用`sws_scale()`函数将其转换为RGB格式,以便于保存为常见的图像格式,如JPEG或PNG。`org.bytedeco.ffmpeg....
Java FFmpeg视频转换是一个在Java开发中常见的任务,它涉及到使用FFmpeg库通过Java代码来处理多媒体文件,如视频的编码、解码、格式转换等。FFmpeg是一个强大的跨平台命令行工具,提供了丰富的功能,包括视频转码、...
本文将详细介绍如何使用Java和OpenCV从视频文件中获取帧,并提供了具体的代码实例。 OpenCV是计算机视觉和机器学习的开源库,它提供了大量的图像和视频处理函数库。Java是最流行的编程语言之一,使用Java和OpenCV...
* 具体合成视频函数 * * @param videoInputPath * 原视频的全路径 * * @param audioInputPath * 音频的全路径 * * @param videoOutPath * 视频与音频结合之后的视频的路径 */ public static void ...
在本项目中,我们将探讨如何使用JavaCV、OpenCV和FFmpeg库来实现在Java环境中将视频帧转换为图像,并进一步进行人脸识别。首先,我们来理解这三个关键组件: 1. **JavaCV**: JavaCV(Java Computer Vision)是Java...
本项目主要关注的是如何使用FFmpeg进行视频解码并将其转换为YUV像素数据,同时获取视频的基本参数信息。 首先,我们要理解视频的基本参数信息。这通常包括视频的分辨率(宽度和高度)、帧率(每秒显示的帧数)、...
在JavaCV中,我们可以使用FFmpeg的Java接口来实现实时音视频录制。这允许我们在处理完每一帧图像后,不仅保存图像,还可以将其与音频同步录制到一个视频文件中。 在实现这个功能时,首先需要配置好JavaCV。这通常...
使用ffmpeg的API,如`avformat_open_input`打开视频文件,`avformat_find_stream_info`获取流信息,`avcodec_find_decoder`找到合适的解码器,`avcodec_decode_video2`进行实际的解码工作。解码后的像素数据通常是...
4. **调用FFmpeg函数**:在C/C++代码中,你可以直接使用FFmpeg的API来执行命令。例如,使用`avformat_open_input`、`avformat_find_stream_info`、`avcodec_decode_audio4`等函数进行音频或视频处理。 5. **权限...
- 视频分析:`ffprobe`工具用于获取媒体文件的元信息,如分辨率、码率等。 7. FFmpeg开发: - 使用libav*库进行程序开发,提供C和C++接口。 - 动态链接或静态链接FFmpeg库到项目中。 - 示例代码和API参考文档可...
JNI允许Java代码直接调用C/C++函数,因此我们需要编写JNI头文件(`.h`),定义对应的C/C++函数,然后在对应的`.cpp`文件中实现这些函数。这样,我们就可以在Android的Java层调用FFmpeg的解码功能。 3. **视频解码...
总结起来,这个压缩包提供了一整套在Java环境中使用JavaCV、JavaCPP和FFmpeg获取视频第一帧所需的资源。开发者可以参考`FrameGrabberUtil.java`来编写自己的代码,或者利用Maven配置文件来搭建开发环境。通过这个...
使用avformat_open_input()函数打开默认音频设备,avformat_find_stream_info()获取流信息。 5. **音频数据读取**:使用av_read_frame()函数从设备中读取音频帧(AVPacket)。每个AVPacket包含一帧或多帧音频数据。...
FFmpeg是一款强大的开源多媒体处理工具,它包含了音视频编解码库libavcodec、容器格式处理库libavformat、图像滤镜库libavfilter以及音视频...对于想要在Java项目中使用FFmpeg的开发者来说,这是一个非常有价值的参考。
通过以上技术的整合,"FFmpeg-QT-rtsp-master"项目实现了从RTSP源获取视频流,并在Qt界面中实时显示的能力。这不仅涉及到多媒体处理的基础知识,也考验了开发者对多线程、图形界面设计以及跨库协作的理解和实践能力...
这些方法会映射到对应的C/C++函数,如`avformat_open_input()`用于打开输入文件,`avformat_find_stream_info()`获取流信息,`avcodec_decode_video2()`进行解码,以及`sws_scale()`进行色彩空间转换等。 硬解码是...
然后,我们可以通过Java或Kotlin的JNI(Java Native Interface)调用FFmpeg的函数。例如,使用`avformat_open_input()`打开视频文件,`avformat_find_stream_info()`获取流信息,`avcodec_find_decoder()`查找解码器...
通过调用`avformat_open_input()`函数打开RTSP流,并使用`avformat_find_stream_info()`获取流信息。 2. 找到H264视频流:FFmpeg会自动检测RTSP流中的所有媒体流,包括音频和视频。我们可以通过遍历`...