java视频压缩

Java实现视频初步压缩和解压 从摄像头读取每一帧的图片,用一些简单的方法将多张图片信息压缩到一份文件中(自定义的视频文件),自定义解码器读取视频文件,并将每帧图片展示成视频 阅读详情

项目开发中往往有一些时候可能会遇到一些上传视频,这时候我们如果上传一个手机拍摄的1分钟视频(大小110M)可能需要特别长的时间,这个时候就需要我们对视频进行压缩,虽然清晰度有所下降,但是对于一些特定的场景还是很有必要的

ffmpeg主要组成部分

  • libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能,包含demuxers和muxer库;
  • libavcodec:用于各种类型声音/图像编解码;
  • libavutil:包含一些公共的工具函数;
  • libswscale:用于视频场景比例缩放、色彩映射转换;
  • libpostproc:用于后期效果处理;
  • ffmpeg:是一个命令行工具,用来对视频文件转换格式,也支持对电视卡实时编码;
  • ffsever:是一个HTTP多媒体实时广播流服务器,支持时光平移;
  • ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示;

引入依赖包

<dependency>
            <groupId>ws.schild</groupId>
            <artifactId>jave-nativebin-win64</artifactId>
            <version>2.7.2</version>
        </dependency>

        <dependency>
            <groupId>ws.schild</groupId>
            <artifactId>jave-nativebin-linux64</artifactId>
            <version>2.7.2</version>
        </dependency>

文件压缩类

package com.huiyi.util;

import org.springframework.stereotype.Component;
import ws.schild.jave.*;

import java.io.File;
import java.math.BigDecimal;

/**
 * @ClassName: videoCompression
 * @Auther: wuhao
 * @Date: 2021/3/5 13:33
 * @Description:视频压缩
 */
@Component
public class VideoCompression {
    /**
    * 功能描述:
    * @Param source: 原文件
    * @Param newPath: 压缩后文件保存路径(包括文件名)
    * @return: java.io.File
    * @auther: wuhao
    * @date: 2021/3/5 15:31
    */
    public File compressionVideo(File source,String newPath){
        if(null==source){
            return null;
        }
        File target=new File(newPath);
        try{
            MultimediaObject multimediaObject=new MultimediaObject(source);
            AudioInfo audioInfo=multimediaObject.getInfo().getAudio();
            //根据视频大小来判断是否需要压缩
            int maxSize=5;
            double mb=Math.ceil(source.length()/1024/1024);
            int second=(int)multimediaObject.getInfo().getDuration();
            BigDecimal bigDecimal=new BigDecimal(String.format("%.4f",mb/second));
            //当视频大于5M或每秒>0.5M时进行压缩
            boolean temp = mb > maxSize || bigDecimal.compareTo(new BigDecimal(0.5)) > 0;
            if(temp){
                //TODO视频属性
                int maxBitRate=128000;
                int maxSamplingRate=8000;
                int bitRate=800000;
                int maxFrameRate=20;
                int maxWidth=1280;

                AudioAttributes audioAttributes=new AudioAttributes();

                // 设置通用编码格式10
                // 设置最大值:比特率越高,清晰度/音质越好
                // 设置音频比特率,单位:b (比特率越高,清晰度/音质越好,当然文件也就越大 128000 = 182kb)
                if(audioInfo.getBitRate()>maxBitRate){
                    audioAttributes.setBitRate(new Integer(maxBitRate));
                }
                // 设置重新编码的音频流中使用的声道数(1 =单声道,2 = 双声道(立体声))。如果未设置任何声道值,则编码器将选择默认值 0。
                audioAttributes.setChannels(audioInfo.getChannels());
                // 采样率越高声音的还原度越好,文件越大
                // 设置音频采样率,单位:赫兹 hz
                // 设置编码时候的音量值,未设置为0,如果256,则音量值不会改变
                // audio.setVolume(256);
                if(audioInfo.getSamplingRate()>maxSamplingRate){
                    audioAttributes.setSamplingRate(new Integer(maxSamplingRate));
                }

                //TODO视频编码属性配置
                VideoInfo videoInfo=multimediaObject.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=width/maxWidth;
                    video.setSize(new VideoSize(maxWidth,(int)(height/rat)));
                }
                EncodingAttributes attrs = new EncodingAttributes();
                attrs.setFormat("mp4");
                attrs.setAudioAttributes(audioAttributes);
                attrs.setVideoAttributes(video);
                //使用多线程进行压缩
                attrs.setEncodingThreads(Runtime.getRuntime().availableProcessors()/2);

                Encoder encoder=new Encoder();
                long time=System.currentTimeMillis();
                encoder.encode(multimediaObject,target,attrs);
                System.out.println("压缩时间:"+(System.currentTimeMillis()-time)/1000);
                return target;
            }

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //压缩后删除原文件啊
//            if(target.length()>0){
//                source.delete();
//            }
        }
        return source;

    }
}

