FFmpeg開發筆記(五十一)適合學習研究的幾個音影片開源框架

aqi00發表於2024-09-07
很多程式設計師想學習音影片的程式設計開發,卻不知從何學習,因為音影片技術的體系龐大、知識雜糅,一眼望去就令人生怯。那麼學習音影片建議站在前人的肩膀上,從優秀的音影片開源框架開始鑽研,先熟悉這些開源工具的具體用法,再深入瞭解這些開源框架的實現程式碼。

有鑑於此,博主整理了幾個流行的音影片開源框架,分別對它們概要說明如下:

一、計算機視覺庫OpenCV

OpenCV全稱Open Source Computer Vision Library,它是一個跨平臺計算機視覺和機器學習軟體庫,可執行於Linux、Windows、Android和MacOS等作業系統。
OpenCV的官網地址為https://opencv.org/,它在Github上的原始碼託管入口頁面為https://github.com/opencv/opencv。截止2024年8月4日的Github統計,OpenCV專案的星標數為7.73萬,副本數為5.57萬。
OpenCV在程式設計實踐中的用法主要有下列三種:

1、透過Python指令碼使用OpenCV

先執行下面命令安裝OpenCV的Python支援庫。
pip install opencv-python
然後在Python程式碼的開頭透過下面語句匯入OpenCV庫:
import cv2
接著即可在Python程式碼中呼叫OpenCV的各種處理函式了。

2、透過Qt在桌面程式中整合OpenCV

