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