压缩时间大概在39秒左右(手机端的话可能要再慢一点,毕竟硬件时硬伤)

压缩后文件大概6M

java实现视频压缩转码 无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!部分截图:所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助! 阅读详情

相关推荐

java实现视频压缩

主要通过java代码实现视频压缩,且提供压缩需要的jave.jar.

JAVA,实现视频压缩(最全)

说明 Java压缩视频大小,10M视频压缩完成后大约是1M,用时大约2S 技术:基于 fffmpeg 技术实现视频压缩 条件:需要maven引入jar包 步骤一 引入pom基础依赖(前提是maven工程,在 pom.xml 文件中添加如下行) <dependency> <groupId>ws.schild</groupId> <artifactId>jave-core</artifactId>

SeniorShen的博客 2万+

java 大文件(视频)分片上传+压缩

java实现视频上传,前端用webuploader分片,后台合文件并用ffmpeg进行压缩处理。

2024 java 使用jave压缩视频,一个工具类搞定

2024 java 使用jave压缩视频,一个工具类搞定

m0_47484034的博客 3117

Python 驱动 CAD 二次开发:从零搭建自动化绘图环境

本文详细介绍了如何利用Python进行CAD二次开发,实现自动化绘图。通过win32com库建立Python与CAD软件的通信,文章从环境搭建、连接CAD、操作文档到核心绘图与批量处理,提供了完整的实战指南。该方法能显著提升机械设计、建筑绘图等领域的重复性工作效率,将创造力从繁琐劳动中解放出来。

weixin_29093169的博客 1229

BlenderGis安装碰到问题,ImageIO、无法点击和地图不加载

BlenderGis安装碰到问题,ImageIO、无法点击和地图不加载问题

qq_45176349的博客 4964

java视频压缩大小,亲测有效

说明 Java压缩视频大小,10M视频压缩完成后大约是1M,用时大约2S, 步骤一 首先导入基础依赖包 <dependency> <groupId>ws.schild</groupId> <artifactId>jave-core</artifactId> <version>3.0.0</version> </depend

yanwin的博客 1万+

【大模型推理】工作负载的弹性伸缩

推荐采用 并发请求数(Concurrency) 或 队列深度(Queue Size) 结合GPU监控指标(显存/算力利用率),并依托Knative KPA、Fluid缓存、优先级调度等技术实现高效弹性伸缩[citation:6][citation:7][citation:8]。QPS无法体现这种资源消耗累积效应[citation:6]。并发数的本质:是实时反映资源占用的瞬时状态量,而非速率指标,尤其适合单次请求资源消耗大、处理时间长的业务(如LLM推理)[citation:1][citation:6]。

王尚权 qq:2515162716 1185

java 视频压缩

java 视频压缩

1853 1353

在实战中学AI-车流量统计项目-YOLOV11车辆检测-YOLOV11模型的部署

考虑实际落地中部署推理资源消耗,速度与模型精度之间的均衡,同时,车辆属于比较通用场景的目标检测,我们将YOLOV11作为最终的模型选择,目前官方开源的模型基于coco数据集训练,里面已经包含了车辆相关类别,经测试,在监控视角下效果基本可用,所以,在落地过程中,我们先用这个模型来打通部署链路,后面再逐步优化模型性能。在Nvidia的硬件下做部署,部署框架优先选择官方框架TensorRT,下面重点讲述如何用TensorRT部署YOLOV11模型。

Aleo_优快云的博客 2166

VTK:受约束的 Delaunay 2D用法实战

VTK:受约束的 Delaunay 2D用法实战程序输出程序完整源代码 程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkCellArray.h> #include <vtkDelaunay2D.h> #include <vtkMath.h> #include <vtkMinimalStandardRandomSequence.h> #include <vtkNamedColors.h>

希望我的博客,能帮上你解决学习中工作中所遇到的问题 944

【java使用ffmpeg进行视频压缩】

在java中使用ffmpeg压缩视频

guigu2019的博客 4237

RT-DETR升级:TGRS2026 CKConv结合RepC3 | 方向特征与跨阶段融合协同,小目标漏检率大幅下降

小目标鲁棒性提升:CKConv方向选择性抑制背景噪声,RepC3跨阶段传递保留深层微弱热信号,显著改善低对比度、低信噪比场景下的检测精度。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 151

JAVA 视频压缩

项目依赖 开发引入Windows依赖,生产引入linux依赖;建议一次都引入 <!-- 视频压缩 --> <dependency> <groupId>ws.schild</groupId> <artifactId>jave-core</artifactId> <version>3.0.0</version> </dependency> <!-- 在windows

