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/...
"java使用OpenCV从视频文件中获取帧" Java使用OpenCV从视频文件中获取帧是指使用Java语言和OpenCV库从视频文件中提取图像帧的过程。本文将详细介绍如何使用Java和OpenCV从视频文件中获取帧,并提供了具体的代码实例...
java调用ffmpeg转换视频,并读取转换后视频的分辨率、大小以及时长。...步骤: 1.研究java如何调用外部程序 2.研究ffmpeg转换视频格式的命令 3.利用xuggle获取ffmpeg解析的ts流的时长、分辨率以及文件大小。
使用 JavaCV 实现读取视频信息及自动截取封面图 JavaCV 是一个基于 Java 的计算机视觉库,提供了访问 OpenCV 和 FFmpeg 等库的接口,能够帮助开发者快速实现计算机视觉相关的功能。在视频网站项目中,需要读取视频...
获取视频时长是 Java 获取视频信息的基础,以 JavaCV 库为例,使用 FFmpeg 库来读取视频文件并获取时长。首先,需要添加 JavaCV 依赖: ``` <groupId>org.bytedeco <artifactId>javacv-platform <version>1.4.4 ...
例如,使用Xuggler库,你可以创建一个`Container`对象来打开视频文件,然后获取`Duration`属性来得到时长: ```java import com.xuggle.mediatool.IMediaReader; import com.xuggle.mediatool.IMediaViewer; import...
3. **JavaCV的使用**:在JavaCV中,我们可以通过`FFmpegFrameGrabber`来获取摄像头的实时视频流,然后通过`FFmpegFrameRecorder`来录制这些视频流。这两个类提供了对视频捕获和录制过程的精细控制,比如调整图像格式...
这个压缩包文件“安卓Andriod源码——使用javacv进行录像[模仿vine].zip”提供了一个使用JavaCV库进行视频录制的示例项目,其目标是模仿流行的Vine应用。JavaCV是一个方便的Java接口,它封装了多个计算机视觉库,...
Vine应用以6秒短视频著称,模仿Vine的关键在于限制录制时长。在JavaCV中,可以通过设置`FFmpegFrameRecorder`的`setDuration()`方法来设定最大录制时间。同时,为了提供类似Vine的实时预览和录制体验,开发者需要...
这个源码项目展示了如何利用JavaCV库在Android上实现高效、高质量的视频录制。JavaCV是一个Java接口,用于访问多个计算机视觉库,如OpenCV、FFmpeg等,这些库在处理图像和视频方面非常强大。 首先,我们需要理解...
首先,读取视频文件的元数据,创建解码器上下文,然后逐个读取视频包并解码。 5. **保存图像**:一旦解码得到视频帧(通常是`org.bytedeco.ffmpeg.avutil.AVFrame`类型),你可以使用`sws_scale()`函数将其转换为...
上述命令会将`input.mp4`转换为`output.m3u8`,`-hls_time 10`表示每个TS分片的时长为10秒,`-hls_list_size 0`表示不保留旧的TS文件,仅保留最新的分片。 4. 处理结果和错误: 在Java程序中,你需要监听`process...
- 性能优化是关键,特别是在处理高清或长时长视频时,应避免不必要的内存拷贝和提高处理速度。 - 用户界面的响应性和流畅性也非常重要,需要合理设计线程和事件处理机制。 以上是基于OpenCV开发视频编辑器的主要...
Java是一种广泛应用的编程语言,拥有丰富的库和框架,如OpenCV和JavaCV,可以方便地进行图像处理和计算机视觉任务。开发人员可以利用这些工具来实现上述的运动长度和角度估计算法。 总之,模糊运动图像的运动长度与...