先把OpenCV的C++支援庫下載到本地目錄,再開啟Qt的C++工程的CMakeLists.txt,在檔案內容的qt_add_executable之前新增下面幾行配置,表示指定OpenCV庫的標頭檔案目錄和庫檔案目錄。
# 新增標頭檔案的所在目錄
include_directories(opencv/include)
# 指定lib檔案的連結目錄
link_directories(opencv/lib)
接著把下面這行配置:
target_link_libraries(test_opencv PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
改成下面幾行配置,目的是引入連結新增的OpenCV庫檔案:
# 設定名叫opencv-libs的庫集合,指定它包括哪些so庫檔案
set(opencv-libs opencv_world480)
target_link_libraries(test_opencv PRIVATE Qt${QT_VERSION_MAJOR}::Widgets ${opencv-libs})
接著即可在C++程式碼中匯入OpenCV的標頭檔案,並呼叫OpenCV的各種處理函式了。

3、透過Android Studio在移動App中整合OpenCV

首先下載OpenCV的原始碼包,解壓後找到OpenCV-android-sdk目錄,該目錄下有兩個子目錄,分別是和samples和sdk。其中sdk為庫工程,App使用OpenCV前都要引用該庫工程;samples是樣例工程,下面有若干範例模組。
接著把上面的sdk目錄整合到Android Studio的App工程中,詳細的整合步驟參見《Android App開發進階與專案實戰》一書第12章的“12.2.2 OpenCV簡介及其整合”,這裡不再贅述。

二、計算機圖形庫學習教程LearnOpenGL

LearnOpenGL是一個開源的OpenGL教程,可供初學者學習如何使用OpenGL來建立3D圖形和動畫。LearnOpenGL既提供了實體的英文書籍,也提供了免費的英文電子版PDF,官網的電子版PDF下載連結為https://learnopengl.com/book/book_pdf.pdf。
LearnOpenGL的官網地址為https://learnopengl.com/,它在Github上的原始碼託管入口頁面為https://github.com/JoeyDeVries/LearnOpenGL。截止2024年8月4日的Github統計,LearnOpenGL專案的星標數為1.07萬,副本數為0.27萬。

三、多媒體處理框架FFmpeg

FFmpeg全稱Fast Forward MPEG,意思是快速掌握MPEG,它是一個開源的跨平臺多媒體處理框架,可執行於Linux、Windows、Android和MacOS等作業系統。FFmpeg不僅能夠處理音訊、影片檔案,還能處理影像、字幕等檔案,可謂功能強悍。
FFmpeg的官網地址為https://ffmpeg.org/,它在Github上的原始碼託管入口頁面為https://github.com/FFmpeg/FFmpeg。截止2024年8月4日的Github統計,FFmpeg專案的星標數為4.41萬,副本數為1.19萬。
FFmpeg在程式設計實踐中的用法主要有下列三種:

1、在命令列中執行FFmpeg

按照之前文章《在尤拉系統上編譯安裝FFmpeg》的說明,在Linux系統上編譯與安裝FFmpeg,即可生成三個可執行程式,分別是ffmpeg、ffplay、ffprobe。接著按照之前文章《FFmpeg的可執行程式介紹》的說明,即可在命令列中執行相關的音影片處理操作。

2、透過Qt在桌面程式中整合FFmpeg

先按照《FFmpeg開發實戰:從零基礎到短影片上線》一書第8章“8.1 Windows環境編譯FFmpeg”的介紹,在Windows系統上編譯出FFmpeg的dll動態庫。再按照《FFmpeg開發實戰:從零基礎到短影片上線》一書第11章“11.2.1 給Qt整合FFmpeg”的介紹,給Qt的C++工程整合前面編譯好的dll動態庫及其標頭檔案。接著即可在C++程式碼中呼叫FFmpeg提供的各種API。

3、透過Android Studio在移動App中整合FFmpeg

先按照《FFmpeg開發實戰:從零基礎到短影片上線》一書第12章“12.1.2 交叉編譯Android需要的so庫”的介紹,在Windows系統上交叉編譯出FFmpeg用於Android平臺的so動態庫。再按照《FFmpeg開發實戰:從零基礎到短影片上線》一書第12章“12.1.3 App工程呼叫FFmpeg的so庫”的介紹,給Android Studio的App工程整合前面編譯好的so動態庫及其標頭檔案。接著即可在App程式碼中呼叫FFmpeg提供的各種API。

四、影片錄製直播工具OBS Studio

OBS Studio全稱Open Broadcaster Software Studio,它是一個開源的跨平臺實時流媒體和螢幕錄製工具,可執行於Linux、Windows和MacOS等作業系統。
OBS Studio的官網地址為https://obsproject.com/,它在Github上的原始碼託管入口頁面為https://github.com/obsproject/obs-studio。截止2024年8月4日的Github統計,OBS Studio專案的星標數為5.8萬,副本數為0.78萬。
有關OBS Studio的安裝和使用說明參見之前的文章《使用OBS Studio開啟RTMP直播推流》和《結合OBS與MediaMTX實現SRT直播推流》,這裡不再贅述。

五、音影片播放器VLC media player

VLC media player是一款開源的跨平臺多媒體播放器及框架,可以播放幾乎全部多媒體檔案,以及 DVD、音訊 CD、VCD 及各類流媒體協議的直播地址。
VLC media player的官網地址為https://www.videolan.org/,它在Github上的原始碼託管入口頁面為https://github.com/videolan/vlc。截止2024年8月4日的Github統計,VLC media player專案的星標數為1.35萬,副本數為0.5萬。
除了供使用者播放媒體檔案之外,VLC media player還常常被開發者用來除錯音影片檔案格式是否正確,以及網路上的流媒體資料是否正確傳輸。因為凡是VLC media player無法開啟的音影片檔案,幾乎肯定是檔案內部編碼或封裝出了問題;凡是VLC media player無法播放的流媒體地址,幾乎肯定是流媒體資料出現缺失,或是網路狀況不佳。
有關VLC media player的安裝和使用說明參見《FFmpeg開發實戰:從零基礎到短影片上線》一書第3章的“3.4.1 通用影片播放器VLC”,這裡不再贅述。

更多詳細的FFmpeg開發知識參見《FFmpeg開發實戰:從零基礎到短影片上線》一書。

相關文章