02.Linux下安裝FFmpeg

目錄

一、下載FFmpeg的編譯源碼

二、編譯源碼

三、ffmpeg工具結構解析

1、bin目錄

2、include庫

3、lib庫

四、注意事項

五、可能出現的一些問題

1、某些工具未安裝/版本過久

2、缺少pkg-config工具

3、缺少ffmplay


????????FFmpeg 是一個開源的跨平臺音視頻處理工具集,它包含了一系列的程序、庫和工具,用于錄制、轉換和流處理音視頻文件和流媒體。

一、下載FFmpeg的編譯源碼

? ? ? ? 進入網站:http://ffmpeg.org/download.html

????????

????????在網站中先擇git地址進行下載。如果git下載比較慢,也可以將選擇瀏覽器下載后轉移到Linux虛擬機中或直接在Ubuntu的內置瀏覽器中進行下載。

二、編譯源碼

????????執行下述命令:

./configure --prefix=/usr/local/ffmpeg --enable-debug=3 --enable-ffplay
sudo make -j 4
sudo make install

? ? ? ? 如果編譯成功,那么將會在安裝路徑/user/local/ffmpeg下出現如下子目錄

三、ffmpeg工具結構解析

? ? ? ? 下面我們來看一下安裝好的ffmpeg中的這些子目錄中我們需要使用到的東西

  • bin:

    • bin 目錄一般存放可執行文件(binaries),即程序的二進制文件。在 FFmpeg 中,這個目錄存放了 ffmpegffplayffprobe 等命令行工具的可執行文件。當你在終端中輸入命令時,系統會在這個目錄中查找對應的可執行文件來執行命令。
  • include:

    • include 目錄通常存放頭文件(header files),這些文件包含了程序接口的聲明和定義,供開發者在自己的程序中引用和調用。在 FFmpeg 中,這個目錄存放了各個模塊的頭文件,如 libavcodeclibavformat 等模塊的頭文件,允許開發者在自己的代碼中使用 FFmpeg 的功能。
  • lib:

    • lib 目錄一般存放庫文件(libraries),這些文件包含了程序在編譯時鏈接的代碼和函數。在 FFmpeg 中,這個目錄存放了各個模塊的靜態庫文件(如 .a 文件)和動態庫文件(如 .so 文件),供開發者在自己的應用程序中鏈接使用 FFmpeg 提供的功能。
  • share:

    • share 目錄通常存放共享文件(shared data),這些文件可以被多個程序或者用戶共享使用。在 FFmpeg 中,這個目錄可能包含一些共享的配置文件、文檔或者其他資源文件,幫助用戶更好地使用和理解 FFmpeg 的功能和特性。

1、bin目錄

????????重點主要在于bin目錄下的三個工具

  • ffmpeg:

    • ffmpeg 是 FFmpeg 項目中最主要的命令行工具之一,用于音視頻的錄制、轉換以及流處理。
    • 它支持從多種輸入源(文件、攝像頭、網絡流等)讀取音視頻數據,然后可以對其進行編解碼、過濾、轉碼等操作,最后將處理后的結果輸出到文件或者流媒體服務器中。
  • ffplay:

    • ffplay 是 FFmpeg 提供的一個簡單音視頻播放器,基于 SDL(Simple DirectMedia Layer)庫。
    • 它能夠播放多種音視頻格式,支持快進、快退、循環播放等基本功能,是調試和測試音視頻文件的方便工具。
  • ffprobe:

    • ffprobe 是 FFmpeg 提供的音視頻流分析工具,用于分析媒體文件或者流的詳細信息。
    • 它可以提取音視頻文件的元數據(如分辨率、編碼格式、幀率、比特率等),幫助用戶了解和分析媒體文件的特性和結構。

2、include庫

