1、做项目时,需要读取视频文件的时长,网上有很多通过自己写的JNI接口来实现,但由于项目使用了JavaCV和OpenCV,其中有一些处理视频的接口,所以还是想打算尽可能使用JavaCV和OpenCV来实现,经过查阅了相关的一些资料,实现了使用JavaCV获取视频文件时长的功能。
2、基本实现思路:获取视频的总帧数和每秒帧数(FPS),然后通过公式:视频总帧数/每秒帧数(FPS)=时长(单位秒)
3、实现代码如下:
package com.duoduo.javacv.samples;
import static com.googlecode.javacv.cpp.opencv_highgui.CV_CAP_PROP_FPS;
import static com.googlecode.javacv.cpp.opencv_highgui.CV_CAP_PROP_FRAME_COUNT;
import static com.googlecode.javacv.cpp.opencv_highgui.cvCreateFileCapture;
import static com.googlecode.javacv.cpp.opencv_highgui.cvGetCaptureProperty;
import static com.googlecode.javacv.cpp.opencv_highgui.cvReleaseCapture;
import java.io.File;
import com.googlecode.javacv.cpp.opencv_highgui.CvCapture;
/**
* 获取视频时长
*
* @author chengesheng
* @date 2013-5-22 下午11:15:25
* @note VideoFileLength
*/
public final class VideoFileLength {
public static void main(String[] argus) {
float len = getVideoFileLength("D:/J2EE/kdvp/webrtc/webapp/images/bike.avi");
System.out.println("Video length: " + len + " s");
}
public static float getVideoFileLength(String fileName) {
File file = new File(fileName);
if (!file.exists()) {
return 0;
}
float len = 0;
CvCapture capture = cvCreateFileCapture(fileName);
try {
// 获取视频总帧数
long frameCount =(long) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);
// 获取视频每秒帧数
long fps =(long) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
len = (float) frameCount / fps;
} catch (Exception e) {
e.printStackTrace();
} finally {
cvReleaseCapture(capture);
}
return len;
}
}
分享到:
相关推荐
下面是一个使用JavaCV获取视频文件时长的示例代码: ```java public final class VideoFileLength { public static void main(String[] argus) { float len = getVideoFileLength("D:/J2EE/kdvp/webrtc/webapp/...
上传有大小限制,所以工程移除了lib,需要自己下载 javacv jar包下载地址:http://search.maven.org/remotecontent?filepath=org/bytedeco/javacv-platform/1.4.2/javacv-platform-1.4.2-bin.zip
通过使用Java语言和javacv库,我们可以快速获取视频文件中的帧图片,并对其进行等比缩放,以满足不同的应用需求。 知识点一:视频文件中的帧图片获取 * 视频文件中的帧图片获取是指从视频文件中抽取出每一帧图片的...
通过javacv加载字幕文件,然后跟视频合并。首先使用FFmpegFrameGrabber类加载视频文件和字幕文件。然后创建一个FFmpegFrameRecorder对象来将它们合并成一个视频文件。最后,通过循环读取视频和字幕的帧,并将它们...
- 使用 JavaCV 和 OpenCV,可以逐帧读取视频,然后将每一帧保存为单独的图片文件(如 JPEG 或 PNG 格式)。 - 这通常涉及到 `VideoCapture` 类来打开视频文件,然后通过 `read()` 方法获取帧,再利用 `imwrite()` ...
JavaCV 是一个强大的Java库,它为Java程序员提供了与...以上就是使用JavaCV将通过Socket获取的视频流推送到RTMP服务器涉及的核心技术点。在实际开发中,开发者需要理解这些技术,并结合具体需求进行相应的编程实现。
首先,`ffmpeg-3.2.1-1.3-*.jar` 文件是JavaCV中的FFmpeg绑定,它允许我们直接在Java代码中调用FFmpeg的强大功能,如视频解码、处理和编码。FFmpeg是一个跨平台的命令行工具,用于处理各种多媒体文件,包括视频和...
在本文中,我们将详细介绍如何使用JavaCV实现获取视频每帧并保存。 标题:JavaCV实现获取视频每帧并保存 描述:主要为大家详细介绍了JavaCV实现获取视频每帧并保存,具有一定的参考价值,感兴趣的小伙伴们可以参考...
它可能包含了使用 FFmpegFrameGrabber 获取视频帧,用 OpenCV 进行图像旋转和转正的代码逻辑。 综上所述,这个项目涉及的关键技术包括使用 JavaCV 作为桥梁,通过 FFmpeg 读取视频,OpenCV 处理图像,尤其是截图和...
使用详情见博客:https://blog.csdn.net/weixin_38500202/article/details/110087106
至于“录制视频”,JavaCV提供了FFmpegFrameRecorder类,它可以将视频帧和音频样本记录到本地文件。开发者需要创建一个FFmpegFrameRecorder实例,设置输出文件路径、视频编码、帧率等参数,然后在每帧处理完毕后调用...
2)、可选择使用javaCV推流、ffmpeg推流两种方式。 3)、javaCV仅支持拉去或推送H264压缩方式的流。 4)、ffmpeg采用命令的方式拉流和推流,支持H265和H264。 5)、支持获取流的访问数,可设置自动关闭0访问数的...
赠送Maven依赖信息文件:javacv-1.5.7.pom; 包含翻译后的API文档:javacv-1.5.7-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.bytedeco:javacv:1.5.7; 标签:bytedeco、javacv、中文文档、jar包、java; ...
这里我们使用的是JavaCV库,这是一个强大的Java接口,提供了OpenCV、FFmpeg等开源库的功能,使得在Java或者Android中处理图像和视频变得更加便捷。本项目的核心目标是通过JavaCV将指定目录下的JPG图片序列合成成一个...
java调用ffmpeg转换视频,并读取转换后视频的分辨率、大小以及时长。...步骤: 1.研究java如何调用外部程序 2.研究ffmpeg转换视频格式的命令 3.利用xuggle获取ffmpeg解析的ts流的时长、分辨率以及文件大小。
赠送Maven依赖信息文件:javacv-1.5.5.pom; 包含翻译后的API文档:javacv-1.5.5-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.bytedeco:javacv:1.5.5; 标签:bytedeco、javacv、中文文档、jar包、java; ...
JavaCV(Java Computer Vision)是一个强大的开源库,它为Java开发者提供了一系列计算机视觉相关的API,以便在Java平台上进行图像和视频处理。这个库是基于GPLv2协议发布的,这意味着你可以自由地使用、修改和分发它...
在使用JavaCV时,首先需要将这两个JAR包加入到项目的类路径中。如果是在Maven或Gradle项目中,可以通过添加依赖来实现。例如,在Maven的`pom.xml`文件中,你会看到类似这样的配置: ```xml <groupId>org....
JavaCV作为一个库,提供了广泛的图像处理函数,如图像滤波、特征检测、对象识别、视频分析等。 压缩包内的文件列表如下: 1. `.gitignore`:这是一个Git配置文件,用于指定哪些文件或目录应该被Git忽略,不纳入...
JavaCV通过FFmpegJava接口,使Java开发者能够处理音视频文件,实现视频帧的捕获、视频剪辑、格式转换等功能。 4. **JavaCV的版本1.5.5** 版本1.5.5是JavaCV的一个稳定版本,包含了多项更新和改进。开发者可以通过...