[Media] 影音傳輸-基礎知識
以下內容多整理:
- 30 天之即時網路影音開發攻略(小白本) by 我是小馬克 @ iThome
- Video Compression Basics @ AWS Elemental Foundations
圖片來源: 30 天之即時網路影音開發攻略(小白本) @ iThome
聲音採集
- 脈碼調變(PCM, pulse-code modulation):可以用來指將類比訊號轉換為數位訊號的「方式」,或者指透過這個方式產生的「編碼」,可以想像成是聲音的 RAW 檔,又稱「無損編碼」。
位元率 (bps) = 採樣率(hz) x 採樣大小(bit) x 通道
- 位元率(bps, bit Per Second):在聲音中通常使用
bps
來衡量音訊的品質,越高就代表質量越好,同時也需花費越多的儲存空間,例如10 bps
指的是這段聲音每秒共有 10 bit 的資料量;32 kbps
(32,000 bit/sec
),表示每秒要處理32 kbit
的量,當音訊有 10 秒時,則需要 32 * 10 = 320 kbit 的空間。 - 採樣率:表示每秒鐘會抓取幾次,採樣率越高音樂越優質,單位為
Hz
。 - 通道(channel):表示有幾個聲道。
- 採樣大小:聲音的解析度,一般為
16 bit
,數值越高解析度越好,單位為bit
。
聲音編碼壓縮
keywords: G.711
, MP3
, AAC
, Opus
, FLAC
, iSac
PCM 所產生的編碼稱作「無損編碼(lossless codec)」,這就類似照片的 RAW 檔,但因為這種 RAW 檔所佔的空間太大了,因此就有許多不同用來「壓縮編碼」的方式。
壓縮編碼的方式可以大致分成**「無損編碼(lossless codec)」和「有損編碼(lossy codec)」**這兩種。無損編碼可以將檔案還原成原本的 PCM 編碼;有損編碼則是在盡可能不影響聲音品質的情況下進行聲音的壓縮。
常見的編碼方式如:
- G.711 ( 始祖 ):最原始的編碼,即類似 PCM 編碼
- MP3 ( MPEG-1 audio layer 3 ):將木耳聽不到的 PCM 音頻資料移除。專利已過期。
- AAC ( Advanced Audio Coding ): 作為 MP3 的繼承人,相同位元率的情況下音質比 MP3 更好,iTunes 和 Youtube 目前都使用此編碼。製造商與開發商需要需要專利許可。
- Opus:目的是設計在即時語音、網路會議、遊戲內聊天等需要低延遲的網路環境,又被稱為「編碼瑞士刀」,可提供幾乎所有不同的位元率,且在更高位元下可提供比 AAC 更好的音質。免費。
- FLAC ( Free Lossless Audio Codec ):無失真壓縮,類似 ZIP 解壓縮的概念,目前用在 Spotify Hi-Fi。
- iSac:大部分使用在 VoIP 與串流應用,提供寬帶(wideband,16 KHz)和超寬帶(32 KHz)的採樣率,是 WebRTC 預設的語音編碼器。目前屬於 Google。
- iLBC:提供窄帶(8 KHz)的語音編碼器,同樣常用在 VoIP 和串流應用。
⚠️
.mp3
不是編碼,它只是裝了 MP3 編碼的容器。
影像採集
和影像有關的重要資訊包含解析度(resolution)、幀率(frame rate)、位元率(bitrate)、色彩空間(color space)、位元度(bit depth)、Compression Scheme、編解碼器(codec)、容器(container)。
解析度(resolution)與影片畫質
數位「圖像」是有一堆帶有顏色的「格子」所組成,每個最小可控制的格子都稱作一個「像素(pixel)」。對於同樣的畫面來說,當該畫面所含的像素越高時就越能反映真實的樣子,解析度影響影像清晰度(clarity)和銳利度(sharpness)的重要因素。
常見的解析度(又稱「垂直解析度」)包含:
- 傳統電視解析度:
720 x 480
,寬高比(aspect ration)是4:3
。 - High Definition (HD):
1920 X 1080
,寬高比(aspect ration)是16:9
。 - Ultra High Definition (UHD, 4K UHD):
3840 X 2160
,又稱 4K 螢幕,,寬高比(aspect ration)是16:9
。
色彩空間(Color Space)、色域(Color Gamut)與位元度(bit depth)
keywords: 色彩空間(Color Space)
、色域(Color Gamut)
、位元度(bit depth)
人眼可看到的可見光範圍可以組成「色彩空間(Color Space)」,而在色彩空間中裝置可以顯示顏色範圍稱作「色域(Color Gamut)」。
在每一個像素(pixel)中可以帶有顏色資訊,這些顏色資訊同樣以位元(bit)的方式保存,每一個像素中帶有的位元數(number of bits)即稱作「位元度(bit depth)」。當一個像素被給予越多的位元時,顏色的呈現則會越精準。
「位元度(bit depth)」指的是一個像素會用多少個 bit 來保存資訊。
舉例來說,若我們想要呈現帶有陰影的紅色時,若只用 1 個 bit 來呈現,則只能表示「全紅」或「全白」(21);若用 2 個 bit 來呈現,則可以用 4 種明度來呈現紅到白(22);用 3 個 bit 則可以用 8 種(23)明度來呈現;當我們用 8 bit 時,則可以有 256 種(28)來呈現。
實際上一個像素會包含三種主要的顏色:紅、綠、藍。這三種顏色可以有各自的色版(color channel),假設每個色版都有 8 bits 來保存,就會有 28 (256)種值,當有三種顏色時,會使用 24-bit 來保存顏色,這被稱作 24-bit color
或 a bit depth of 24
,一共可以顯示超過 1600 萬種顏色。
在最新的 HDR (High Dynamic Range) 影片中則會每個色版使用 10 bits 或 12bits 來保存顏色,因此可以提供超過 10 億到 680 億以上的顏色資訊。
顏色編碼可以分成:
- RGB:由 Red, Green, Blue 組成,每一種顏色包含 8 bit(0~255),也就是 RGB 各用 1 byte 來記錄,總共需要 3 bytes
- YUV:所需的空間更小,適合用於視訊。
影格率/影像幀數/幀率(FPS)與影片流暢度
影像則可視為一堆連續的圖片,而每一張圖片就稱作一幀(影格)
(frame),連續好幾幀就會變成動畫,當我們說幀數
為 30 表示這個影片每秒鐘由 30 張圖片組成,又稱 30fps
。FPS (Frames Per Second) 的值越大,畫面越流暢,但需要佔用多的儲存空間。
在一個連續動作中會由許多幀組成,其中有一些會被稱作關鍵幀(keyframe / I-frame),連續動作中的其他幀都是根據這個「關鍵幀」進行小幅度的變動,並把其他變化不大的部分拿掉,以此減少所需的空間。
螢幕
影片有影片的解析度,而螢幕在成像是則是透過以不斷「掃描」的方式來成像。
傳統的 CRT(Cathode Ray Tube)使用的是「交錯掃描(interlaced scanning)」的方式,單一影格會透過兩階段呈現,先在單數行的 line 呈現,接著才是偶數行的 line,以此來解決螢幕閃爍的情況。它會在影像高度後方加上小寫 i
來表示,例如,480i
或 1080i
。
現在較新的螢幕(LCD, LED, OLED)則是使用「連續掃描(progressive scanning)」,一次就將單一影格的所有 line 呈現出來,並且不會有明顯的閃爍。它會在影像高度後方加上小寫 p
來表示,例如,1080p
,而 4K 螢幕因為一定是用連續掃描的方式,因此後方的 p
就被省略。