FFmpeg的安裝及簡單使用

簡介
FFmpeg 是一個跨平臺的音視頻處理工具庫/命令行工具,其核心作用是:對音視頻文件或流進行解碼、轉換(編碼)、封裝/解封裝等處理。

友情提示
本次安裝以Windows64位操作系統為例

一、下載及安裝
1、前往FFmpeg官網,點擊下載

這里我們以Windows builds from gyan.dev為例

2、進來以后選擇release builds

這邊我們選擇右邊的1或者2都可,選擇其一就可以然后shared和不帶shared主要區別就是戴shared是把依賴包全部放在lib文件下面然后ffmpeg.exe,ffplay.exe,ffprobe.exe作為可執行文件就可以直接去lib里面調用相應功能,而不帶shared的他的ffmpeg.exe,ffplay.exe,ffprobe.exe作為獨立的執行的單獨模塊會在bin得目錄下,每個文件就會大一些。這里我們以下載ffmpeg-7.0.2-full_build.7z為例

3、下載解壓完成后我們就得到了如下的目錄

點擊bin目錄我們就可以看見那三個主要的文件
二、環境變量設置
1、右擊此電腦選擇屬性

2、選擇高級系統設置,選擇環境變量

3、在系統變量中選擇path進行編輯

4、將bin的路徑直接復制過去,然后一定要把所有確定按鈕點完

5、檢驗是否生效
cmd輸入ffmpeg -version 如果出現版本號就說明配置成功

