Java获取视频时长、大小的示例

项目中有这样一个需求,网页上上传了一个视频,需要获取此视频的时长、大小,把这两个数据返回给前台在页面显示。后台使用的是springboot框架,项目部署在linux上面。下面是核心代码:

    1、pom文件中需要导入的jar包依赖

(分为两部分:核心包、ffmpeg包两部分,ffmpeg包又分为Windows环境以及Linux环境,同时又区分32位系统以及64位系统。针对于不同的运行环境要导入不同的包,这一点对于开发、测试环境为Window而生产环境为Linux的情况,尤其要注意需要导入所有的包,使其在两种环境下都能够使用)

  <dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-all-deps</artifactId>
    <version>2.6.0</version>
  </dependency>
  <dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-core</artifactId>
    <version>2.4.5</version>
  </dependency>

  <!-- window32位 ffmpeg -->
  <dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-native-win32</artifactId>
    <version>2.4.5</version>
  </dependency>

  <!-- window64位 ffmpeg -->
  <dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-native-win64</artifactId>
    <version>2.4.5</version>
  </dependency>

  <!-- linux32位 ffmpeg -->
  <dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-native-linux32</artifactId>
    <version>2.4.6</version>
  </dependency>

  <!-- linux64位 ffmpeg -->
  <dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-native-linux64</artifactId>
    <version>2.4.6</version>
  </dependency>

    2、controller层代码

package com.aaa.bbb.controller;

import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import ws.schild.jave.MultimediaInfo;
import ws.schild.jave.MultimediaObject;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.nio.channels.FileChannel;

@Slf4j
@RestController
@RequestMapping("/readVideo")
@Api(tags = "获取视频时长、大小相关信息的接口")
public class ReadVideoController {

/**
 * 获取视频时长
 *
 * @param fileUrl
 * @return
 */
@PostMapping("/videoLengthAndSize")
public static String getLengthAndSize(@RequestParam String fileUrl) throws FileNotFoundException {
  ReadVideoController r = new ReadVideoController();
  String path = ResourceUtils.getURL("classpath:").getPath() + "static";
  System.out.println("666666666666666666666666666666【" + path + "】666666666666666666666666666666】");
  fileUrl = path + fileUrl;
  String videoLength = r.ReadVideoTime(fileUrl);//视频时长

  System.out.println("===========================视频时长:" + videoLength + "===========================");
  return videoLength;
}

/**
 * 视频时长
 *
 * @param FileUrl
 * @return
 */
public static String ReadVideoTime(String FileUrl) {
  File source = new File(FileUrl);
  String length = "";
  try {
    MultimediaObject instance = new MultimediaObject(source);
    MultimediaInfo result = instance.getInfo();
    long ls = result.getDuration() / 1000;
    Integer hour = (int) (ls / 3600);
    Integer minute = (int) (ls % 3600) / 60;
    Integer second = (int) (ls - hour * 3600 - minute * 60);
    String hr = hour.toString();
    String mi = minute.toString();
    String se = second.toString();
    if (hr.length() < 2) {
      hr = "0" + hr;
    }
    if (mi.length() < 2) {
      mi = "0" + mi;
    }
    if (se.length() < 2) {
      se = "0" + se;
    }
    length = hr + ":" + mi + ":" + se;
  } catch (Exception e) {
    e.printStackTrace();
  }
  return length;
}

