FFmpeg簡介

目錄:

1、為什么選擇FFmpeg?

2、Windows開發環境搭建(包括FFmpeg和Qt)

3、Mac開發環境搭建(包括FFmpeg和Qt)

4、重識圖片

5、重識聲音

6、重識音頻?之 PCM(脈沖編碼調制)

7、重識音頻?之 音頻的編碼與解碼

8、重識音頻之?常見的音頻編碼和文件格式


1、為什么選擇FFmpeg?

????????FFmpeg是跨平臺的音視頻開發庫。而且掌握了FFmpeg,可以很快上手其他音視頻開發庫,因為底層原理都是一樣的,最終操作的都是一樣的數據,比如MP3、MP4文件。

其他平臺開發庫簡介:iOS:AVFoundation、AudioUnit等;android:MediaPlayer、MediaCodec等;Windows:DriectShow等;

2、Windows開發環境搭建(包括FFmpeg和Qt)

3、Mac開發環境搭建(包括FFmpeg和Qt)

? ? Qt安裝參考https://www.cnblogs.com/GJ-ios/p/15674851.html

? ? Qt運行不起來:https://blog.csdn.net/qq_35664104/article/details/121480884

? ? Qt學習:http://c.biancheng.net/view/1817.html

4、重識圖片

? ? ? ? 包括像素、色深、文件格式(壓縮格式)

????1)、RGB顏色模型:將紅綠藍三原色的色光以不同的含量疊加可以合成各種顏色。

????2)、RGB位深度24的含義:每一個像素使用24個二進制位來存儲顏色信息;每一個像素的顏色是由RGB 3個顏色通道合成的,因此每個顏色通道都用8bit來表示其“含量”(值)。

?? ? ? 位深度有1、3、8、16、24、32等,這些可以網上查。對于32位深度,是在24的基礎上增加了8bit的透明度,可以表示帶透明度的顏色。

????3)、顏色數量:2的n次方,n為位深度。位深度24能展示的顏色有1678萬種,因此被稱為真彩色,即常說的24位真彩。

????4)、LCD屏幕有兩層,上層是RGB像素層,用于控制哪個顏色濾光,下層為背光層(發光);OLED屏幕沒有背光層了,每一個像素獨立發光,更節能,缺點是壽命短。

????5)、圖片格式(文件格式):將圖片按照一定的惡格式壓縮存儲。比如50*60像素24位深度的圖片原始大小為8.79KB,jpg格式存儲后為1.56KB。無損壓縮:優點不損失圖片質量,缺點壓縮率低,體積大,如png、gif。有損壓縮:優點壓縮率高,體積小,缺點損失圖片質量,如jpg。

????6)、jpg、png、gif格式是位圖,就是上面介紹的圖片;svg是矢量圖,上面未介紹。

5、重識聲音

? ? ? ? 1)、振幅:從平衡位置到最大位移位置之間的距離

? ? ? ? 2)、頻率(Frequency):物體每秒來回振動的次數。

? ? ? ? 2)、周期:完全來回振動一次所花費的時間

? ? ? ? 3)、音調:頻率越高,音調就越高;頻率越低,音調就越低。通常女生講話時,聲帶振動的頻率就比較高,因此我們聽到的音調就高,有時會有點刺耳,而男生講話時,聲帶振動的頻率就比較低,因此我們聽到的音調就低,顯得比較低沉。

? ? ? ? 4)、響度:常用dB(分貝)來描述。當提高聲音的響度(音量,大小)時,振動的幅度會變大。

? ? ? ? 5)、音色(Timbre)是指聲音的特色。不同的聲源由于其材料、結構不同,則發出聲音的音色也不同。我們之所以能夠根據聲音區分出不同的樂器、不同的人,都是因為它們的音色不同。不同音色的聲音,即使在同一響度和同一音調的情況下,也能讓人區分開來。

