`
cgs1999
  • 浏览: 537319 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用JavaCV获取视频文件时长

阅读更多
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;
	}
}
0
7
分享到:
评论
4 楼 luliangy 2014-05-07  
litao500 写道
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jniopencv_highgui in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1709)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:711)
at com.googlecode.javacpp.Loader.load(Loader.java:586)
at com.googlecode.javacpp.Loader.load(Loader.java:540)
at com.googlecode.javacv.cpp.opencv_highgui.<clinit>(opencv_highgui.java:79)
at com.test.VideoFileLength.getVideoFileLength(VideoFileLength.java:34)
at com.test.VideoFileLength.main(VideoFileLength.java:23)
Caused by: java.lang.UnsatisfiedLinkError: no opencv_highgui248 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1709)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:711)
at com.googlecode.javacpp.Loader.load(Loader.java:577)
... 4 more

引入javacv-cppjars里面的opencv-2.4.X-XXX-xXXXX.jar到工程里面就OK了
3 楼 cgs1999 2014-01-21  
litao500 写道
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jniopencv_highgui in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1709)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:711)
at com.googlecode.javacpp.Loader.load(Loader.java:586)
at com.googlecode.javacpp.Loader.load(Loader.java:540)
at com.googlecode.javacv.cpp.opencv_highgui.<clinit>(opencv_highgui.java:79)
at com.test.VideoFileLength.getVideoFileLength(VideoFileLength.java:34)
at com.test.VideoFileLength.main(VideoFileLength.java:23)
Caused by: java.lang.UnsatisfiedLinkError: no opencv_highgui248 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1709)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:711)
at com.googlecode.javacpp.Loader.load(Loader.java:577)
... 4 more


应该是缺少了库文件opencv_highgui248,到JavaCV去下载javacv-0.7-cppjars.zip,

地址 https://code.google.com/p/javacv/downloads/list
2 楼 litao500 2014-01-20  
需要哪些配置吗????
1 楼 litao500 2014-01-20  
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jniopencv_highgui in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1709)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:711)
at com.googlecode.javacpp.Loader.load(Loader.java:586)
at com.googlecode.javacpp.Loader.load(Loader.java:540)
at com.googlecode.javacv.cpp.opencv_highgui.<clinit>(opencv_highgui.java:79)
at com.test.VideoFileLength.getVideoFileLength(VideoFileLength.java:34)
at com.test.VideoFileLength.main(VideoFileLength.java:23)
Caused by: java.lang.UnsatisfiedLinkError: no opencv_highgui248 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1709)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:711)
at com.googlecode.javacpp.Loader.load(Loader.java:577)
... 4 more

相关推荐

    JavaCV获取视频文件时长的方法

    下面是一个使用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和OpenCV从视频文件中获取帧,并提供了具体的代码实例...

    java调用ffmpeg转换视频,并读取转换后视频的分辨率、大小以及时长

    java调用ffmpeg转换视频,并读取转换后视频的分辨率、大小以及时长。...步骤: 1.研究java如何调用外部程序 2.研究ffmpeg转换视频格式的命令 3.利用xuggle获取ffmpeg解析的ts流的时长、分辨率以及文件大小。

    使用JavaCV实现读取视频信息及自动截取封面图.doc

    使用 JavaCV 实现读取视频信息及自动截取封面图 JavaCV 是一个基于 Java 的计算机视觉库,提供了访问 OpenCV 和 FFmpeg 等库的接口,能够帮助开发者快速实现计算机视觉相关的功能。在视频网站项目中,需要读取视频...

    Java获取视频时长及截取帧截图详解

    获取视频时长是 Java 获取视频信息的基础,以 JavaCV 库为例,使用 FFmpeg 库来读取视频文件并获取时长。首先,需要添加 JavaCV 依赖: ``` &lt;groupId&gt;org.bytedeco &lt;artifactId&gt;javacv-platform &lt;version&gt;1.4.4 ...

    视频时长和截取视频封面(Java)

    例如,使用Xuggler库,你可以创建一个`Container`对象来打开视频文件,然后获取`Duration`属性来得到时长: ```java import com.xuggle.mediatool.IMediaReader; import com.xuggle.mediatool.IMediaViewer; import...

    android 使用javacv进行录像[模仿vine].zip

    3. **JavaCV的使用**:在JavaCV中,我们可以通过`FFmpegFrameGrabber`来获取摄像头的实时视频流,然后通过`FFmpegFrameRecorder`来录制这些视频流。这两个类提供了对视频捕获和录制过程的精细控制,比如调整图像格式...

    安卓Andriod源码——使用javacv进行录像[模仿vine].zip

    这个压缩包文件“安卓Andriod源码——使用javacv进行录像[模仿vine].zip”提供了一个使用JavaCV库进行视频录制的示例项目,其目标是模仿流行的Vine应用。JavaCV是一个方便的Java接口,它封装了多个计算机视觉库,...

    安卓开发-android 使用javacv进行录像[模仿vine].zip.zip

    Vine应用以6秒短视频著称,模仿Vine的关键在于限制录制时长。在JavaCV中,可以通过设置`FFmpegFrameRecorder`的`setDuration()`方法来设定最大录制时间。同时,为了提供类似Vine的实时预览和录制体验,开发者需要...

    Android高级应用源码-android 使用javacv进行录像[模仿vine].zip

    这个源码项目展示了如何利用JavaCV库在Android上实现高效、高质量的视频录制。JavaCV是一个Java接口,用于访问多个计算机视觉库,如OpenCV、FFmpeg等,这些库在处理图像和视频方面非常强大。 首先,我们需要理解...

    java后台利用ffmpeg实现将视频截取某一帧图片并保存

    首先,读取视频文件的元数据,创建解码器上下文,然后逐个读取视频包并解码。 5. **保存图像**:一旦解码得到视频帧(通常是`org.bytedeco.ffmpeg.avutil.AVFrame`类型),你可以使用`sws_scale()`函数将其转换为...

    Java使用FFmpeg实现mp4转m3u8

    上述命令会将`input.mp4`转换为`output.m3u8`,`-hls_time 10`表示每个TS分片的时长为10秒,`-hls_list_size 0`表示不保留旧的TS文件,仅保留最新的分片。 4. 处理结果和错误: 在Java程序中,你需要监听`process...

    opencv开发的视频编辑器

    - 性能优化是关键,特别是在处理高清或长时长视频时,应避免不必要的内存拷贝和提高处理速度。 - 用户界面的响应性和流畅性也非常重要,需要合理设计线程和事件处理机制。 以上是基于OpenCV开发视频编辑器的主要...

    模糊运动图像运动长度与运动角度估计.docx.zip

    Java是一种广泛应用的编程语言,拥有丰富的库和框架,如OpenCV和JavaCV,可以方便地进行图像处理和计算机视觉任务。开发人员可以利用这些工具来实现上述的运动长度和角度估计算法。 总之,模糊运动图像的运动长度与...

Global site tag (gtag.js) - Google Analytics