java压缩视频

引入依赖

        <dependency><groupId>ws.schild</groupId><artifactId>jave-core</artifactId><version>3.0.0</version></dependency><dependency><groupId>ws.schild</groupId><artifactId>jave-all-deps</artifactId><version>3.0.1</version></dependency>

压缩视频

package junit;
import ws.schild.jave.Encoder;
import ws.schild.jave.MultimediaObject;
import ws.schild.jave.encode.AudioAttributes;
import ws.schild.jave.encode.EncodingAttributes;
import ws.schild.jave.encode.VideoAttributes;
import ws.schild.jave.info.AudioInfo;
import ws.schild.jave.info.VideoSize;import java.io.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.channels.FileChannel;public class TestVideo {public static void main(String[] args) {File sourceFile = new File("/Users/4paradigm/Desktop/qqqqq.mov");compressionVideo(sourceFile,"4564564.mov");}/*** 传视频File对象,返回压缩后File对象信息* @param source*/public static File compressionVideo(File source,String picName) {if(source == null){return null;}//压缩文件的输出绝对路径String newPath = source.getAbsolutePath().substring(0, source.getAbsolutePath().lastIndexOf(File.separator)).concat(File.separator).concat(picName);File target = new File(newPath);try {MultimediaObject object = new MultimediaObject(source);AudioInfo audioInfo = object.getInfo().getAudio();// 根据视频大小来判断是否需要进行压缩,int maxSize = 7;//视频字节长度  /  1024*1024  换算成MB单位   向上取整double mb = Math.ceil(source.length()/ 1048576);//获取视频时间int second = (int)object.getInfo().getDuration()/1000;BigDecimal bd = new BigDecimal(String.format("%.4f", mb/second));System.out.println("开始压缩视频了--> 视频每秒平均 "+ bd +" MB ");
//            // 视频 > 7MB, 或者每秒 > 0.5 MB 才做压缩, 不需要的话可以把判断去掉
//            boolean temp = mb > maxSize || bd.compareTo(new BigDecimal(0.5)) > 0;// 视频 > 7MB,  才做压缩, 不需要的话可以把判断去掉boolean temp = mb > maxSize;if(temp){long time = System.currentTimeMillis();//TODO 视频属性设置int maxBitRate = 128000;int maxSamplingRate = 44100;int bitRate = 800000;int maxFrameRate = 20;int maxWidth = 1280;AudioAttributes audio = new AudioAttributes();// 设置通用编码格式10                   audio.setCodec("aac");// 设置最大值:比特率越高,清晰度/音质越好// 设置音频比特率,单位:b (比特率越高,清晰度/音质越好,当然文件也就越大 128000 = 182kb)if(audioInfo.getBitRate() > maxBitRate){audio.setBitRate(new Integer(maxBitRate));}// 设置重新编码的音频流中使用的声道数(1 =单声道,2 = 双声道(立体声))。如果未设置任何声道值,则编码器将选择默认值 0。audio.setChannels(audioInfo.getChannels());// 采样率越高声音的还原度越好,文件越大// 设置音频采样率,单位:赫兹 hz// 设置编码时候的音量值,未设置为0,如果256,则音量值不会改变// audio.setVolume(256);if(audioInfo.getSamplingRate() > maxSamplingRate){audio.setSamplingRate(maxSamplingRate);}//TODO 视频编码属性配置ws.schild.jave.info.VideoInfo videoInfo = object.getInfo().getVideo();VideoAttributes video = new VideoAttributes();video.setCodec("h264");//设置音频比特率,单位:b (比特率越高,清晰度/音质越好,当然文件也就越大 800000 = 800kb)if(videoInfo.getBitRate() > bitRate){video.setBitRate(bitRate);}// 视频帧率:15 f / s  帧率越低,效果越差// 设置视频帧率(帧率越低,视频会出现断层,越高让人感觉越连续),视频帧率(Frame rate)是用于测量显示帧数的量度。所谓的测量单位为每秒显示帧数(Frames per Second,简:FPS)或“赫兹”(Hz)。if(videoInfo.getFrameRate() > maxFrameRate){video.setFrameRate(maxFrameRate);}// 限制视频宽高int width = videoInfo.getSize().getWidth();int height = videoInfo.getSize().getHeight();if(width > maxWidth){float rat = (float) width / maxWidth;video.setSize(new VideoSize(maxWidth,(int)(height/rat)));}EncodingAttributes attr = new EncodingAttributes();
//                attr.setFormat("mp4");attr.setAudioAttributes(audio);attr.setVideoAttributes(video);// 速度最快的压缩方式, 压缩速度 从快到慢: ultrafast, superfast, veryfast, faster, fast, medium,  slow, slower, veryslow and placebo.
//                attr.setPreset(PresetUtil.VERYFAST);
//                attr.setCrf(27);
//                // 设置线程数
//                attr.setEncodingThreads(Runtime.getRuntime().availableProcessors()/2);Encoder encoder = new Encoder();encoder.encode(new MultimediaObject(source), target, attr);System.out.println("压缩总耗时:" + (System.currentTimeMillis() - time)/1000);return target;}} catch (Exception e) {e.printStackTrace();}finally {if(target.length() > 0){source.delete();}}return source;}
}

参考

https://blog.csdn.net/weixin_41023230/article/details/109113449?utm_source=app&app_version=4.11.0&code=app_1562916241&uLinkId=usr1mkqgl919blen

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

经济学自身利益最大化_劳动经济学:研究劳动力市场运作的专业

多年以来同学们对劳动经济学认知上存在误区&#xff0c;很多同学一上来看到劳动两字会误以为这是让自己去当工人干活。事实并非如此&#xff0c;例如人力资源管理&#xff0c;大家都知道是一门很热门、实用的管理学&#xff0c;毕业后可以从事hr的工作&#xff0c;其实劳动经济…

corda_使用Spring WebFlux从Corda节点流式传输数据

corda自上次发布以来已经有一段时间了&#xff0c;但我终于回来了&#xff01; 由于我仍在我的项目中&#xff0c;因此我将再次撰写有关使用Corda的文章。 这次&#xff0c;我们将不再关注Corda&#xff0c;而是将Spring与Corda结合使用。 更具体地说&#xff0c;Spring WebFlu…

iTerm2 隐藏用户名和主机名

有时候我们的用户名和主机名太长&#xff0c;比如我的&#xff1a; 这么长的提示符前缀&#xff0c;在终端显示的时候会很不好看&#xff0c;我们可以手动去除。 编辑 ~/.zshrc 文件&#xff0c;增加 DEFAULT_USER"lwx" 配置&#xff0c;如下所示&#xff1a; 注…

投影串口测试程序_串口测试方法和步骤

信号测试与分析版号&#xff1a;xxx编写&#xff1a;xxx1、232串口信号&#xff1a;要点&#xff1a;RS232采用三线制传输分别为TXD\RXD\GND其中TXD为发送信号&#xff0c;RXD为接收信号。全双工&#xff0c;在RS232中任何一条信号线的电压均为负逻辑关系。即&#xff1a;—15v…

springBoot中自定义的yml文件引用的方式

一、yml配置文件 在yam文件中配置自定义的标签 1.在yml配置文件中加入 through:url: http://10.4.2.140:49003/IBSThrough2.测试类进行测试 import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; /…

MacOS安装zsh插件zsh-autosuggestion(自动命令补全和建议)

文章目录安装命令一安装命令二安装命令三使用插件 zsh-autosuggestion 用于命令建议和补全。 GitHub主页&#xff1a;https://github.com/zsh-users/zsh-autosuggestions 安装命令一 cd ~/.oh-my-zsh/custom/plugins/ git clone https://github.com/zsh-users/zsh-autosugg…

javafx 调用java_Java,JavaFX的流畅设计风格拨动开关

javafx 调用java嗨&#xff0c;这次我将在新版本的JMetro中讨论新的Toggle Switch样式。 拨动开关是一种近年来非常流行的控件。 我前一段时间在ControlsFX库中添加了JavaFX实现。 刚刚发布的JMetro版本4.1中提供了此新样式。 什么是拨动开关 在以前的文章中&#xff0c;我讨…

polkit 重新安装_不折腾,为U-NAS安装一个清爽的桌面,把小U打造成双面高手

本帖最后由 emaic 于 2012-2-2 03:41 编辑除了文件的存储和下载外&#xff0c;U-NAS还可以干嘛&#xff1f;其实&#xff0c;只要你-U-NAS的硬件性能足够强悍&#xff0c;U-NAS可以完成很多你意想不到的工作哦&#xff0c;也会有很多意想不到的玩法&#xff0c;希望看了emaic打…

用于zsh的插件incr(目录提示和补全)

文章目录使用命令 wget 下载插件直接下载插件脚本文件配置提示存在不安全目录incr 是一个目录提示和补全插件。 使用命令 wget 下载插件 mkdir ~/.oh-my-zsh/custom/plugins/incr cd ~/.oh-my-zsh/custom/plugins/incr wget -O incr.plugin.zsh http://mimosa-pudica.net/src…

普罗米修斯使用es数据库_用普罗米修斯和格拉法纳仪法来豪猪

普罗米修斯使用es数据库Adam Bien的Porcupine库使配置充当应用程序隔板的专用执行程序服务变得容易。 我创建了一个扩展&#xff0c;通过MicroProfile Metrics公开了豪猪统计信息。 我们还可以通过Prometheus和Grafana仪表板使仪器可见。 进行此扩展的原因是我们希望对Porcupi…

2字节十六进制浮点数 qt_Qt二进制文件操作(读和写)详解

除了文本文件之外&#xff0c;其他需要按照一定的格式定义读写的文件都称为二进制文件。每种格式的二进制文件都有自己的格式定义&#xff0c;写入数据时按照一定的顺序写入&#xff0c;读出时也按照相应的顺序读出。例如地球物理中常用的 SEG-Y 格式文件&#xff0c;必须按照其…

cobol host变量_将Host Cobol批次和Monolith Webapps移动到云和微服务

cobol host变量在Amazon Event “从大型机到微服务– Vanguard迁移到云”中非常有趣的演示。 以下部分可用作迁移模式 &#xff1a;如何从大型机迁移到微服务的不同方式&#xff1a; 重新托管 再造 重构 使用Linux和Java重新平台 回购 退役 全部结合 该演示文稿还展示了V…

maven的常用命令

install 安装 功能&#xff1a; 编译和打包&#xff0c;把打好的可执行的jar包&#xff08;或者war包或者其他包&#xff09;部署到本地maven仓库 编译 javac 打包 -jar&#xff0c;将java代码打包为jar文件 安装到本地仓库-将打包的jar文件&#xff0c;保存到本地仓库目录中…

MacOS在zsh环境下安装和使用终端插件autojump

文章目录介绍安装 autojump使用 git clone使用 HomeBrew 安装配置使用 autojump卸载 autojump介绍 autojump is a faster way to navigate your filesystem. It works by maintaining a database of the directories you use the most from the command line. Directories must…

如何做到服务器虚拟化_尽可能地做到无服务器,但不止于此

如何做到服务器虚拟化毫无疑问&#xff0c;如果您一直关注技术趋势&#xff0c;那么您会看到“无服务器”的兴起。 在某些情况下&#xff0c;“无服务器”被称为“下一个应用程序体系结构”样式。 我什至听说有人说“您不需要技术X&#xff0c;因为无服务器是未来的方式”或“技…

MAC启动redis的目录

找到目录 cd /redis-6.2.1/src ./redis-service

Linux/MacOS 安装 Oh my zsh

文章目录安装curl 安装wget 安装卸载安装 安装方法有两种&#xff0c;可以使用 curl 或 wget&#xff0c;看自己环境或喜好 curl 安装 sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"curl 是下载文件的…

pc 图片预览放大 端vue_企业为什么需要建设PC+手机微信三合一全网营销的网站呢...

随着信息时代的发展&#xff0c;手机一步步的进入了我们的生活&#xff0c;渐渐的有很多东西都在从pc端过渡到手机端&#xff0c;我们在网购的时候会发现一系列的活动&#xff0c;比如说下载手机客户端就能免减多少钱或者抽奖这样的活动&#xff0c;这样在一定的程度上推动了人…

arrays.sort(._Arrays.hashCode(Object [])与Objects.hash(Object…)

arrays.sort(.从JDK 1.5开始 &#xff0c; Arrays类提供了名为“ hashCode ”的重载static方法。 大多数重载方法都接受特定原始类型的数组&#xff0c;但是Arrays.hashCode&#xff08;Object []&#xff09;方法可用于计算引用类型数组的int哈希码。 自从JDK 1.7诞生以来 &am…

windows系统SSH证书设置

在客户端终端运行命令 ssh-keygen -t rsa 然后就会显示这两行&#xff1a; Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/16627/.ssh/id_rsa): 这是让你输入一个文件名&#xff0c;用于保存刚才生成的 SSH key 代码。为了避免麻烦…