? ? ? ? 用于后續的二次開發

  • libavcodec:

    • 這是 FFmpeg 中最重要的模塊之一,包含了各種音視頻編解碼器。
    • libavcodec 提供了將音頻和視頻數據編碼和解碼的功能。例如,它支持將視頻從一種格式轉換為另一種格式,如將 H.264 編碼的視頻轉換為 MPEG-2 編碼的視頻。
    • FFmpeg 中的許多命令行工具和應用程序都依賴于 libavcodec 來處理音視頻編解碼任務。
  • libavdevice:

    • 這個模塊包含了各種設備的輸入和輸出支持代碼。
    • libavdevice 允許 FFmpeg 支持不同的音視頻輸入和輸出設備,如攝像頭、音頻輸入設備、視頻捕獲卡等。
    • 例如,使用 libavdevice 可以從攝像頭捕獲視頻數據或從麥克風捕獲音頻數據。
  • libavfilter:

    • libavfilter 模塊實現了音視頻過濾器框架。
    • 這個模塊允許用戶應用各種音視頻過濾器來處理音視頻流。過濾器可以用來進行裁剪、縮放、旋轉、去噪、水印等操作。
    • FFmpeg 中的 ffmpeg 命令行工具通過 libavfilter 支持將一個或多個過濾器應用到輸入音視頻流,并將輸出寫入到文件或者流媒體服務器。
  • libavformat:

    • libavformat 提供了音視頻格式的封裝和解封裝功能。
    • 這個模塊允許 FFmpeg 支持從各種音視頻格式中讀取數據,以及將音視頻數據封裝為不同的格式,如 MP4、AVI、FLV 等。
    • 通過 libavformat,FFmpeg 能夠處理從本地文件到網絡流媒體的廣泛應用場景。
  • libavutil:

    • libavutil 是一個工具庫,提供了各種用于音視頻處理的工具函數。
    • 這個模塊包含了用于數學運算、數據結構操作、字節操作、日志、時間處理等功能的工具函數。
    • 許多 FFmpeg 的其他模塊都依賴于 libavutil 中的函數來實現它們的功能。
  • libswresample:

    • libswresample 提供了音頻重采樣功能。
    • 這個模塊用于將音頻數據從一個采樣率或格式轉換為另一個采樣率或格式,以便匹配特定的音頻設備或格式要求。
    • FFmpeg 中處理音頻流時經常需要使用 libswresample 來進行采樣率調整或格式轉換。
  • libswscale:

    • libswscale 提供了視頻圖像縮放和顏色空間轉換的功能。
    • 這個模塊可以將視頻幀從一種像素格式轉換為另一種像素格式,以及進行圖像大小的縮放和裁剪。
    • FFmpeg 使用 libswscale 來處理視頻流中的圖像縮放、格式轉換以及色彩空間的轉換,例如將 RGB 格式的圖像轉換為 YUV 格式。

3、lib庫

  • libavcodec.a:

    • libavcodec.a 是 FFmpeg 中的靜態鏈接庫,包含了各種音視頻編解碼器的實現代碼。靜態庫在編譯時會被直接鏈接到應用程序中,使得應用程序在運行時不再需要動態加載。
  • libavdevice.a:

    • libavdevice.a 是包含各種音視頻輸入和輸出設備支持代碼的靜態鏈接庫。它允許應用程序通過 FFmpeg 訪問和操作音視頻設備,如攝像頭、音頻輸入設備等。
  • libavfilter.a:

    • libavfilter.a 包含音視頻過濾器框架的實現代碼。這個庫允許應用程序使用各種過濾器對音視頻流進行處理,如裁剪、縮放、旋轉、去噪等操作。
  • libavformat.a:

    • libavformat.a 包含音視頻格式封裝和解封裝的實現代碼。它允許應用程序讀取和寫入各種音視頻格式的文件和流媒體。
  • libavutil.a:

    • libavutil.a 是 FFmpeg 的實用工具函數庫的靜態鏈接庫。它包含了各種常用的工具函數,用于數學運算、數據結構操作、日志處理等。
  • libswresample.a:

    • libswresample.a 包含音頻重采樣功能的實現代碼。它允許應用程序將音頻數據從一個采樣率或格式轉換為另一個采樣率或格式。
  • libswscale.a:

    • libswscale.a 包含視頻圖像縮放和顏色空間轉換功能的實現代碼。它允許應用程序對視頻幀進行大小縮放、像素格式轉換以及色彩空間轉換。
  • pkgconfig:

    • pkgconfig 目錄包含了用于 pkg-config 工具的配置文件。這些文件允許開發者在編譯和鏈接應用程序時,通過 pkg-config 查詢 FFmpeg 庫的編譯和鏈接選項。

