• 正文
    • 1、視頻
    • 2、色彩空間
    • 3、音頻
    • 4、FFmpeg
  • 相關推薦
申請入駐 產業(yè)圖譜

干貨 | 音視頻相關技術基礎知識總結

2021/10/26
301
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

前陣子寫了很多筆記,由于忙于研究生課程學習,故很少有時間整理筆記分享到公眾號上,今天整理的筆記是我之前學習音視頻技術相關的筆記整理。

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、RGBYUV的換算

(1)RGBYUV算法

Y = 0.299R + 0.587G + 0.114B

U = -0.147R - 0.289G + 0.436B

V = 0.635R - 0.515G - 0.100B

(2)YUVRGB算法

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、MP3MIDI、AAC、WMA、OggVorbis

4、FFmpeg

 

4.1、FFmpeg是什么?

是一套可以用來記錄、轉化數字音頻、視頻、并能將其轉化為流的開源計算機程序。它有著非常強大的功能,主要包括:視頻采集功能、視頻格式轉換、視頻抓圖、給視頻加水印等。

4.2、FFmpeg的組成

FFmpeg由三個部分組成:

(1)工具

分別是ffmpeg、ffplay、ffserverffprobe。

ffmpeg:音視頻轉碼、轉換器

ffplay:簡單的音視頻播放器

ffserver流媒體服務器

ffprobe:簡單的多媒體碼流分析器

(2)SDK

提供開發(fā)者使用的SDK,我們可以根據自己的需求使用這些庫開發(fā)自己的應用程序,這些庫主要有:

libavcodec:包含音視頻編碼器解碼器

libavutil:包含多媒體應用常用的簡化編程的工具,如隨機數生成器、數據結構、數學函數等功能

libavformat:包含多種多媒體容器格式的封裝、解封裝工具

libavfilter:包含多媒體處理常用的濾鏡功能

libavdevice:用于音視頻數據采集和渲染等功能的設備相關

libswscale:用于圖像縮放和色彩空間和像素格式轉換功能

libswresample:用于音頻量采樣和格式轉換等功能

libpostproc:用于后期處理,當我們使用filter的時候,需要打開這個模塊,filter會用到這個模塊里的一些基礎函數

(3)源代碼

整個工程的源代碼,無論是編譯出來的可執(zhí)行程序還是SDK

它的源代碼由C語言實現(xiàn),主要在Linux平臺上進行開發(fā)。

相關推薦

登錄即可解鎖
  • 海量技術文章
  • 設計資源下載
  • 產業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

本科畢業(yè)于華南理工大學,現(xiàn)美國卡羅爾工商管理碩士研究生在讀,曾就職于世界名企偉易達、聯(lián)發(fā)科技等,多年嵌入式產品開發(fā)經驗,在智能玩具、安防產品、平板電腦、手機開發(fā)有豐富的實戰(zhàn)開發(fā)經驗,現(xiàn)任深圳市云之手科技有限公司副總經理、研發(fā)總工程師。