三、Java代碼中ffmpeg的調用
ffmpeg過于強大,這里咱們就舉幾個簡單例子展示一下ffmpeg的基本功能!
1、獲取視頻信息

    public static void main(String[] args) {try {// 獲取視頻信息getVideoInfo("D:/video/lin.mp4");} catch (IOException | InterruptedException e) {e.printStackTrace();}}public static void getVideoInfo(String videoPath) throws IOException, InterruptedException {ProcessBuilder processBuilder = new ProcessBuilder("ffmpeg", "-i", videoPath);Process process = processBuilder.start();process.waitFor();printCommandOutput(process.getErrorStream());}private static void printCommandOutput(InputStream inputStream) throws IOException {InputStreamReader inputStreamReader = new InputStreamReader(inputStream);BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String line;while ((line = bufferedReader.readLine()) != null) {System.out.println(line);}}

首先這里包含了視頻的基本信息,路徑:'D:/video/lin.mp4' 格式為MP4
Stream #0:00x1表示視頻流:
Video: h264 (High) 表示視頻流使用的是H.264編碼,且為高配置文件。
yuv420p(tv, bt709, progressive) 是視頻的像素格式,色域和掃描方式。
544x960 是視頻的分辨率。
655 kb/s 是視頻流的比特率。
23 fps 是視頻的幀率。
23 tbr 是時間基準。
90k tbn 是時間基準。
Stream #0:10x2?表示音頻流的信息:
Audio: aac (LC) 表示音頻流使用的是AAC編碼,低復雜度配置文件。
44100 Hz 是音頻的采樣率。
mono 表示音頻是單聲道的。
fltp 是音頻樣本格式。
48 kb/s 是音頻流的比特率。

2、給視頻加字幕

    public static void main(String[] args) {try {// 視頻添加字幕addSubtitle("D:/video/lin.mp4", "D:/video/lin.srt", "D:/video/lin_with_subtitle.mp4");} catch (IOException | InterruptedException e) {e.printStackTrace();}}public static void addSubtitle(String videoPath, String subtitlePath, String outputPath)throws IOException, InterruptedException {String escapedSubPath = subtitlePath.replace("\\", "\\\\").replace(":", "\\:");// 使用完整FFmpeg命令參數ProcessBuilder processBuilder = new ProcessBuilder("ffmpeg","-i", videoPath,"-vf", "subtitles='" + escapedSubPath + "'", // 用單引號包裹路徑"-c:v", "libx264",     // 指定視頻編碼器"-c:a", "copy",        // 直接復制音頻流"-y",                   // 覆蓋輸出文件outputPath);// 打印實際執行的命令System.out.println("執行命令: " + String.join(" ", processBuilder.command()));Process process = processBuilder.start();printCommandOutput(process.getErrorStream());int exitCode = process.waitFor();if (exitCode == 0) {System.out.println("字幕添加成功!");} else {System.out.println("處理失敗,退出碼: " + exitCode);}}private static void printCommandOutput(InputStream inputStream) throws IOException {InputStreamReader inputStreamReader = new InputStreamReader(inputStream);BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String line;while ((line = bufferedReader.readLine()) != null) {System.out.println(line);}}

這是一個srt的字幕文件,簡單用Windows自帶的txt寫了一個簡單的的srt文件,內容就如上所示

這個就是生成的結果,lin是原視頻,lin.srt是字幕文件,lin_with_subtitle是生成后帶字幕的文件

上面兩個就為原視頻帶字幕前后的對比了

3、添加水印的操作

    public static void main(String[] args) {try {// 給視頻添加水印addWatermark("D:/video/lin.mp4","D:/video/lin.png","D:/video/lin_watermark.mp4");} catch (IOException | InterruptedException e) {e.printStackTrace();}}public static void addWatermark(String videoPath, String watermarkPath, String outputPath)throws IOException, InterruptedException {// 構造FFmpeg命令(支持透明PNG/動態調整位置)ProcessBuilder processBuilder = new ProcessBuilder("ffmpeg","-i", videoPath,          // 輸入視頻"-i", watermarkPath,      // 輸入水印圖片"-filter_complex","[1]format=rgba," +                   // 確保水印有透明通道"scale=iw/3:ih/3," +                 // 縮小3倍(iw/3=原寬度÷3)"colorchannelmixer=aa=0.25[wm];" +    // 透明度25%"[0][wm]overlay=25:H-h-25",           // 左下角位置(左邊25px,底部25px)"-c:v", "libx264",        // 視頻編碼"-preset", "fast",        // 編碼速度"-crf", "23",             // 畫質控制"-c:a", "copy",           // 復制音頻流"-y",                     // 覆蓋輸出outputPath);// 打印實際執行的命令System.out.println("執行命令: " + String.join(" ", processBuilder.command()));Process process = processBuilder.start();printCommandOutput(process.getErrorStream()); // FFmpeg輸出到stderrint exitCode = process.waitFor();if (exitCode == 0) {System.out.println("水印添加成功!");} else {System.out.println("處理失敗,退出碼: " + exitCode);}}private static void printCommandOutput(InputStream inputStream) throws IOException {InputStreamReader inputStreamReader = new InputStreamReader(inputStream);BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String line;while ((line = bufferedReader.readLine()) != null) {System.out.println(line);}}

這里主要除了固定水印位置還可以設置移動水印的效果

好了以上就是全部內容,當然FFmpeg的功能絕對不僅僅于此,還可以對視頻音頻進行降噪處理、關鍵幀的提取、Ai集成、濾鏡等等。在目前企業中也被廣泛應用。只是作者在這里偷個懶~就不全部展示了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/923690.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/923690.shtml
英文地址,請注明出處:http://en.pswp.cn/news/923690.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Science Advances--3D打印生物啟發扭曲雙曲超材料,用于無人機沖擊緩沖和自供電實時傳感

湍流引起的振動會對飛機的結構完整性及飛行穩定性造成巨大威脅,尤其是在無人駕駛飛行器(UAV)中,實時的沖擊監測和輕質防護尤為重要。該研究基于生物啟發,通過3D 打印尼龍PA12 制備了一種扭轉-雙曲面超材料(…

AI大模型的研發流程

開發一個大模型是一個龐大、復雜且資源密集的系統工程,涉及算法研究、工程實現、數據管理和算力基礎設施等多個層面。下面我將為您提供一個從零開始開發大模型的全景式路線圖,涵蓋了從概念到部署的全過程。請注意,完全從零開始訓練一個類似GP…

Docker desktop安裝Redis Cluster集群

本文章將介紹如何在 Windows 系統的 Docker Desktop 環境中搭建 Redis 集群。將創建一個包含 6 個節點(3 主 3 從)的 Redis 集群。 環境準備 Windows 10/11 操作系統Docker Desktop 已安裝并運行 步驟 清理環境(如之前有嘗試) 如果…

Zynq開發實踐(SDK之第一個純PS工程)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing 163.com】學編程的時候,大家一般都比較重視第一個項目的創建和執行。第一個fpga程序一般是led閃爍,第一個c程序一般就是hello world程…

EJS(Embedded JavaScript)(一個基于JavaScript的模板引擎,用于在HTML中嵌入動態內容)

文章目錄**1. 什么是 EJS?****2. 核心特點**- **接近原生 HTML**- **動態渲染**- **輕量高效**- **與 Express 深度集成****3. EJS 的基本語法****4. 示例代碼****HTML 模板(views/user.ejs)****Express 中渲染模板****5. 使用場景**1. **服務…

Linux:基于阻塞隊列的生產者消費模型

文章目錄一、生產者消費者模型的基本原則💕💕生產者-消費者模型的 321 原則💕💕二、為何要使用生產者消費者模型1. 解耦2. 支持并發 (提高效率)3. 忙閑不均的支持三、基于 BlockingQueue 的生產者消費者模型…

ensp啟動路由器報錯40

1. 先關閉 eNSP 模擬器、關閉 Virtualbox2. 在everything里面搜索 .VirtualBox文件夾,然后刪掉3. 再打開 eNSP,不添加任何模擬設備,單擊“菜單-工具-注冊設備”,將 AR_Base 重新注冊。4. 關閉 eNSP 模擬器

代碼隨想錄二刷之“圖論”~GO

A.深搜與廣搜(重點掌握!!!!) 深搜類似于回溯法 搜索方向,是認準一個方向搜,直到碰壁之后再換方向換方向是撤銷原路徑,改為節點鏈接的下一個路徑,回溯的過程…

基于Echarts+HTML5可視化數據大屏展示-白茶大數據溯源平臺V2

效果展示&#xff1a;代碼結構&#xff1a;主要代碼實現 index.html布局 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta n…

Linux 系統網絡配置及 IP 地址相關知識匯總

Linux 系統網絡配置及 IP 地址相關知識匯總 一、IP地址基礎 IP地址&#xff1a;在計算機網絡中用來唯一標識一臺設備的一組數字。 二、IPv4相關知識 1. IPv4的表示方法 采用點分十進制表示&#xff0c;即由4個0-255的十進制數通過點分隔組成&#xff08;如192.168.1.1&#xff…

百度股價突破120美元創年內新高,AI云成為增長新引擎

美東時間9月16日&#xff0c;百度&#xff08;NASDAQ: BIDU&#xff09;美股大漲近8%&#xff0c;收盤價突破120美元&#xff0c;站上124美元高位&#xff0c;創2023年10月以來新高。北京時間9月17日港股開盤&#xff0c;百度&#xff08;09888.HK&#xff09;港股再次暴漲&…

《彩虹六號:圍攻》“Siege X”發布會3月14日舉行!

使用jQuery的常用方法與返回值分析 jQuery是一個輕量級的JavaScript庫&#xff0c;旨在簡化HTML文檔遍歷和操作、事件處理以及動畫效果的創建。本文將介紹一些常用的jQuery方法及其返回值&#xff0c;幫助開發者更好地理解和運用這一強大的庫。 1. 選擇器方法 jQuery提供了多種…

[從青銅到王者] Spring Boot+Redis+Kafka電商場景面試全解析

互聯網大廠Java開發崗技術面試實錄&#xff1a;嚴肅面試官VS搞笑程序員謝飛機 文章內容 第一輪&#xff1a;基礎框架與并發控制&#xff08;電商系統基礎能力&#xff09; 面試官&#xff08;嚴肅&#xff09;&#xff1a;歡迎進入面試環節&#xff0c;首先請用3句話總結Spring…

【DMA】DMA架構解析

目錄 1 DMA架構 1. 芯片架構圖一覽 2. AHB總線矩陣掛載 3. AHB1/APB1的橋和AHB1/APB2的橋 4. DMA1 和 DMA2 的區別 2 AHB總線矩陣 1 DMA架構 1. 芯片架構圖一覽 2. AHB總線矩陣掛載 stm32F411 芯片的 AHB 總線矩陣上共掛載了 6 主 5 從 六主&#xff1a; Icode-bus、D…

GPS 定位器:精準追蹤的“隱形守護者”

GPS 定位器&#xff1a;精準追蹤的“隱形守護者” 一、什么是 GPS 定位器&#xff1f; GPS 定位器是一種基于 全球定位系統&#xff08;Global Positioning System, GPS&#xff09; 的智能追蹤設備。 通過接收衛星信號并結合通信模塊&#xff08;如 4G、NB-IoT&#xff09;&am…

前端拖拽排序實現

1. 使用 HTML5 事件 觸發時機 核心任務 dragstart 開始拖拽時 準備數據&#xff0c;貼上標簽 dragover 經過目標上方時 必須 preventDefault()&#xff0c;發出“允許放置”的信號 dragleave 離開目標上方時 清理高亮等臨時視覺效果 drop 在目標上松手時 接收數據…

arm coresight

這是一個arm設計的調試基礎架構&#xff0c;我們常用的debug基本都包含在內。比如ETM、PTM、ITM、HTM、ETB等。 注意ETM、PTM、ITM、HTM、ETB是coresight的子集。這些工具相比普通debug的斷點調試&#xff0c;需要更高的專業水平&#xff0c;因此也用于復雜軟件故障定位、性能…

《華為基本法》 —— 企業發展的導航儀

當一家企業從 “小作坊” 向 “規模化組織” 跨越時&#xff0c;最需要的是什么&#xff1f;華為的答案&#xff0c;藏在 1998 年出臺的《華為基本法》里。1998 年&#xff0c;《華為基本法》正式頒布&#xff0c;這部凝結華為早期經營智慧的綱領性文件&#xff0c;不僅為華為從…

【完整源碼+數據集+部署教程】傳統韓文化元素分割系統: yolov8-seg-GFPN

背景意義 研究背景與意義 隨著全球化的加速&#xff0c;傳統文化的保護與傳承面臨著前所未有的挑戰。尤其是韓國的傳統文化&#xff0c;作為東亞文化的重要組成部分&#xff0c;蘊含著豐富的歷史、藝術和哲學內涵。然而&#xff0c;隨著現代化進程的推進&#xff0c;許多傳統文…

構建AI智能體:三十五、決策樹的核心機制(一):刨根問底鳶尾花分類中的參數推理計算

一、初識決策樹想象一個生活中的場景&#xff0c;我們去水果店買一個西瓜&#xff0c;該怎么判斷一個西瓜是不是又甜又好的呢&#xff1f;我們可能會問自己一系列問題&#xff1a;首先看看它的紋路清晰嗎&#xff1f;如果“是”&#xff0c;那么它可能是個好瓜。如果“否“&…