媒體檔案基本概念

Derek Herman
Derek Herman
Joe Medley
Joe Medley

本文將說明媒體檔案的基本概念,例如容器的概念,以及可在串流中使用的幾種可用編解碼格式。此外,我們也會稍微提及自適應串流、位元率和解析度等主題,但我們會在後續章節進一步探討這些內容。

提供影片檔案

你可能會認為,只要從攝影機擷取原始檔案,然後直接上傳到網路即可。事實上,YouTubeVimeo 等串流影片網站確實允許你這麼做,甚至提供直播功能,通常是連接攝影機的 HDMI 連接埠,然後透過擷取卡處理。這些服務可大幅簡化影片處理和上傳作業,包括產生適應式串流和各種解析度所需的許多檔案和資訊清單。加上許多其他複雜且細微的規定,讓自架式服務變得有些麻煩。如果您在意使用者對網站的體驗,從自家網站 (以及可能的獨立媒體伺服器) 準備及提供影片,比起上傳原始相機檔案,會稍微複雜一些。

影片檔案有各種格式,相機拍攝的格式通常為 .mov 檔案,如果使用的是新型的單眼相機,則為 .mp4。不過,雖然 .mov 適合用於錄製、編輯和其他早期後製程序,但檔案大小意味著不適合透過網路串流播放。此外,4K 原始 .mp4 的檔案大小會讓行動裝置播放該檔案的難度大增。由於瀏覽器支援不同的檔案格式,因此如果您打算支援自適應串流,就需要建立多個最佳化檔案,並可能需要建立資訊清單。在轉換檔案之前,您需要先瞭解檔案的幾項基本資訊和特性。

容器、編解碼和串流?

您在作業系統殼層中看到的檔案是容器,可透過檔案副檔名 (.mp4.webm.ogg 等) 識別。容器可容納一或多個串流。媒體檔案可以包含任意數量的串流,且支援的格式也比我們在此處討論的更多。

本節稍後使用的範例檔案最多含有兩個串流:音訊串流和視訊串流。你可能會遇到的其他類型包括字幕和資料,但這兩者都超出本文的範圍。在某些情況下,音訊串流和視訊串流會分別處理。你會遇到的大部分檔案都只包含單一音訊串流和單一影片串流。

在音訊和視訊串流中,實際資料會使用轉碼器進行壓縮。轉碼器 (或編碼器/解碼器) 是用於壓縮視訊或音訊資料的格式。容器和編解碼之間的差異很重要,因為使用相同容器的檔案內容可以使用不同的編解碼進行編碼。

下圖說明此結構。左側是基本容器結構,其中包含兩個串流。右側則是單一 WebM 檔案的結構細節。

比較媒體檔案結構與假設的媒體檔案。
媒體檔案的部分內容。

WebM 容器中的檔案大小可能比其他格式小上好幾個數量級,因此是行動網站串流播放的理想選擇。很抱歉,並非所有瀏覽器都支援最新的容器和編碼器。舉例來說,WebM 是專為網路打造的高品質開放原始碼選項,但目前尚未普遍支援。根據「Can I use」網站的說明,Safari 目前不支援嵌入影片的 WebM 格式。不過,WebM 確實支援 WebRTC 中使用的 VP8 和 VP9 編解碼器。因此,建議你提供備用影片。

轉碼器格式

許多檔案類型都支援在同一個容器中使用多種編碼器。完整的可用影片編碼器音訊編碼器清單,就是整個網站。剛剛提供的連結是 MDN 的實用清單,列出可在網路上使用的項目。以下列出目前偏好的檔案類型,以及可能使用的編碼器。點選檔案類型連結,查看支援這些檔案類型的瀏覽器。

檔案類型 影片轉碼器 音訊轉碼器
MP4 AV1AVC (H.264)*、VP9 AAC
WebM AV1VP9* VorbisOpus

* 表示所需的影片編碼器。

位元率和解析度

位元率是用於編碼一秒串流的位元數上限。用於編碼一秒串流的位元越多,潛在的細節和保真度就越高。如要進一步瞭解這項概念,請參閱「比特率」一節。

解析度是指單一影格影片中的資訊量,以各個維度的邏輯像素數量表示。我們會在「解析度」一節中進一步說明這項概念。

接下來,我們將在「媒體應用程式基礎知識」一節中,說明如何使用兩個指令列工具 (Shaka Packager 和 FFmpeg) 檢查這些特性。