前陣子寫了很多筆記,由于忙于研究生課程學(xué)習(xí),故很少有時(shí)間整理筆記分享到公眾號(hào)上,今天整理的筆記是我之前學(xué)習(xí)音視頻技術(shù)相關(guān)的筆記整理。
1、視頻
1.1、視頻幀
幀,是視頻的一個(gè)基本概念,表示一張畫面,一個(gè)視頻就是由許許多多的幀組成的。
1.2、幀率
即單位內(nèi)幀的數(shù)量,單位為:幀/秒 或 fps
(frames per second
),一秒內(nèi)包含多少?gòu)垐D片,圖片越多,畫面越順滑,過(guò)渡越自然。
常見的幀率典型值:
(1)24/25 fps
:1秒24/25幀,一般的電影頻率。
(2)30/60 fps
:1秒30/60幀,游戲的頻率,30幀可以接受,60幀會(huì)感覺更加流暢逼真
(3)85fps
:這個(gè)幀率及以上人眼基本無(wú)法察覺出來(lái),更高的幀率在視頻里沒有太大意義。
2、色彩空間
2.1、RGB
通過(guò)R、G、B三種基礎(chǔ)色,可以混合出所有的顏色
2.2、YUV
也叫,YCbCr
,是一種亮度與色度分離的色彩格式
(1)Y:亮度,就是灰度值,出了表示亮度信號(hào)外,還含有較多的綠色通道量
(2)U:藍(lán)色通道與亮度的差值
(3)V:紅色通道與亮度的差值
優(yōu)勢(shì):
人眼對(duì)亮度敏感,對(duì)色度不敏感,因此減少部分UV的數(shù)據(jù)量,人眼卻無(wú)法感知出來(lái),這樣可以通過(guò)壓縮UV分辨率,在不影響感觀的前提下,減少視頻的體積。
2.3、RGB
與YUV
的換算
(1)RGB
轉(zhuǎn)YUV
算法
Y = 0.299R
+ 0.587G
+ 0.114B
U = -0.147R
- 0.289G
+ 0.436B
V = 0.635R
- 0.515G
- 0.100B
(2)YUV
轉(zhuǎn)RGB
算法
R = Y + 1.14V
G = Y - 0.39U
- 0.58V
B = Y + 2.03U
3、音頻
3.1、基本知識(shí)
人類能夠聽到的所有聲音都稱之為音頻,在計(jì)算機(jī)中,音頻只是存儲(chǔ)在計(jì)算機(jī)里的聲音。
PCM
:音頻數(shù)據(jù)的承載方式最常用的是脈沖編碼調(diào)制。
在自然界中,聲音是連續(xù)不斷的,是一種模擬信號(hào),那怎樣才能把聲音保存下來(lái)呢?就是將這些模擬信號(hào)數(shù)字化,即模數(shù)轉(zhuǎn)換,將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)。
聲音是一種波,由自己的振幅和頻率,那么要保存聲音,就要保存聲音在各個(gè)時(shí)間點(diǎn)上的振幅。而數(shù)字信號(hào)并不能連續(xù)保存所有時(shí)間點(diǎn)的振幅。
奈奎斯特采樣定理:為了不失真地恢復(fù)模擬信號(hào),采樣頻率應(yīng)該不小于模擬信號(hào)頻率中最高頻率的2倍。
3.2、采樣率和采樣位數(shù)
(1)采樣率
根據(jù)奈奎斯特采樣定理,人耳能聽到的最高頻率為20KHz
,所以為了滿足人耳的聽覺要求,采樣率至少為40KHz
,通常為44.1KHz
,更高的通常為48KHz
。
注意:人耳聽覺頻率范圍[20Hz,20KHz]
。
(2)采樣位數(shù)
波形振幅在模擬信號(hào)上也是連續(xù)的樣本值,而在數(shù)字信號(hào)中,信號(hào)一般是不連續(xù)的,所以模擬信號(hào)量化后,只能取一個(gè)近似的整數(shù)值,為了記錄這些振幅值,采樣器會(huì)采用一個(gè)固定的位數(shù)來(lái)記錄這些振幅值,通常有8位、16位、32位。
注意:位數(shù)越多,記錄的值越準(zhǔn)確,還原度越高,但是占用的硬盤空間越大。
位數(shù) | 最小值 | 最大值 |
---|---|---|
8 | 0 | 255 |
16 | -32768 | 32767 |
32 | -2147483648 | 2147483647 |
3.3、音頻編碼
由于數(shù)字信號(hào)是由0、1組成的,因此,需要將幅度值轉(zhuǎn)化為一系列0和1進(jìn)行存儲(chǔ),也就是編碼。
3.4、PCM
的采集步驟
模擬信號(hào)->采樣(奈奎斯特采樣定理)->量化->編碼->數(shù)字信號(hào)
3.5、聲道數(shù)
聲道數(shù)是指支持能不同發(fā)聲(注意是不同聲音)的音響的個(gè)數(shù)。
- 單聲道:1個(gè)聲道雙聲道:2個(gè)聲道立體聲道:默認(rèn)為2個(gè)聲道立體聲道(4聲道):4個(gè)聲道
3.6、碼率
碼率是指一個(gè)數(shù)據(jù)量中每秒鐘能通過(guò)的信息量,單位bps(bit per second)
碼率 = 采樣率 * 采樣位數(shù) * 聲道數(shù)
3.7、常見的音頻格式
CD格式、WAVE(*.WAV
)、AIFF
、MP3
、MIDI
、AAC
、WMA
、OggVorbis
4、FFmpeg
4.1、FFmpeg
是什么?
是一套可以用來(lái)記錄、轉(zhuǎn)化數(shù)字音頻、視頻、并能將其轉(zhuǎn)化為流的開源計(jì)算機(jī)程序。它有著非常強(qiáng)大的功能,主要包括:視頻采集功能、視頻格式轉(zhuǎn)換、視頻抓圖、給視頻加水印等。
4.2、FFmpeg
的組成
FFmpeg
由三個(gè)部分組成:
(1)工具
分別是ffmpeg
、ffplay
、ffserver
和ffprobe
。
ffmpeg
:音視頻轉(zhuǎn)碼、轉(zhuǎn)換器
ffplay
:簡(jiǎn)單的音視頻播放器
ffprobe
:簡(jiǎn)單的多媒體碼流分析器
(2)SDK
提供開發(fā)者使用的SDK
,我們可以根據(jù)自己的需求使用這些庫(kù)開發(fā)自己的應(yīng)用程序,這些庫(kù)主要有:
libavutil
:包含多媒體應(yīng)用常用的簡(jiǎn)化編程的工具,如隨機(jī)數(shù)生成器、數(shù)據(jù)結(jié)構(gòu)、數(shù)學(xué)函數(shù)等功能
libavformat
:包含多種多媒體容器格式的封裝、解封裝工具
libavfilter
:包含多媒體處理常用的濾鏡功能
libavdevice
:用于音視頻數(shù)據(jù)采集和渲染等功能的設(shè)備相關(guān)
libswscale
:用于圖像縮放和色彩空間和像素格式轉(zhuǎn)換功能
libswresample
:用于音頻量采樣和格式轉(zhuǎn)換等功能
libpostproc
:用于后期處理,當(dāng)我們使用filter的時(shí)候,需要打開這個(gè)模塊,filter會(huì)用到這個(gè)模塊里的一些基礎(chǔ)函數(shù)
(3)源代碼
整個(gè)工程的源代碼,無(wú)論是編譯出來(lái)的可執(zhí)行程序還是SDK
。
它的源代碼由C語(yǔ)言實(shí)現(xiàn),主要在Linux平臺(tái)上進(jìn)行開發(fā)。