這場對談邀請到 VideoLAN 協會主席暨 VLC 媒體播放器核心開發者 Jean-Baptiste Kempf(以下簡稱 JB),以及長期貢獻於 FFmpeg、開發 x264 且經營知名的 FFmpeg 社群帳號的資深工程師 Kieran Kunhya。兩人與主持人 Lex Fridman 深入探討了 FFmpeg 與 VLC 這兩個支撐現代網路影像架構的開源專案。FFmpeg 幾乎是 YouTube、Netflix、Chrome、VLC 及 Discord 等所有接觸影音平台背後的隱形骨幹,能解碼、編碼、轉碼、串流與播放幾乎所有曾被創造出的影音格式 [02:30, 02:41]。VLC 則是一款傳奇的開源媒體播放器,下載量超過 65 億次,其特點是無廣告、無追蹤且能處理各類複雜格式 [03:03, 03:11]。
開源社群的核心精神在於對卓越程式碼的追求,而不計較開發者的身份、背景或來源 [00:03, 00:07]。JB 指出,社群中許多貢獻者性格內向,但這並不重要,重要的是程式碼的品質,因為這定義了整個社群 [00:23, 00:27]。Kieran 提到,FFmpeg 是世界上處理器 中央處理器 (CPU) 使用率最高、分布最廣的軟體之一,影音處理中的每一句話背後可能都代表著某人一輩子的心血與無數專書的研究 [00:31, 00:39]。在技術細節上,FFmpeg 所有的編解碼器包含了約 10 萬行組合語言,而專為 AV1 格式設計的 dav1d 解碼器則擁有高達 24 萬行手寫組合語言 [00:45, 00:50]。在追求極致效能的影音世界中,每一個時脈週期(Cycle)都至關重要,因為全球約有 30 億台裝置在不間斷地解碼影片,例如 Netflix 有 30% 的影片採用 AV1 格式,YouTube 則佔了 50% [00:55, 01:02]。
當使用者在播放器中按下播放鍵時,系統會經歷多個階段。首先是從網址獲取位元流資料,例如透過 超文本傳輸協定 (HTTP) 或檔案路徑 [12:05, 12:14]。接著,容器 (Container) 或稱為 解多工器 (Demuxer) 會將資料切分,標記出視訊、音訊與字幕幀(Frames) [12:23]。系統會偵測該格式是否能由 圖形處理器 (GPU) 硬體加速,若不行則退回軟體解碼 [12:44]。軟體解碼的第一步是 去熵編碼 (De-entropy coding),利用 霍夫曼編碼 (Huffman coding) 或 算術編碼 (Arithmetic coding) 移除位元流的數學層壓縮 [13:19, 13:25]。隨後進行 內預測 (Intra prediction) 以建立空間域的圖像,並處理預測與現實差異產生的 殘差 (Residual) [13:34, 13:51]。這些殘差儲存於頻率域並經過 量化 (Quantization),最後透過 逆變換 (Inverse transform) 回到空間域並套用至影像 [13:55, 14:03]。
影片壓縮的本質是移除視覺上的冗餘。人眼感知的細節有限,因此 編解碼器 (Codec) 會移除人類不在意的細節 [14:40, 14:59]。與 壓縮檔 (ZIP) 不同,影音壓縮是一種破壞性損失,必須模仿人耳與人眼的運作邏輯 [16:08, 16:17]。例如,視訊處理通常不使用 RGB 空間,而是轉換為 YUV 空間,其中 Y 代表 亮度 (Luminance),UV 代表 彩度 (Chrominance) [15:18, 15:22]。這符合人類視網膜中感光細胞對亮度更為敏感的特性,透過降低彩度解析度,能在肉眼察覺不到的情況下將體積縮減一半 [15:30, 15:48]。現代解碼器如 AV1 或 VVC 實際上是一套工具集,會根據內容(如視訊、動畫或螢幕共享)調整壓縮策略 [29:12, 29:45]。
VLC 的強大在於其不信任任何輸入。JB 提到,VLC 起源於 90 年代末期的校園網路環境,由於是透過 使用者資料包協定 (UDP) 串流,資料經常損壞,因此 VLC 從架構設計上就具備處理破損檔案的能力 [23:50, 24:06]。VLC 甚至支援了一些非常冷門的功能,例如透過擷取卡錄製 VHS 錄影帶,或支援帶有自定義加密方案的 DVD-Audio [05:46, 06:10]。甚至有開發者實作了特定星際大戰遊戲中僅出現過一次、時長 10 秒的開場動畫編解碼器 [06:29]。VLC 著名的交通錐標誌已成為文化的一部分,JB 透露,有 25% 的官網流量來自搜尋「交通錐播放器」(Cone player)的人 [07:51, 07:55]。儘管曾有人開玩笑提議更換 Logo,卻收到了上萬封反對郵件 [08:09, 08:21]。
JB 曾多次拒絕價值數千萬美元的廣告或間諜軟體置入邀約 [56:24, 57:00]。他認為,雖然金錢很重要,但必須透過道德的方式賺取,不應背棄使用者或偷竊資料 [1:06:51, 1:07:06]。VLC 的起源可追溯到法國巴黎中央理工學院(École Centrale Paris)的學生專案,當時學生們為了在校園 權杖環 (Token Ring) 網路上觀看衛星電視,開發出了最初的串流系統 [57:53, 1:01:23]。校方最初想將該技術商品化,但學生們堅持並成功在 2001 年使其成為開源專案 [1:02:42, 1:04:11]。
開源社群近期也面臨不少挑戰。Kieran 批評了一些安全研究人員的作法,特別是 Google 安全工程師利用人工智慧生成錯誤報告,並在問題修復前就向媒體宣揚其 AI 的效能 [1:10:50, 1:11:27]。他指出,安全圈有時會過度警示(如將 1990 年代老遊戲的冷門編解碼器錯誤標記為高優先權漏洞),卻不願提供修復補丁或資金支援 [1:11:53, 1:14:12]。此外,像 Microsoft Teams 這樣的營利產品曾向志工尋求緊急支援,卻僅願提供一次性的微薄報償,顯示出大型企業對開源基礎建設的依賴與忽視之間的矛盾 [1:17:47, 1:18:13]。
在程式開發的哲學上,這群專家捍衛著手寫 組合語言 (Assembly) 的價值。儘管現代開發者傾向於相信編譯器可以自動優化,但 Kieran 展示了手寫組合語言能比 C 語言 快上 62 倍的實例 [2:01:26, 2:09:52]。在 dav1d 專案中,為了達到極致效能,開發者甚至自定義了函數調用約定(Calling convention),而不遵循作業系統的標準,以減少暫存器儲存的負擔 [2:12:13, 2:14:51]。JB 認為,學習組合語言能讓工程師理解電腦架構,包含快取記憶體層級與 單指令多資料流 (SIMD) 的運作,從而寫出更好的程式碼 [1:31:51, 2:25:04]。對於近期流行的 Rust 語言,兩人持保留態度,認為 Rust 在安全性與記憶體管理上有其優點,但對於需要極致效能並依賴內聯組合語言(Inline assembly)的影音解碼來說,Rust 的安全保障往往會被打破 [2:27:04, 2:31:47]。
FFmpeg 也扮演著「影音羅塞塔石碑」(Rosetta Stone)的角色,是數位考古與典藏的重要工具 [3:59:27]。許多檔案館利用 FFmpeg 的無損格式 FFV1 來保存因磁帶老化而逐漸流失的人類影像遺產 [4:00:51, 4:02:56]。JB 的新創計畫 Kyber 則致力於極低延遲技術,目標是達成 4 毫秒的「玻璃到玻璃」(Glass-to-glass)延遲,以支援遠端操作機器人、無人機或遠端醫療 [3:27:25, 3:34:38, 3:35:19]。他強調,當延遲降到極低時,距離將會消失,這對於訓練機器人或即時監控具有重要意義 [3:31:57, 3:32:16]。
談到安全性,JB 透露曾兩次拒絕情報機構(如 CIA)在 VLC 中植入後門的要求,並表示若必須妥協軟體安全性,他寧可關閉專案 [01:48, 3:53:09]。VLC 的編譯過程極為嚴謹,甚至在不連網的環境下從編譯編譯器開始做起,以防止供應鏈攻擊 [3:53:28, 3:54:03]。面對過去的威脅,包括曾因終止支援 PowerPC 架構而收到匿名威脅信,JB 表示這磨練了他的意志,只要確認自己是在做對的事且沒有傷害他人,他便能平靜地面對壓力 [3:44:36, 3:58:14, 3:58:48]。
未來的多媒體發展將不再侷限於影音。JB 預測,FFmpeg 的架構將擴展到處理人類的各類感官流,包括觸覺、嗅覺,甚至是腦波資訊 [4:08:28, 4:08:57]。例如 VLC 已有支援 4D 電院與觸覺反饋的插件,這些被數位化且具備時間標記的資訊,都將納入廣義的多媒體範疇 [4:09:09, 4:11:32]。最終,正如 Linus Torvalds 所言,優秀的程式設計師寫程式並非為了金錢,而是因為這充滿樂趣 [4:17:57]。這場對談向這群在暗處默默支撐現代文明、追求工程卓越與慷慨分享的志工工程師致上了敬意 [03:31, 04:57, 05:11]。