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获取视频文件时长的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
上传有大小限制,所以工程移除了lib,需要自己下载 javacv jar包下载地址:http://search.maven.org/remotecontent?filepath=org/bytedeco/javacv-platform/1.4.2/javacv-platform-1.4.2-bin.zip
通过javacv加载字幕文件,然后跟视频合并。首先使用FFmpegFrameGrabber类加载视频文件和字幕文件。然后创建一个FFmpegFrameRecorder对象来将它们合并成一个视频文件。最后,通过循环读取视频和字幕的帧,并将它们...
用JAVA获取视频文件中的帧图片并等比缩放,java 获取视频中图片 缩放比例 javacv
使用详情见博客:https://blog.csdn.net/weixin_38500202/article/details/110087106
赠送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; ...
2)、可选择使用javaCV推流、ffmpeg推流两种方式。 3)、javaCV仅支持拉去或推送H264压缩方式的流。 4)、ffmpeg采用命令的方式拉流和推流,支持H265和H264。 5)、支持获取流的访问数,可设置自动关闭0访问数的...
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对视频进行截图,截取视频中的三张图片(截取图片可自由调整到截取每一帧图片),并将图片旋转为正向,window linux 通用(完整版)
赠送Maven依赖信息文件:javacv-1.5.5.pom; 包含翻译后的API文档:javacv-1.5.5-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.bytedeco:javacv:1.5.5; 标签:bytedeco、javacv、中英对照文档、...
javacv 与 opencv对视频进行处理,截取视频中的三张图片(截取图片可自由截取每一帧图片),并旋转转正图片为正向window linux 通用
(1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以...
赠送Maven依赖信息文件:javacv-1.5.7.pom; 包含翻译后的API文档:javacv-1.5.7-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.bytedeco:javacv:1.5.7; 标签:bytedeco、javacv、中英对照文档、...
javaCV将socket获取的视频流推到流媒体(RTMP)服务器所需要的jar
安卓下实现的 实时相机滤镜显示 + 拍照 + 处理结果视频音频录制 demo (需要 javacv, 已配置好) 更多详情、使用方法,请下载后阅读README.md文件
java+FFmpeg+JavaCV实现无控件HTML页面视频实时预览,录像等,RTSP协议
从javacv-platform-1.3.3-bin.zip中抽出来的:javacpp.jar、javacv.jar、javacv-platform.jar、opencv.jar、opencv-android-arm.jar、opencv-android-x86.jar、opencv-linux-armhf.jar 、opencv-linux-ppc64le.jar、...
提取本地视频的帧图片,根据本地视频生成gif,jar版本是1.4.1,maven项目
使用javacv实现的图像sift特征提取示例