SpringBoot使用ffmpeg实现视频压缩

ffmpeg简介

FFmpeg 是一个开源的跨平台多媒体处理工具集,用于录制、转换、编辑和流式传输音频和视频。它功能强大,支持几乎所有常见的音视频格式,是多媒体处理领域的核心工具之一。
官方文档:https://ffmpeg.org/documentation.html

核心功能

格式转换

支持几乎所有音视频格式(如 MP4、AVI、MOV、MKV、MP3、AAC 等)的互相转换。
示例:

ffmpeg -i input.mp4 output.avi

编解码

支持 H.264、H.265(HEVC)、VP9、AAC、Opus 等编解码器。
可指定编码参数(如码率、帧率、分辨率等)。
示例:

ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4

音视频处理

剪切、合并、提取音视频流。
调整分辨率、帧率、音量等。
示例:

# 剪切视频(从第10秒开始,截取5秒)
ffmpeg -i input.mp4 -ss 00:00:10 -t 5 output.mp4

流媒体支持

支持 RTMP、HLS、DASH 等流媒体协议,可用于直播推流或拉流。
示例:

# 推流到RTMP服务器
ffmpeg -i input.mp4 -c:v libx264 -f flv rtmp://server/live/stream_key

滤镜(Filter)

添加水印、缩放、旋转、降噪、字幕嵌入等。
示例:

# 添加文字水印
ffmpeg -i input.mp4 -vf "drawtext=text='Hello':x=10:y=10:fontsize=24:fontcolor=white" output.mp4

安装配置

linux安装

sudo yum install epel-release
sudo yum install ffmpeg
# 验证
ffmpeg -version

windows安装

官网地址:https://ffmpeg.org/download.html#build-windows
下载地址:https://www.gyan.dev/ffmpeg/builds/
在这里插入图片描述
下载上面两个都可以,一个是全量包,一个是必要包,下载后解压到你的目录

环境变量配置:在 系统变量 中找到 Path,点击 编辑,添加FFmpeg的 bin 目录路径,保存后使用 ffmpeg -version 验证

代码实现