四、注意事項

????????如果需要關閉靜態庫,打開動態庫,可以在第一條命令的末尾再添加下述命令

--disable-static  --enable-shared

? ? ? ? 在編譯過程中,如果對于一些參數的意義不太清楚,可以通過下述命令來查看命令的含義

./configure -help | grep "需要查看的參數名"

五、可能出現的一些問題

1、某些工具未安裝/版本過久

執行下述命令:

sudo apt update
sudo apt upgrade
sudo apt install nasm

2、缺少pkg-config工具

這里其實和上述問題處理一樣

sudo apt install pkg-config

3、缺少ffmplay

如果安裝結束發現bin目錄下沒有ffmplay,那就需要先安裝,再重新執行第二部分的內容

sudo apt install libsdl2-dev

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

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

相關文章

揭秘銀行理財產品:高收益背后的秘密

一、按幣種分類 人民幣理財產品:主要投資于人民幣計價的金融工具,如國債、金融債、央行票據等。此類產品風險較低,收益穩定。外幣理財產品:按照投資的本金風險分類,可分為本金100%保障、部分本金保障及不保本的外匯理…

華為OD機考題HJ24 合唱隊

前言 應廣大同學要求,開始以OD機考題作為練習題,看看算法和數據結構掌握情況。有需要練習的可以關注下。 描述 N 位同學站成一排,音樂老師要請最少的同學出列,使得剩下的 K 位同學排成合唱隊形。 設𝐾K位同學從左到…

科普文:八大排序算法(JAVA實現)+ 自制動畫 (袁廚的算法小屋)

我將我倉庫里的排序算法給大家匯總整理了一下,寫的非常非常細,還對每個算法制作了動畫,一定能夠對大家有所幫助,歡迎大家閱讀。另外我也對 leetcode 上面可以用排序算法秒殺的算法題進行了總結,會在后面的文章中進行發…

物聯網協議都包含哪些協議?

物聯網協議是物聯網生態系統中不可或缺的組成部分,它們負責處理和協調物聯網設備之間的通信。具體介紹如下: Ethernet:以太網是一種有線網絡協議,廣泛應用于局域網絡(LAN)中,提供穩定的高速數據傳輸。Wi-Fi&#xff1…

Python自動化運維 系統基礎信息模塊

1.系統信息的收集 系統信息的收集,對于服務質量的把控,服務的監控等來說是非常重要的組成部分,甚至是核心的基礎支撐部分。我們可以通過大量的核心指標數據,結合對應的檢測體系,快速的發現異常現象的苗頭,進…

springboot項目如何整合rocketmq

1、項目導入rocketmq依賴 添加 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-stream-rocketmq</artifactId> </dependency> 完整內容如下: <?xml version="1.0" encoding="…

Golang | Leetcode Golang題解之第208題實現Trie前綴樹

題目&#xff1a; 題解&#xff1a; type Trie struct {children [26]*TrieisEnd bool }func Constructor() Trie {return Trie{} }func (t *Trie) Insert(word string) {node : tfor _, ch : range word {ch - aif node.children[ch] nil {node.children[ch] &Trie{…

mac|tableau public 儀表盤使用

對華東地區的利潤進行儀表盤可視化 選擇下面的功能表的新建儀表盤,把上面的表1表2放入其中 通過下圖操作將兩個表聯合起來&#xff0c;即上圖使用篩選器時下面的表隨之改變 將上圖設置為篩選器&#xff0c;可以通過點擊地區查看數據

MySQL之MHA高可用集群及故障切換

一、MHA概述 MHA&#xff08;MasterHigh Availability&#xff09;是一套優秀的mysql高可用環境下故障切換和主從復制的軟件。MHA的出現就是為了解決mysql單點故障。Mysql故障切換過程中&#xff0c;MHA能做到0-30秒內自動完成故障性切換操作。MHA能在故障切換的過程中最大程度…

特征工程的力量

為什么你應該使用邏輯回歸來建模非線性決策邊界&#xff08;使用 Python 代碼&#xff09; 作為一名大數據從業者&#xff0c;復雜的機器學習技術非常具有吸引力。使用一些深度神經網絡 (DNN) 獲得額外的 1% 準確率&#xff0c;并在此過程中啟動 GPU 實例&#xff0c;這讓人非常…