? ? ? ? 6)、基音、泛音:通常聲源的振動產生的并不是單一頻率的聲波,而是由基音和不同頻率的泛音組成的復合聲音。當聲源的主體振動時會發出一個基音(基本頻率,基頻,Fundamental Frequency)。同時其余各部分也有復合的聲源,這些聲源組合產生泛音。泛音(Overtone)其實就是物理學上的諧波(Harmonic)。音調是由基音決定的,而音色主要取決于泛音。

6、重識音頻?之 PCM(脈沖編碼調制)

? ? ? ? 1)、如何把聲音(聲源的振動)記錄下來呢?聲音屬于模擬信號,但更便于計算機處理和存儲的是數字信號(二進制編碼),所以需要將模擬信號(Analog Signal)轉成數字信號(Digital Signal)后進行存儲。這一過程,我們可以稱之為:音頻數字化。將音頻數字化的常見技術方案是脈沖編碼調制(PCM,Pulse Code Modulation),主要過程是:采樣 → 量化 → 編碼。

? ? ? ? 2)、采樣

模擬信號的波形是無限光滑的,可以看成由無數個點組成,由于存儲空間是相對有限的,數字編碼過程中,必須要對波形的點進行采樣。采樣(Sampling):每隔一段時間采集一次模擬信號的樣本,是一個在時間上將模擬信號離散化(把連續信號轉換成離散信號)的過程。

? ? ? ? (1)、采樣率(采樣頻率,采樣速率,Sampling Rate):每秒采集的樣本數量。根據采樣定理(奈奎斯特–香農采樣定理,Nyquist-Shannon sampling theorem)得知:只有當采樣率高于聲音信號最高頻率的2倍時,才能把采集的聲音信號唯一地還原成原來的聲音。人耳能夠感覺到的最高聲音頻率為20000Hz,因此為了滿足人耳的聽覺要求,需要至少每秒進行40000次采樣(40kHz采樣率)。這就是為什么常見的CD的采樣率為44.1kHz。電話、無線對講機、無線麥克風等的采樣率是8kHZ。

? ? ????3)、量化(Quantization):將每一個采樣點的樣本值數字化。位深度(采樣精度,采樣大小,Bit Depth):使用多少個二進制位來存儲一個采樣點的樣本值。位深度越高,表示的振幅越精確。常見的CD采用16bit的位深度,能表示65536個不同的值。DVD使用24bit的位深度,大多數電話設備使用8bit的位深度。

? ? ????4)、編碼:將采樣和量化后的數字數據轉成二進制碼流。

? ? ????5)、聲道:單聲道產生一組聲波數據,雙聲道(立體聲)產生兩組聲波數據。

? ? ? ? 6)、聲音大小計算

????????????????采樣率44.1kHZ、位深度16bit的1分鐘立體聲PCM數據有多大?

????????????????采樣率 * 位深度 * 聲道數 * 時間

? ??????????????44100 * 16 * 2 * 60 / 8 ≈ 10.34MB

????????????????1分鐘10.34MB,這對于大部分用戶來說是不能接受的。要想在不改變音頻時長的前提下,降低音頻數據的大小,只有2種方法:降低采樣指標、壓縮。降低采樣指標是不可取的,會導致音頻質量下降,用戶體驗變差,因此專家們研發了各種壓縮方案,即各種編碼。

? ? ? ? 7)、比特率(Bit Rate),指單位時間內傳輸或處理的比特數量,單位是:比特每秒(bit/s或bps),還有:千比特每秒(Kbit/s或Kbps)、兆比特每秒(Mbit/s或Mbps)、吉比特每秒(Gbit/s或Gbps)、太比特每秒(Tbit/s或Tbps)。

????????????????采樣率44.1kHZ、位深度16bit的立體聲PCM數據的比特率是多少?

????????????????采樣率 * 位深度 * 聲道數

? ??????????????44100 * 16 * 2 = 1411.2Kbps

????????????????通常,采樣率、位深度越高,數字化音頻的質量就越好。從比特率的計算公式可以看得出來:比特率越高,數字化音頻的質量就越好。

