`
cgs1999
  • 浏览: 532028 次
  • 性别: 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/...

    使用Javacv截取视频缩略图

    上传有大小限制,所以工程移除了lib,需要自己下载 javacv jar包下载地址:http://search.maven.org/remotecontent?filepath=org/bytedeco/javacv-platform/1.4.2/javacv-platform-1.4.2-bin.zip

    用JAVA获取视频文件中的帧图片并等比缩放

    通过使用Java语言和javacv库,我们可以快速获取视频文件中的帧图片,并对其进行等比缩放,以满足不同的应用需求。 知识点一:视频文件中的帧图片获取 * 视频文件中的帧图片获取是指从视频文件中抽取出每一帧图片的...

    javacv加载字幕文件并合成视频

    通过javacv加载字幕文件,然后跟视频合并。首先使用FFmpegFrameGrabber类加载视频文件和字幕文件。然后创建一个FFmpegFrameRecorder对象来将它们合并成一个视频文件。最后,通过循环读取视频和字幕的帧,并将它们...

    Javacv处理视频,提取成帧图片,生成gif

    - 使用 JavaCV 和 OpenCV,可以逐帧读取视频,然后将每一帧保存为单独的图片文件(如 JPEG 或 PNG 格式)。 - 这通常涉及到 `VideoCapture` 类来打开视频文件,然后通过 `read()` 方法获取帧,再利用 `imwrite()` ...

    javaCV将socket获取的视频流推到流媒体(RTMP)服务器jar

    JavaCV 是一个强大的Java库,它为Java程序员提供了与...以上就是使用JavaCV将通过Socket获取的视频流推送到RTMP服务器涉及的核心技术点。在实际开发中,开发者需要理解这些技术,并结合具体需求进行相应的编程实现。

    视频截图工具javacv

    首先,`ffmpeg-3.2.1-1.3-*.jar` 文件是JavaCV中的FFmpeg绑定,它允许我们直接在Java代码中调用FFmpeg的强大功能,如视频解码、处理和编码。FFmpeg是一个跨平台的命令行工具,用于处理各种多媒体文件,包括视频和...

    JavaCV实现获取视频每帧并保存

    在本文中,我们将详细介绍如何使用JavaCV实现获取视频每帧并保存。 标题:JavaCV实现获取视频每帧并保存 描述:主要为大家详细介绍了JavaCV实现获取视频每帧并保存,具有一定的参考价值,感兴趣的小伙伴们可以参考...

    javacv截取视频图像并旋转为正向

    它可能包含了使用 FFmpegFrameGrabber 获取视频帧,用 OpenCV 进行图像旋转和转正的代码逻辑。 综上所述,这个项目涉及的关键技术包括使用 JavaCV 作为桥梁,通过 FFmpeg 读取视频,OpenCV 处理图像,尤其是截图和...

    使用JavaCV中的FFmpeg合成视频

    使用详情见博客:https://blog.csdn.net/weixin_38500202/article/details/110087106

    android studio javacv 播放rstp流、抓图、录制视频功能

    至于“录制视频”,JavaCV提供了FFmpegFrameRecorder类,它可以将视频帧和音频样本记录到本地文件。开发者需要创建一个FFmpegFrameRecorder实例,设置输出文件路径、视频编码、帧率等参数,然后在每帧处理完毕后调用...

    Java 使用javaCV、ffmpeg拉流H265 RTSP转推H264 RTMP可获取流访问人数(源代码)

    2)、可选择使用javaCV推流、ffmpeg推流两种方式。 3)、javaCV仅支持拉去或推送H264压缩方式的流。 4)、ffmpeg采用命令的方式拉流和推流,支持H265和H264。 5)、支持获取流的访问数,可设置自动关闭0访问数的...

    javacv-1.5.7-API文档-中文版.zip

    赠送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)

    这里我们使用的是JavaCV库,这是一个强大的Java接口,提供了OpenCV、FFmpeg等开源库的功能,使得在Java或者Android中处理图像和视频变得更加便捷。本项目的核心目标是通过JavaCV将指定目录下的JPG图片序列合成成一个...

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

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

    javacv-1.5.5-API文档-中文版.zip

    赠送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需要导入的包

    JavaCV(Java Computer Vision)是一个强大的开源库,它为Java开发者提供了一系列计算机视觉相关的API,以便在Java平台上进行图像和视频处理。这个库是基于GPLv2协议发布的,这意味着你可以自由地使用、修改和分发它...

    JavaCV两个必须jar包:javacpp-1.4.1.jar和javacv-platform-1.4.1.jar

    在使用JavaCV时,首先需要将这两个JAR包加入到项目的类路径中。如果是在Maven或Gradle项目中,可以通过添加依赖来实现。例如,在Maven的`pom.xml`文件中,你会看到类似这样的配置: ```xml &lt;groupId&gt;org....

    javacv-1.4.4-source_javacv-1.4.4_JAVACV_图像处理_

    JavaCV作为一个库,提供了广泛的图像处理函数,如图像滤波、特征检测、对象识别、视频分析等。 压缩包内的文件列表如下: 1. `.gitignore`:这是一个Git配置文件,用于指定哪些文件或目录应该被Git忽略,不纳入...

    javacv-platform-1.5.5-bin.zip

    JavaCV通过FFmpegJava接口,使Java开发者能够处理音视频文件,实现视频帧的捕获、视频剪辑、格式转换等功能。 4. **JavaCV的版本1.5.5** 版本1.5.5是JavaCV的一个稳定版本,包含了多项更新和改进。开发者可以通过...

Global site tag (gtag.js) - Google Analytics