热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JAVAE2项目如何实现对视频格式进行转换

这期内容当中小编将会给大家带来有关JAVAE2项目如何实现对视频格式进行转换,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望

这期内容当中小编将会给大家带来有关JAVAE2 项目如何实现对视频格式进行转换,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

JAVAE简介:

JAVE (Java音频视频编码器)库是ffmpeg项目的Java包装器。开发人员可以利用JAVE2将音频和视频文件从一种格式转换为另一种格式。在示例可以转换成一个AVI文件MG,您可以更改一个DivX视频(youtube) Flash FLV,您可以转换WAV音频文件到MP3和Ogg Vorbis,您可以分离和转换音频和视频跟踪代码,您可以调整视频,改变他们的大小和比例等。JAVE2还支持许多其他格式、容器和操作。

官网地址:https://www.mvnjar.com/ws.schild/jave-all-deps/2.4.2/detail.html

github地址:https://github.com/a-schild/jave2/tree/master/jave-example

maven地址:https://mvnrepository.com/artifact/ws.schild/jave-all-deps

快速上手

导包


 ws.schild
 jave-all-deps
 2.4.2

工具类

package com.example.javae2.util;


import cn.hutool.core.util.ObjectUtil;
import ws.schild.jave.*;

import java.io.File;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;

public class VideoUtils {



 private static Map sizeBitRateMap;

 static {
  sizeBitRateMap = new HashMap<>();
  sizeBitRateMap.put("1920*1080", 4992);
  sizeBitRateMap.put("1280*720", 2496);
  sizeBitRateMap.put("1024*576", 1856);
  sizeBitRateMap.put("840*480", 1216);
  sizeBitRateMap.put("768*432", 1088);
  sizeBitRateMap.put("640*360", 896);
  sizeBitRateMap.put("424*240", 576);
 }


 public static void main(String[] args) {
  VideoUtils videoUtils = new VideoUtils();
  videoUtils.convertVideoToMP4(new File("C:\\temp\\javae2\\0001.哔哩哔哩-颈椎操[流畅版].flv"),"C:\\temp\\javae2\\0001.哔哩哔哩-颈椎操[流畅版].mp4");

  //videoUtils.getVideoInfoAndGenerateThumbnail(new File("C:\\\\temp\\\\javae2\\\\0001.哔哩哔哩-颈椎操[流畅版].mp4"), "C:\\\\temp\\\\javae2\\\\0001.哔哩哔哩-颈椎操[流畅版]..jpg");


 }

 /**
  * 截取视频的一针作为封面图
  *
  * @param file   视频文件
  * @param thumbnailPath 截取图片保存路径
  * @return
  */
 public void getVideoInfoAndGenerateThumbnail(File file, String thumbnailPath) {
  MultimediaObject multimediaObject = new MultimediaObject(file);
  try {
   MultimediaInfo info = multimediaObject.getInfo();
   VideoInfo videoInfo = info.getVideo();
   logger.info("获取视频时长:{}", info.getDuration() / 1000);
   if (ObjectUtil.isNotNull(videoInfo)) {
    VideoSize size = videoInfo.getSize();
    int width = size.getWidth();
    int height = size.getHeight();
    logger.info("视频宽:{} 视频高{}", width, height);
    logger.info("比特率:{}", videoInfo.getBitRate() / 1000);
    ScreenExtractor screenExtractor = new ScreenExtractor();
    File target = new File(thumbnailPath);
    //截取视频作为图片保存
    /*
    *第一个参数 视频源文件信息类
    * 第二个参数 截取的宽度
    * 第三个参数 截取的高度
    * 第四个参数 截取的是那一帧
    * 第五个参数是 截取的图片质量 1-31 数字越小质量越高
    *
    **/
    screenExtractor.renderOneImage(multimediaObject, size.getWidth(), size.getHeight(), 3000, target, 31);

   }
  } catch (EncoderException e) {
   e.printStackTrace();
  }

 }


 /**
  * @param source  源文件
  * @param targetPath 转码后的路径
  */
 public void convertVideoToMP4(File source, String targetPath) {
  MultimediaObject multimediaObject = new MultimediaObject(source);
  try {
   MultimediaInfo info = multimediaObject.getInfo();
   VideoInfo videoInfo = info.getVideo();
   VideoSize size = videoInfo.getSize();
   System.out.println("原视频宽:" + size.getWidth());
   System.out.println("原视频高:" + size.getHeight());
   System.out.println("原视频比特率:" + videoInfo.getBitRate() / 1000);
   System.out.println("原视频编码:" + videoInfo.getDecoder());

   Integer bitRate = sizeBitRateMap.get(size.getWidth() + "*" + size.getHeight());
   VideoAttributes video = new VideoAttributes();
   //设置视频编码
   video.setCodec("h364");

   if (ObjectUtil.isNotNull(bitRate)) {
    //设置比特率
    video.setBitRate(bitRate * 1000);
   }
   File target = new File(targetPath);
   AudioAttributes audio = new AudioAttributes();
   //设置编码器名称
   audio.setCodec("aac");
   EncodingAttributes attrs = new EncodingAttributes();
   //设置转换后的格式
   attrs.setFormat("mp4");
   attrs.setAudioAttributes(audio);
   attrs.setVideoAttributes(video);
   Encoder encoder = new Encoder();
   encoder.encode(multimediaObject, target, attrs);
   //花费毫秒数

   MultimediaObject multimediaObjectOfter = new MultimediaObject(Paths.get(targetPath).toFile());
   MultimediaInfo info1 = multimediaObjectOfter.getInfo();
   VideoInfo video1 = info1.getVideo();
   VideoSize size1 = video1.getSize();

   System.out.println("转换后视频宽:" + size1.getWidth());
   System.out.println("转换后视频高:" + size1.getHeight());
   System.out.println("转换后视频比特率:" + video1.getBitRate() / 1000);
   System.out.println("转换后视频编码:" + video1.getDecoder());

  } catch (EncoderException e) {
   e.printStackTrace();
  }
 }



}

效果 (flv 转MP4)

JAVAE2 项目如何实现对视频格式进行转换

上述就是小编为大家分享的JAVAE2 项目如何实现对视频格式进行转换了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程笔记行业资讯频道。


推荐阅读
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
author-avatar
骆锐锋1_665
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有