? ? ? ? 8)、信噪比(Signal-to-noise ratio,SNR,S/N,訊噪比),指信號與噪聲的比例,用于比較所需信號的強度與背景噪聲的強度,以分貝(dB)為單位。位深度限制了信噪比的最大值,它們的關系如下表所示。

7、重識音頻?之 音頻的編碼與解碼

? ? ? ? 1)、編碼(Encode)

????????????????PCM數據可以理解為是:未經壓縮的原始音頻數據,體積比較大,為了更便于存儲和傳輸,一般都會使用某種音頻編碼對它進行編碼壓縮,然后再存成某種音頻文件格式。壓縮分為無損壓縮和有損壓縮。

? ??????????????無損壓縮:解壓后可以完全還原出原始數據;壓縮比小,體積大

? ??????????????有損壓縮:解壓后不能完全還原出原始數據,會丟失一部分信息;壓縮比大,體積小;壓縮比越大,丟失的信息就越多,還原后的信號失真就會越大;一般是通過舍棄原始數據中對人類聽覺不重要的部分,達成壓縮成較小文件的目的。

????????????????壓縮比 = 未壓縮大小 / 壓縮后大小

? ? ? ? ? ? ? ? 編碼后為什么要存儲為不同的音頻文件格式、容器?答案:音視頻編碼主要是對音視頻PCM進行壓縮,很多時候音頻編碼數據、視頻編碼數據、字幕需要同時展示給用戶,因此產生了不同的文件格式,作為容器同時存儲多種編碼數據。

? ? ? ? 2)、解碼(Decode)

????????????????當需要播放音頻時,先從音頻文件中取出壓縮數據,解碼(解壓縮)出PCM數據,然后再進行播放。

8、重識音頻之?常見的音頻編碼和文件格式

????????需要注意的是:音頻文件格式并不等于音頻編碼。比如:WAV只是一種文件格式,并不是一種編碼;FLAC既是一種文件格式,又是一種編碼。

下面對常見的音頻編碼和文件格式做一個簡介,以后有需要時再進行詳細介紹。

無損

Monkey's Audio

Monkey's Audio,是一種無損的音頻編碼和文件格式,文件擴展名為.ape,壓縮率一般在55%左右。

FLAC

FLAC(Free Lossless Audio Codec),是一種無損的音頻編碼和文件格式,文件擴展名為.flac。雖然壓縮率稍有不及Monkey's Audio,但FLAC技術更先進,占用資源更低,有更多的平臺及硬件產品支持FLAC。

ALAC

ALAC(Apple Lossless Audio Codec),是由Apple開發的一種無損的音頻編碼,文件擴展名為.m4a、.caf。

有損

MP3

MP3(MPEG Audio Layer III),是非常流行的一種有損音頻編碼和文件格式,文件擴展名為.mp3。

第1版是:MPEG-1 Audio Layer III,屬于國際標準ISO/IEC 11172-3

第2版是:MPEG-2 Audio Layer III,屬于國際標準ISO/IEC 13818-3

第3版是:MPEG-2.5 Audio Layer III,并不是由MPEG官方開發的,不是公認的標準

WMA

WMA(Windows Media Audio),是由Microsoft開發的音頻編碼和文件格式,文件擴展名為.wma。包括4種類型:

WMA:原始的WMA編解碼器,作為MP3的競爭者,屬于有損音頻編碼

WMA Pro:支持更多聲道和更高質量的音頻,屬于有損音頻編碼

WMA Lossless:屬于無損音頻編碼

WMA Voice:屬于有損音頻編碼

AAC

AAC(Advanced Audio Coding),是由Fraunhofer IIS、杜比實驗室、AT&T、Sony、Nokia等公司共同開發的有損音頻編碼和文件格式,壓縮比通常為18:1。

AAC被設計為MP3格式的后繼產品,通常在相同的比特率下可以獲得比MP3更高的聲音質量,是iPhone、iPod、iPad、iTunes的標準音頻格式。