package net.lab1024.sa.base.module.support.file.service;import lombok.extern.slf4j.Slf4j;import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;/*** 视频压缩工具类*/
@Slf4j
public class FFmpegVideoCompressionUtil {public static void main(String[] args) {long startTime = System.currentTimeMillis();compressVideo("E:\\Desktop\\video\\old.mp4", "E:\\Desktop\\video\\new.mp4");System.out.println("压缩完成,耗时: " + (System.currentTimeMillis() - startTime) + "ms");}/*** 压缩视频* @param inputPath 输入视频路径* @param outputPath 输出视频路径* @return 是否压缩成功*/public static boolean compressVideo(String inputPath, String outputPath) {// 检查输入文件是否存在File inputFile = new File(inputPath);if (!inputFile.exists()) {log.error("输入文件不存在: {}", inputPath);return false;}try {// FFmpeg命令// -c:v libx264 视频编码器使用libx264,兼容性好// -profile:v high 更高的压缩率和视频质量// -level 4.0 最大分辨率4k// -pix_fmt yuv420p 像素格式为yuv420p,兼容性好且文件体积比yuv444p(无损)更小// -crf 28 控制质量(0-51,值越小质量越高,默认23,建议18-28)// -preset fast 调整编码速度与压缩率(可选:ultrafast, superfast, veryfast, fast, medium, slow, slower)// -c:a copy 直接复制原始音频// -r 24 设置输出视频为24帧/秒String command = String.format("ffmpeg -i %s -c:v libx264 -profile:v high -level 4.0 -pix_fmt yuv420p -preset fast -crf 28 -c:a copy -r 24 %s", inputPath, outputPath);Process process = Runtime.getRuntime().exec(command);// 读取错误流(FFmpeg的输出通常通过错误流)BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));String line;while ((line = errorReader.readLine()) != null) {log.info(line);}int exitCode = process.waitFor();if (exitCode == 0) {log.info("视频压缩成功: {}", outputPath);return true;} else {log.error("视频压缩失败,退出码: {}", exitCode);return false;}} catch (IOException | InterruptedException e) {log.error("执行FFmpeg命令出错", e);return false;}}}

在这里插入图片描述

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

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

相关文章

OpenCv高阶(十九)——dlib关键点定位

文章目录 一、什么是人脸关键点定位?二、关键点模型的下载及关键信息的理解三、dlib关键点定位的简单实现(1)导入必要的库(2)从指定路径读取图像文件(3)创建dlib的正面人脸检测器对象&#xff0…

人工智能100问☞第36问:什么是BERT?

目录 一、通俗解释 二、专业解析 三、权威参考 BERT是基于Transformer Encoder的双向语言预训练模型,具备强大的语义理解能力,是现代自然语言处理的重要基石。它是一套让机器像人一样“前后一起看”的语言理解技术,它让AI不光“读得快”,还“读得懂”。现在很多搜索引擎…

Chrome/ Edge 浏览器弹出窗口隐藏菜单地址栏

Chrome 利用快捷方式,打开一个无地址栏的浏览器窗口,以百度为例 创建浏览器快捷方式,在目标栏里 添加 -apphttps://www.baidu.com 点击【应用】,【确定】按钮保存生效。后面通过空上快捷方式打开的浏览器没有地址栏。 Edge浏览…

计算机网络常见体系结构、分层必要性、分层设计思想以及专用术语介绍

计算机网络体系结构 从本此开始,我们就要开始介绍有关计算机网络体系结构的知识了。内容包括: 常见的计算机网络体系结构 计算机网络体系结构分层的必要性 计算机网络体系结构的设计思想 举例说明及专用术语 计算机网络体系结构是计算机网络课程中…

【C++】“多态”特性

文章目录 一、多态的概念二、多态的定义实现1. 多态的构成条件1.1 虚函数1.2 虚函数的重写 2. 多态的调用3. 虚函数重写的其他问题3.1 协变3.2 析构函数的重写 三、override和final关键字四、重载/重写/隐藏的对比五、纯虚函数和抽象类六、多态的原理 C的三大主要特性&#xff…

2025.5.27学习日记 linux三剑客 sed与正则表达式

sed是Stream Editor(字符流编辑器)的缩写,简称流编辑器。 sed是操作、过滤和转换文本内容的强大工具。 常用功能包括结合正则表达式对文件实现快速增删改查 , 其中查询的功能中最常用的两大功能是过 滤 ( 过滤指定字符串)、取行(取出指定行)。 注意sed和awk使用单引号,双引号…

文科小白学习Linux系统之安全管理

目录 前言 一、SELinux安全上下文 1、SELinux 简介 2、基础操作命令 1. 查看SELinux状态 2. 切换工作模式 3、安全上下文(Security Context) 1. 查看上下文 2. 修改上下文 chcon命令 semanage 命令 4、SELinux布尔值(Booleans&am…

企业内训系统源码开发详解:直播+录播+考试的混合式学习平台搭建

在企业数字化转型的大潮中,员工培训早已不再是传统教室中的一场场“走过场”,而是通过技术驱动的“系统化能力提升”。尤其在知识更新换代加速、竞争压力日益激烈的背景下,企业越来越倾向于建设自主可控、功能灵活、支持多种学习形态的内训平…

智能化报销与精细化管理:购物小票识别系统全面提升企业运营效率

在现代企业管理中,购物小票的处理一直是财务和运营管理中的一项挑战。尤其在企业费用报销、会员管理、库存监控等环节,手动整理与核对小票不仅耗时费力,还容易产生错误。随着人工智能技术的发展,企业亟需一种高效、智能的解决方案…

毫秒级数据采集的极致优化:如何用C#实现高性能、无冗余的实时文件写入?

在工业控制、通信系统或高频交易领域,毫秒级数据采集的精度直接决定系统性能。但一个棘手问题常被忽视:如何处理同一毫秒内的重复数据? 若简单写入所有数据,会导致文件臃肿、分析效率骤降;若处理不当,又可能…

NLua性能对比:C#注册函数 vs 纯Lua实现

引言 在NLua开发中,我们常面临一个重要选择:将C#函数注册到Lua环境调用,还是直接在Lua中实现逻辑? 直觉告诉我们,C#作为编译型语言性能更高,但跨语言调用的开销是否会影响整体性能?本文通过基准…

go并发与锁之sync.Mutex入门

sync.Mutex 原理:一个共享的变量,哪个线程握到了,哪个线程可以执行代码 功能:一个性能不错的悲观锁,使用方式和Java的ReentrantLock很像,就是手动Lock,手动UnLock。 使用例子: v…

【HarmonyOS5】DevEco Studio 使用指南:代码阅读与编辑功能详解

⭐本期内容:【HarmonyOS5】DevEco Studio 使用指南:代码阅读与编辑功能详解 🏆系列专栏:鸿蒙HarmonyOS:探索未来智能生态新纪元 文章目录 前言代码阅读代码导航功能代码折叠语法高亮跨语言跳转代码查找 快速查阅API接口…

【Python 深度学习】1D~3D iou计算

一维iou 二维 import numpy as npdef iou_1d(set_a, set_b):# 获得集合A和B的边界 x1, x2 set_ay1, y2 set_b# 计算交集的上下界low max(x1,y1)high - min(x2, y2)# 计算交集if high - low < 0:inter 0else:inter high - low# 计算并集union (x2 -x1) (y2 - y1) - in…

SpringBoot Controller接收参数方式, @RequestMapping

一. 通过原始的HttpServletRequest对象获取请求参数 二. 通过Spring提供的RequestParam注解&#xff0c;将请求参数绑定给方法参数 三. 如果请求参数名与形参变量名相同&#xff0c;直接定义方法形参即可接收。(省略RequestParam) 四. JSON格式的请求参数(POST、PUT) 主要在PO…

智能防护实战:从攻击成本看企业安全降本增效

1. 网络攻击的低成本与高回报陷阱 暗网中&#xff0c;一次完整的网络钓鱼攻击仅需30美元/月起步&#xff0c;而勒索软件攻击成本平均1000美元&#xff0c;却能导致企业损失高达445万美元&#xff08;IBM 2023年数据&#xff09;。例如&#xff0c;信用卡信息每条仅售10美元&am…

大语言模型 20 - MCP 在客户端中使用 Cursor Cline 中配置 MCP 服务

MCP 基本介绍 官方地址&#xff1a; https://modelcontextprotocol.io/introduction “MCP 是一种开放协议&#xff0c;旨在标准化应用程序向大型语言模型&#xff08;LLM&#xff09;提供上下文的方式。可以把 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 提供了一种…

MySQL 在 CentOS 7 环境下的安装教程

&#x1f31f; 各位看官好&#xff0c;我是maomi_9526&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习Mysql的相关知识。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享给更…

WPF的基础设施:XAML基础语法

XAML基础语法 1 控件声明与属性设置1.1 特性语法&#xff08;Attribute Syntax&#xff09;1.2 属性元素语法&#xff08;Property Element Syntax&#xff09;1.3 特殊值标记扩展 2 x:Name与Name的区别3 注释与代码折叠4 实用技巧集合5 常见错误排查 XAML( Extensible Applic…

机器学习笔记【Week3】

一、逻辑回归&#xff08;Logistic Regression&#xff09; 与线性回归的区别&#xff1a; 问题类型输出类型举例回归问题连续实数房价预测、气温预测分类问题离散类别&#xff08;0 或 1&#xff09;是否患病、是否点击广告、是否合格 我们希望构建一个模型&#xff0c;根据…