【使用webrtc-streamer解析rtsp視頻流】

webrtc-streamer WebRTC (Web Real-Time Communications) 是一項實時通訊技術&#xff0c;它允許網絡應用或者站點&#xff0c;在不借助中間媒介的情況下&#xff0c;建立瀏覽器之間點對點&#xff08;Peer-to-Peer&#xff09;的連接&#xff0c;實現視頻流和&#xff08;或&a…

了解 ZooKeeper:關鍵概念和架構

ZooKeeper 是一種分布式協調服務&#xff0c;廣泛用于分布式系統中&#xff0c;用于維護配置信息、命名、同步和組服務。它最初由雅虎開發&#xff0c;現在是一個 Apache 項目&#xff0c;已成為許多大型分布式應用程序不可或缺的一部分。本文深入探討 ZooKeeper 的關鍵概念和架…

【Android】Activity子類之間的區別

從底層往頂層的繼承順序依次是&#xff1a; Activity&#xff0c;最原始的Activity androidx.core.app.ComponentActivity&#xff0c;僅僅優化了一個關于KeyEvent的攔截問題&#xff0c;一般不繼承這個類 androidx.activity.ComponentActivity&#xff0c;支持和Android Arc…

Spark Join優化案例:Join Key 遠大于 Payload

在一個案例中&#xff0c;大表 100GB、小表 10GB&#xff0c;它們全都遠超廣播變量閾值&#xff08;默認 10MB&#xff09;。因為小表的尺寸已經超過 8GB&#xff0c;在大于 8GB 的數據集上創建廣播變量&#xff0c;Spark 會直接拋出異常&#xff0c;中斷任務執行&#xff0c;所…

C語言 求 n 個數的階乘之和

求n個數的階乘之和&#xff08;即求1&#xff01;2&#xff01;3&#xff01;…n!&#xff09; 這個程序讀取用戶輸入的正整數 n&#xff0c;計算并輸出 1! 2! 3! ... n! 的值。 #include <stdio.h>// 計算階乘的函數 long factorial(int num) {long result 1;for…

恢復 IntelliJ IDEA 中消失的菜單欄

要恢復 IntelliJ IDEA 中消失的菜單欄&#xff0c;可以按照以下簡單步驟操作&#xff1a; 使用快捷鍵打開搜索&#xff1a;首先&#xff0c;雙擊 Shift 鍵打開全局搜索對話框。 搜索“Menu”&#xff1a;在搜索框中輸入 menu&#xff0c;然后從搜索結果中選擇與“Main Menu”相…

python-基礎篇-選擇-是什么

文章目錄 定義一&#xff1a;Python 條件語句跟其他語言基本一致的&#xff0c;都是通過一條或多條語句的執行結果&#xff08; True 或者 False &#xff09;來決定執行的代碼塊。1、什么是條件語句2、if 語句的基本形式3、if 語句多個判斷條件的形式4、if 語句多個條件同時判…

次序統計量

內容來源 概率論與數理統計教程&#xff08;第三版&#xff09; 茆詩松 高等教育出版社 數理統計學導論&#xff08;原書第7版&#xff09; 機械工業出版社 定義 設 X 1 , X 2 , ? , X n X_1,X_2,\cdots,X_n X1?,X2?,?,Xn? 是來自連續分布的隨機樣本 此分布具有 p d f…

【機器學習】Python reversed 函數

目錄&#xff1a; reversed()函數初探應用于列表和元組實戰演練&#xff1a;山海經故事文本處理 Python中的內置函數——reversed()。 這個函數能夠幫助你高效地處理序列類型數據&#xff0c;比如列表、元組、字符串等&#xff0c;通過它你可以輕松地反轉這些序列中的元素順…

JSON 簡述與應用

1. JSON 簡述 JSON&#xff08;JavaScript Object Notation&#xff09;是一種輕量級的數據交換格式&#xff0c;常用于客戶端與服務器之間的數據傳遞。它基于JavaScript對象表示法&#xff0c;但獨立于語言&#xff0c;可以被多種編程語言解析和生成。 1.1 特點 輕量級&#…