 /**
 * 视频大小
 *
 * @param source
 * @return
 */
@SuppressWarnings({"resource"})
public static String ReadVideoSize(File source) {
  FileChannel fc = null;
  String size = "";
  try {
    FileInputStream fis = new FileInputStream(source);
    fc = fis.getChannel();
    BigDecimal fileSize = new BigDecimal(fc.size());
    size = fileSize.divide(new BigDecimal(1024 * 1024), 2, RoundingMode.HALF_UP) + "MB";
  } catch (FileNotFoundException e) {
    e.printStackTrace();
  } catch (IOException e) {
    e.printStackTrace();
  } finally {
    if (null != fc) {
      try {
        fc.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
  return size;
}
}

以上就是Java获取视频时长、大小的示例的详细内容,更多关于Java 视频时长、大小的资料请关注我们其它相关文章!

(0)

相关推荐

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

    前言 只是最近碰到有这方面的项目需求,所以简单 Mark 下本文.下面的示例是参考过他人分享的文章,之后本人再自行实践.调整和测试过的,希望对有这方面需求的人有所帮助. 示例 添加依赖 <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv-platform</artifactId> <version>1.4.4</version> </depe

  • 使用Java和ffmpeg把音频和视频合成视频的操作方法

    FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的. FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.它包括了目前领先的音/视频编码库libavcodec. FFmpeg是在Linux下开发出来的,但它可以在包

  • Java使用OpenCV3.2实现视频读取与播放

    Java使用OpenCV3.2实现视频读取与播放,供大家参考,具体内容如下 OpenCV从3.x版本开始其JAVA语言的SDK支持视频文件读写,这样就极大的方便了广大Java语言开发者学习与使用OpenCV,通过摄像头或者视频文件读取帧的内容与播放,完成视频内容分析与对象跟踪等各种应用开发任务.可以说OpenCV C++ SDK可以做到绝大多数事情,在OpenCV3.x版本上用Java都可以完成,这样就为很多Java开发者学习OpenCV打开了方便之门. 实现思路 首先用OpenCV相关API读

  • java使用OpenCV从视频文件中获取帧

    本文实例为大家分享了java使用OpenCV从视频文件中获取帧的具体代码,供大家参考,具体内容如下 实现功能:使用Java获取mp4.mov.avi等视频文件中的图像帧,每秒获取一帧图像,并保存 环境要求:需要安装Opencv,安装FFmpeg,下载javacv包 操作系统:本次实验使用的Ubuntu系统 实验代码 import com.googlecode.javacv.cpp.opencv_highgui; import org.opencv.core.Core; import org.op

  • java使用FFmpeg合成视频和音频并获取视频中的音频等操作(实例代码详解)

    FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序. ffmpeg命令参数如下: 通用选项 -L license -h 帮助 -fromats 显示可用的格式,编解码的,协议的... -f fmt 强迫采用格式fmt -I filename 输入文件 -y 覆盖输出文件 -t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持 -ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持 -title

  • java使用ffmpeg处理视频的方法

    FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音视频的完整解决方案. 官网链接http://ffmpeg.org/ 1.下载并解压windows版本安装包 2.windows本地使用命令行测试 1.修改格式测试(转码) 将需要修改的视频A.avi 提前放在bin目录下 在bin目录下cmd进入命令行 输入命令完成转码成B.mp4 ffmpeg.exe -i A.avi -y B.mp4 2.视频音频结合

  • java将m3u8格式转成视频文件的方法

    这是一次尝试,android手机将在线的m3u8小电影保存到手机端,手机端把文件复制到电脑端. 然后使用小工具合并成可播放的视频. /** * 合并视频文件 * */ public class MergeVideos { /** * source为源地址,destination为合并之后的文件地址,videoName为合并后视频的名字,num为视频数量 * @param source * @param destination * @throws IOException */ public sta

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

    本文实例为大家分享了JavaCV获取视频文件时长的具体代码,供大家参考,具体内容如下 1.做项目时,需要读取视频文件的时长,网上有很多通过自己写的JNI接口来实现,但由于项目使用了JavaCV和OpenCV,其中有一些处理视频的接口,所以还是想打算尽可能使用JavaCV和OpenCV来实现,经过查阅了相关的一些资料,实现了使用JavaCV获取视频文件时长的功能. 2.基本实现思路:获取视频的总帧数和每秒帧数(FPS),然后通过公式:视频总帧数/每秒帧数(FPS)=时长(单位秒) 3.实现代码如下

  • java使用ffmpeg实现上传视频的转码提取视频的截图等功能(代码操作)

    ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用.ffmpeg能解析的格式和不能解析的格式都一一给大家说明了,具体内容详情跟随一起看看吧, 1.能支持的格式 ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) 2.不能支持的格式 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),可以先用别的工具(menco

  • Java 使用 FFmpeg 处理视频文件示例代码详解

    目前在公司做一个小东西,里面用到了 FFmpeg 简单处理音视频,感觉功能特别强大,在做之前我写了一个小例子,现在记录一下分享给大家,希望大家遇到这个问题知道解决方案. FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的. FFmpeg在Linux平

  • Java解码H264格式视频流中的图片

    本文实例为大家分享了Java解码H264格式视频流中的图片,供大家参考,具体内容如下 引入依赖 <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv</artifactId> <version>1.4.3</version> </dependency> <dependency> <groupId>org.byted

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

    兴趣使然写的代码,因为没有接触过JavaCV,所以查了很久的API还有依赖包,也使用了openCV来写过,但是还是遇到很多问题.希望小伙伴指出不足,互相学习. 环境配置: JavaCV1.4.1(下载Jar包,解压并提取所需要的Jar.这点耗时比较长,萌新完全不知道需要用什么,看源码及例子推出) Java版本:Java10 具体代码: package VideoProcessing; import org.bytedeco.javacv.FFmpegFrameGrabber; import or

随机推荐