qq_43619832的博客 3785

北斗导航 | SPP、RTK、RTD、PPP-RTK、PPP算法原理,公式及完整matlab代码

开发参考:SPP适合入门学习GNSS定位原理和最小二乘。RTK是工程高精度定位主流方案,但依赖基站。PPP适合无基站区域的广域高精度应用。PPP-RTK是融合两者优点的新一代技术,但系统复杂度最高。· 代码资源:raPPPid(VieVS PPP)是功能完整的MATLAB开源PPP工具箱,支持多系统PPP-AR。MATLAB GPS Toolbox 提供从SPP到PPP的完整功能实现。· 实际应用:农业自动驾驶、无人机航测通常使用网络RTK;大地测量、地壳形变监测常采用PPP事后处理;

尘世冰封的专栏 827

ardupilot 日志分析《xKF1信息》

ardupilot 日志分析系列将会把ardupilot所有的日志文档进行分析,为我们分析无人机的运行状态,炸鸡原因,传感器状态,电机状态,控制信息,滤波信息做准备。本节主要分析xKF1日志信息,欢迎批评指正。学习好ardupilot必须会分析飞行日志,从飞行日志中我们可以学到很多无人机的知识。无人机是综合知识的体现,涵盖:导航、控制、滤波、算法、协议等各种知识,只有更全面的学习,才能在无人机的道路上越走越远。

陌城烟雨 1225

java中使用ffmpeg进行简单视频压缩

FFmpeg 是领先的多媒体框架,能够解码编码转码复用解复用流过滤和播放几乎所有人类和机器创建的东西。它支持最模糊的古老格式,直到最前沿。无论它们是由某个标准委员会、社区还是公司设计的。它还具有高度的可移植性:FFmpeg 在各种构建环境、机器架构和配置下跨 Linux、Mac OS X、Microsoft Windows、BSD、Solaris 等 编译、运行和通过我们的测试基础架构FATE。

weixin_74785181的博客 1328

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【JAVA视频压缩】-------轻量级视频压缩组件JAVE

最近要用到视频压缩功能。通过搜索发现了ffmpeg,javacv,这两个是比较主流的流媒体组件,但是研究下来发现,如果仅仅是需要视频压缩的话,那么就有点大材小用了。FFmpeg是C语言开发的,对于我们java来说有点难了,而javacv是java语言写的,源码读起来还容易上手,但是由于这两个组件功能较多,就被作者放弃了,最后找到了另外一个小众的工具JAVE。 JAVE简介 简单的说,JAVE...

tomatocc的博客 5421

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java 视频压缩_Java视频压缩有人会吗?

该楼层疑似违规已被系统折叠隐藏此楼查看此楼Java视频压缩有人会吗?网上找的方法感觉不行AudioAttributes audio = new AudioAttributes();audio.setCodec("libmp3lame");audio.setBitRate(new Integer(56000));audio.setChannels(new Integer(1));audio.set...

weixin_39789101的博客 113

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java 视频压缩代码

以下是使用 Java 进行视频压缩的简单示例代码: import org.bytedeco.ffmpeg.global.avcodec; import org.bytedeco.javacv.FFmpegFrameGrabber; import org.bytedeco.javacv.FFmpegFrameRecorder; import org.bytedeco.javacv.Frame; p...

weixin_35750747的博客 1337

Java 视频压缩

Java 视频压缩 代码示例

wolvesqun的专栏 612

java 视频压缩转码_java实现视频压缩转码

大家好,我是程序员爱酸奶,希望您能喜欢我的文章。可以专注我个人公众号获取更多内容。有什么问题可以通过公众号加我微信交流~~ 手动比心 ♥下面开始正文啦~~~其实很简单,直接上代码.snippet.javaimport java.io.File;import it.sauronsoftware.jave.AudioAttributes;import it.sauronsoftware.jave.En...

weixin_36111561的博客 1032

java实现MP4视频压缩

-i`参数指定输入文件,`-b:v`参数设置目标视频比特率(单位是kb/s),`-bufsize`参数设置码率控制缓冲区的最大大小。要在Java中实现MP4视频压缩,您可以使用一些第三方库,比如ffmpeg或Xuggler等。注意,在运行这个程序之前,您需要先安装ffmpeg,并确保它可以通过命令行执行。如果您想使用其他第三方库,如Xuggler,实现方式会有所不同,但总体思路是类似的,即利用这些库提供的API来对视频进行转码和压缩。// 目标比特率,单位是比特每秒(bit/s)

MySQL技术博客 1586
上一篇: martion框架学习一:搭建一个martion项目
下一篇: spring boot集成https协议
昊天02
博客等级 码龄9年 7粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值