AAC編碼的文件擴展名主要有3種:

.acc:傳統的AAC編碼,使用MPEG-2 Audio Transport Stream(ADTS)容器

.mp4:使用了MPEG-4 Part 14的簡化版即3GPP Media Release 6 Basic(3gp6)進行封裝的AAC編碼

.m4a:為了區別純音頻MP4文件和包含視頻的MP4文件而由Apple公司使用的擴展名

Apple iTunes對純音頻MP4文件采用了.m4a文件擴展名

M4A的本質和音頻MP4相同,故音頻MP4文件可以直接更改文件擴展名為.m4a

Vorbis

Vorbis,是由Xiph.Org基金會開發的一種有損音頻編碼。通常以Ogg作為容器格式,所以常合稱為Ogg Vorbis,文件擴展名為.ogg。

Speex

Speex,是由Xiph.Org基金會開發的一種有損音頻編碼和文件格式,文件擴展名為.spx。

Opus

Opus,是由Xiph.Org基金會開發的一種有損音頻編碼和文件格式,文件擴展名為.opus。用以取代Vorbis和Speedx。經過多次盲聽測試,在任何給定的比特率下都比其他標準音頻格式具有更高的質量,包括MP3、AAC。

文件格式

Ogg

Ogg是一種多媒體文件格式,由Xiph.Org基金會所維護,可以納入各式各樣的音視頻編碼(音頻、視頻都可以),文件擴展名常為.ogg。

Ogg常用的音頻編碼有:

有損壓縮:Speex、Vorbis、Opus

無損壓縮:FLAC

未壓縮:PCM

WAV

WAV(Waveform Audio File Format),是由IBM和Microsoft開發的音頻文件格式,擴展名是.wav,通常采用PCM編碼,常用于Windows系統中。

WAV的文件格式如下圖所示,前面有44個字節的文件頭,緊跟在后面的就是音頻數據(比如PCM數據)。

WAV文件格式

WAV文件格式

NumChannels:聲道數

SampleRate:采樣率(Hz)

ByteRate:每秒多少個字節(Byte/s)

BitsPerSample:位深度

AIFF

AIFF(Audio Interchange File Format),由Apple開發的音頻文件格式,擴展名是.aiff、.aif。跟WAV一樣,通常采用PCM編碼,常用于Mac系統中。

有損和無損

根據采樣率和位深度可以得知:相對于自然界的信號,音頻編碼最多只能做到無限接近,任何數字音頻編碼方案都是有損的,因為無法完全還原。目前能夠達到最高保真水平的就是PCM編碼,因此,PCM約定俗成叫做無損音頻編碼,被廣泛用于素材保存及音樂欣賞,CD、DVD以及常見的WAV文件中均有應用。但并不意味著PCM就能夠確保信號絕對保真,PCM也只能做到最大程度的無限接近。我們習慣性的把MP3列入有損音頻編碼范疇,是相對于PCM編碼的。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,914評論 2 372

推薦閱讀更多精彩內容

  • 1 FFmpeg 概述 引自 百度百科:FFmpeg[https://baike.baidu.com/item/f...
    蔣斌文閱讀 1,690評論 0 0
  • 前言 FFMPEG是特別強大的專門用于處理音視頻的開源庫。你既可以使用它的API對音視頻進行處理,也可以使用它提供...
    蔣斌文閱讀 3,574評論 0 0
  • 上一篇::總綱[http://www.lxweimin.com/p/037f3652e55a] 環境:ffmpeg...
    東也_閱讀 808評論 0 1
  • 前言 FFMPEG是特別強大的專門用于處理音視頻的開源庫。你既可以使用它的API對音視頻進行處理,也可以使用它提供...
    劉小乙閱讀 618評論 0 0
  • [TOC] 基本知識FFmpeg 資源網站音視頻流容器聲道命令種類處理流程 下載 目錄結構 模塊列表顯示所有可用的...
    Afra55閱讀 1,356評論 0 1