1
FFmpeg
FFmpeg 是一個(gè)免費(fèi)、開(kāi)源且跨平臺(tái)的音視頻處理工具套件,它提供了豐富的功能和命令行接口,用于在音視頻領(lǐng)域進(jìn)行編解碼肾筐、轉(zhuǎn)碼畜伐、剪輯、過(guò)濾等操作燎猛。它由 Fabrice Bellard 創(chuàng)建,并于 2000 年首次發(fā)布照皆,是一個(gè)功能強(qiáng)大且廣泛應(yīng)用的音視頻處理工具重绷,適用于各種音視頻處理需求和應(yīng)用場(chǎng)景。無(wú)論是簡(jiǎn)單的格式轉(zhuǎn)換還是復(fù)雜的流處理膜毁,F(xiàn)Fmpeg 都提供了豐富的功能和工具昭卓,是音視頻開(kāi)發(fā)和處理的重要工具之一愤钾。
1.1
功能與特點(diǎn)
FFmpeg 提供了強(qiáng)大而靈活的命令行接口,用戶可以使用命令行參數(shù)來(lái)指定輸入文件候醒、輸出文件能颁、編解碼器、濾鏡和其他參數(shù)倒淫。同時(shí)伙菊,F(xiàn)Fmpeg 也提供了一些編程接口,如 libavcodec敌土、libavformat 等镜硕,使得開(kāi)發(fā)人員可以通過(guò)編程方式使用 FFmpeg 的功能。
支持廣泛的音視頻格式:FFmpeg 支持幾乎所有常見(jiàn)的音視頻格式返干,包括但不限于 MP4兴枯、AVI、MKV矩欠、FLV财剖、MP3、AAC 等癌淮。它可以進(jìn)行格式之間的轉(zhuǎn)換峰伙,使得用戶可以輕松地處理和轉(zhuǎn)碼不同格式的音視頻文件。
強(qiáng)大的編解碼能力:FFmpeg 支持多種音視頻編解碼器该默,包括 H.264瞳氓、H.265、MPEG-4栓袖、VP9匣摘、AAC、MP3 等裹刮。這使得用戶可以對(duì)音視頻文件進(jìn)行解碼音榜、編碼和重新編碼,以滿足不同的需求和要求捧弃。
實(shí)時(shí)流處理和轉(zhuǎn)碼:FFmpeg 可以處理實(shí)時(shí)音視頻流赠叼,包括網(wǎng)絡(luò)流、攝像頭捕獲违霞、屏幕錄制等嘴办。它能夠?qū)@些流進(jìn)行編碼、解碼买鸽、轉(zhuǎn)碼和傳輸涧郊,適用于實(shí)時(shí)流媒體、視頻會(huì)議等應(yīng)用場(chǎng)景眼五。
視頻剪輯和處理:FFmpeg 提供了豐富的視頻處理功能妆艘,可以進(jìn)行剪輯彤灶、裁剪、旋轉(zhuǎn)批旺、調(diào)整大小幌陕、添加水印、調(diào)整亮度對(duì)比度等操作汽煮。這使得用戶可以對(duì)視頻進(jìn)行各種編輯和處理搏熄,滿足不同的需求和創(chuàng)意。
音頻處理和混音:FFmpeg 可以進(jìn)行音頻的提取逗物、轉(zhuǎn)碼、混音瑟俭、音量調(diào)整等操作翎卓。用戶可以使用 FFmpeg 處理音頻文件,如剪輯音頻片段、轉(zhuǎn)換音頻格式、調(diào)整音頻質(zhì)量等钝侠。
視頻濾鏡和特效:FFmpeg 提供了豐富的視頻濾鏡和特效俺猿,用于改變視頻的外觀和效果。用戶可以應(yīng)用濾鏡蜈出、添加文字、模糊、銳化矩肩、顏色調(diào)整等,以實(shí)現(xiàn)各種視覺(jué)效果肃续。
跨平臺(tái)支持:FFmpeg 可在多個(gè)操作系統(tǒng)平臺(tái)上運(yùn)行黍檩,包括 Windows、macOS始锚、Linux 等刽酱。這使得開(kāi)發(fā)人員和用戶可以在不同的環(huán)境中使用和集成 FFmpeg。
1.2
安裝
可以通過(guò)官網(wǎng)下載頁(yè)面下載對(duì)應(yīng)的安裝包安裝瞧捌,也可以利用 Homebrew 工具通過(guò)終端安裝:
brew install ffmpeg
安裝完畢后棵里,可以查看版本信息檢查是否安裝成功:
ffmpeg -version
若安裝成功會(huì)得到如下類似信息:
ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
built with Apple clang version 14.0.0 (clang-1400.0.29.202)
1.3
目錄結(jié)構(gòu)
可以通過(guò)電腦 Finder->Go->Go to Folder 輸入目錄:/usr/local/Cellar/ffmpeg,進(jìn)入目錄中姐呐。
2
Qt
Qt (/?kju?t/殿怜,發(fā)音同“cute”)是一個(gè)跨平臺(tái)的 C++應(yīng)用程序開(kāi)發(fā)框架,廣泛用于開(kāi)發(fā)圖形界面應(yīng)用程序曙砂、嵌入式系統(tǒng)和移動(dòng)應(yīng)用等稳捆。它由 Qt 公司(前身為 Nokia)開(kāi)發(fā)并維護(hù),具有豐富的功能和工具麦轰,被廣泛應(yīng)用于多個(gè)行業(yè)和領(lǐng)域乔夯。
2.1
功能與特點(diǎn)
下面是 Qt 框架的一些主要特點(diǎn)和功能:
跨平臺(tái)支持:Qt 提供了很好的跨平臺(tái)支持砖织,可以在多個(gè)操作系統(tǒng)上運(yùn)行,包括 Windows末荐、macOS侧纯、Linux、Android 和 iOS 等甲脏。開(kāi)發(fā)者可以使用同一套代碼在不同平臺(tái)上構(gòu)建應(yīng)用程序眶熬,減少了開(kāi)發(fā)和維護(hù)的工作量。
組件庫(kù)和界面設(shè)計(jì):Qt 提供了豐富的組件庫(kù)和工具块请,可以輕松創(chuàng)建現(xiàn)代化和吸引人的圖形界面娜氏。它包括各種預(yù)定義的控件(如按鈕、文本框墩新、表格等)贸弥,以及支持主題和樣式定制的機(jī)制,使得開(kāi)發(fā)者可以根據(jù)需求定制應(yīng)用程序的外觀和交互方式海渊。
信號(hào)與槽機(jī)制:Qt 引入了信號(hào)與槽機(jī)制绵疲,通過(guò)信號(hào)和槽的連接,實(shí)現(xiàn)了組件之間的事件通信和交互臣疑。這種機(jī)制使得開(kāi)發(fā)者可以輕松地實(shí)現(xiàn)模塊化和松耦合的設(shè)計(jì)盔憨,提高了代碼的可讀性和可維護(hù)性。
數(shù)據(jù)庫(kù)支持:Qt 提供了數(shù)據(jù)庫(kù)訪問(wèn)模塊讯沈,支持多種數(shù)據(jù)庫(kù)系統(tǒng)郁岩,如 MySQL、SQLite缺狠、PostgreSQL 等驯用。開(kāi)發(fā)者可以使用這些模塊進(jìn)行數(shù)據(jù)庫(kù)連接、查詢和操作儒老,方便地處理應(yīng)用程序的數(shù)據(jù)存儲(chǔ)和管理蝴乔。
多媒體和圖形處理:Qt 提供了多媒體模塊,包括對(duì)音頻驮樊、視頻和圖像的處理和播放功能薇正。開(kāi)發(fā)者可以使用這些模塊實(shí)現(xiàn)音視頻播放、圖像處理囚衔、圖形繪制等功能挖腰,為應(yīng)用程序增加豐富的多媒體體驗(yàn)。
網(wǎng)絡(luò)和通信:Qt 提供了網(wǎng)絡(luò)模塊练湿,支持 TCP/IP 和 UDP 等網(wǎng)絡(luò)通信協(xié)議猴仑。開(kāi)發(fā)者可以使用這些模塊進(jìn)行網(wǎng)絡(luò)編程,實(shí)現(xiàn)網(wǎng)絡(luò)通信、數(shù)據(jù)傳輸和遠(yuǎn)程訪問(wèn)等功能辽俗。
多線程支持:Qt 提供了多線程編程的支持疾渣,包括線程管理、線程同步和并發(fā)編程等功能崖飘。開(kāi)發(fā)者可以使用這些功能來(lái)實(shí)現(xiàn)并發(fā)處理榴捡、任務(wù)分配和資源管理,提高應(yīng)用程序的性能和響應(yīng)能力朱浴。
除了上述功能外吊圾,Qt 還提供了許多其他模塊和工具,如 XML 處理翰蠢、國(guó)際化和本地化支持项乒、OpenGL 集成、Web 引擎等梁沧,以滿足不同應(yīng)用場(chǎng)景的需求檀何。
2.2
安裝
同樣的,可以直接去官網(wǎng)下載對(duì)應(yīng)平臺(tái)的安裝包進(jìn)行安裝趁尼,也可以通過(guò) brew 工具安裝:
brew install qt
安裝完畢后埃碱,會(huì)存于:/usr/local/Cellar/qt 目錄下猖辫,有類似如下信息:
You can add Homebrew's Qt to QtCreator's "Qt Versions" in:
Preferences > Qt Versions > Link with Qt...
pressing "Choose..." and selecting as the Qt installation path:
/usr/local
安裝 Qt Creator(IDE)
brew install --cask qt-creator
安裝成功酥泞,存放于:/usr/local/Caskroom/qt-creator
==> Installing Cask qt-creator
==> Moving App 'Qt Creator.app' to '/Applications/Qt Creator.app'
?? qt-creator was successfully installed!
2.3
配置
打開(kāi) Qt Creator 應(yīng)用程序,在其偏好設(shè)置里配置 Qt 路徑
根據(jù)前文可知啃憎,Qt 的路徑在/usr/local/Cellar/qt芝囤,使用快捷鍵 Command + Shift + G 手動(dòng)輸入這個(gè)文件夾,然后選擇 qt/6.5.2/bin/qmake辛萍,點(diǎn)擊 Open
點(diǎn)擊 OK
2.4
設(shè)置默認(rèn) kits
依舊選擇 Qt 應(yīng)用程序的偏好設(shè)置悯姊,選中 kits,選擇對(duì)應(yīng)機(jī)器的 kit(終端輸入如下命令可以知曉自己電腦多少位:uname -a)
滑動(dòng)到最底部贩毕,選擇 Qt 版本悯许,然后點(diǎn)擊 OK
3
第一 Qt 程序
3.1
創(chuàng)建項(xiàng)目
打開(kāi) Qt,F(xiàn)ile->New Project辉阶,或者快捷鍵:shift+command+N先壕。選擇 Qt Widgets Application
輸入完項(xiàng)目名字,選擇存放代碼的目錄
選 Build System
輸入詳細(xì)信息
勾選上 Generate form 的話會(huì)創(chuàng)建一個(gè)默認(rèn)的 mainwindow.ui 文件谆甜。有點(diǎn)類似 iOS 開(kāi)發(fā)中的 xib垃僚,可以直接拖放 UI 控件。
選 kits
項(xiàng)目創(chuàng)建完成
項(xiàng)目結(jié)構(gòu)如下
.pro 文件规辱,項(xiàng)目配置文件
Headers 文件夾谆棺,存放頭文件
Source 文件夾,存放代碼之類的罕袋,如.cpp 文件
Formse 文件夾改淑,存放 UI 文件
//main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
運(yùn)行項(xiàng)目
3.2
集成 FFmpeg
修改.pro 文件碍岔,在文件中添加如下配置信息
# 設(shè)置頭文件路徑
INCLUDEPATH += /usr/local/Cellar/ffmpeg/6.0_1/include
# 設(shè)置庫(kù)文件路徑
LIBS += -L/usr/local/Cellar/ffmpeg/6.0_1/lib \
-lavcodec \
-lavdevice \
-lavfilter \
-lavformat \
-lavutil \
-lpostproc \
-lswscale \
-lswresample
測(cè)試是否集成成功,在 main.cpp 添加幾行代碼溅固,嘗試打印 libavcodec.a 庫(kù)文件的版本信息
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
extern "C" {
#include <libavcodec/avcodec.h>
}
int main(int argc, char *argv[])
{
qDebug() << av_version_info();
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
項(xiàng)目地址付秕,代碼及學(xué)習(xí)筆記可參考。