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
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82861.shtml
英文地址,請注明出處:http://en.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;根據…