宅中地 - 每日更新
宅中地 - 每日更新

贊助商廣告

X

FFmpeg維護者JB Kempf:20人團隊撐起全球網際網路影片骨架,240000行匯編全靠手寫,拒絕數千萬美元

2026年05月08日 首頁 » 熱門科技

這期是技術加情懷了。極少數人基於熱情和對卓越的執念,構建了數十億人每天依賴但普通人從不知曉的基礎設施。

Lex Fridman播客第496期,2026年5月7日發布。嘉賓Jean-Baptiste Kempf(以下簡稱JB)是VLC媒體播放器的核心開發者、VideoLAN基金會主席;Kieran Kunhya是FFmpeg長期貢獻者、編解碼器工程師、Open Broadcast Systems創始人,同時運營著Twitter/X上那個以辛辣風格聞名的FFmpeg官方賬號。這是一期近四小時的長對話,Lex全程戴著VLC標誌性的橙色交通錐帽。

FFmpeg維護者JBKempf20人團隊撐起全球網際網路影片骨架240000行匯編全靠手寫拒絕數千

FFmpeg估計承載了全球超過90%的影片處理流程,從YouTube到Netflix到Chrome到你手機上的任何影片應用,底層大概率跑的是FFmpeg的代碼。VLC的累計下載量超過65億次。兩個項目的核心維護團隊加起來不到20人,全部是志願者。

FFmpeg維護者JBKempf20人團隊撐起全球網際網路影片骨架240000行匯編全靠手寫拒絕數千

JB目前同時在創辦Kyber,一家專注超低延遲實時控制的開源SDK公司,面向機器人遙操作、無人機和雲遊戲;Kieran的Open Broadcast Systems則為BBC World Service等廣播機構提供專業級編碼解碼設備,2026年4月剛在NAB展上發布了新的合作夥伴關係。這期播客比較值得看的地方在於,它把影片技術的全棧細節、開源社區的治理哲學和工程師的個人選擇等不同方向的東西,在一期節目中呈現了出來,而且講得相當透徹。

1. 按下播放鍵之後發生了什麼

每天有數十億人按下播放鍵看影片,沒有人想過背後發生了什麼。JB和Kieran在播客里花了不少時間一層一層拆解這個過程。

第一步是從一個地址獲取字節流,可能是HTTP鏈接、本地文件路徑或者DVD路徑。第二步叫解復用,簡單說就是把一個影片文件拆開,因為一個影片文件里其實打包了好幾條獨立的數據流,影片畫面是一條,聲音是一條,字幕可能又是一條,解復用就是把它們各自分離出來。常見的打包格式包括MP4、MKV、AVI這些。第三步是探測每一幀用的是哪種編解碼器,判斷能不能交給GPU做硬體加速解碼。Kieran提到一個大多數人不知道的數字:大約45%的文件沒法用GPU解碼,必須回退到純軟體解碼。

軟體解碼的流程大致是這樣的:先做熵解碼,把數學壓縮層去掉。所謂熵解碼,就是影片在壓縮時會用一些數學編碼方式(比如霍夫曼編碼)把數據變得更短,解碼時要先把這一層還原回來。然後做幀內預測,也就是利用同一幀畫面里已經解碼出來的相鄰像素來推算當前像素。推算肯定有誤差,這個誤差叫殘差信號,它被存在頻率域裡,所謂頻率域就是把圖像從"一個個像素點"變換成"一組組頻率分量"的數學表示方式,這樣處理起來效率更高。解碼器需要把殘差從頻率域變換回正常的像素域,再疊加到預測結果上,才能得到最終的圖像。最後把原始圖像數據交給顯卡顯示,音頻數據交給聲卡播放。

Kieran在這段講完後說了一句話:"我們剛才每說的一句話,都是某個人一輩子的工作量。每句話背後都有成千上萬的人在研究,有專門的書在講。"

2. 影片壓縮是為人眼做的減法

影片壓縮和ZIP完全不同。ZIP是無損的,數據進去、原樣出來。影片壓縮是有損的,壓縮率通常在100到1000倍之間。說白了就是在扔資訊,問題是怎麼扔才能讓人看不出來。

JB解釋了一個核心設計決策:影片處理不在大家熟悉的RGB色彩空間上工作,而是轉換到一個叫YUV的空間,把亮度和色彩分開儲存。原因是人眼裡的視錐細胞和視杆細胞分工不同,人對亮度變化遠比對色彩變化敏感。一個常見的壓縮技巧就是直接降低色彩通道的解析度,光這一步就能把數據量減半,但大多數人完全看不出來。

在這之上還有一系列數學操作:把圖像切成小塊,把每個小塊從像素表示變換到頻率表示(類似傅里葉變換的思路),然後對不重要的頻率分量做量化,也就是降低精度甚至直接丟掉。每一代編解碼器都在這些環節上做更精細的搜索和優化,所以每代編解碼器在同等畫質下大約能再省30%頻寬,但編碼需要的算力增長一到兩個數量級。

影片流由三種幀組成。I幀是完整幀,相當於一張獨立的JPEG圖片,打開就能看。P幀是預測幀,它不存完整畫面,只記錄和前一幀的差異,所以必須先有I幀才能解碼P幀。B幀是雙向預測幀,它可以同時依賴過去和未來的幀。這就意味著一件反直覺的事情:編碼器發出幀的順序和觀眾看到的播放順序不一樣,解碼器必須先等到後面的參考幀到了才能回頭解碼B幀。JB說他剛入行時B幀的邏輯讓他最為震撼。還有一種叫intra refresh的技術,整個影片流只在開頭髮一個I幀,之後永遠不再發完整幀,而是漸進式地刷新畫面不同區域。這種做法對超低延遲傳輸特別有用,JB創辦的Kyber就用了這個技術。

從2000年代開始,主流編解碼器還有一項嚴格要求叫bit exactness,意思是:不管誰寫的解碼器實現,對同一個壓縮文件必須輸出完全一模一樣的結果,一個比特都不能差。Kieran說1990年代的MPEG-2沒有這個要求,這在業內被認為是影片行業犯過的最大錯誤之一。

3. 容器、編解碼器和行業自己製造的命名混亂

MP4是容器格式,H.264是編解碼器。容器是一個打包用的殼,裡面可以放不同編碼方式的影片和音頻。但連行業自己都在製造混亂。H.264的正式名稱是MPEG-4 Part 10,因為MPEG-4本身是一個包含好幾種編解碼器的元規範。JB說行業里同時有ISO和ITU兩個標準組織共同制定規範,一個是私營機構,一個屬於聯合國,所以同一個東西有兩個名字:H.264也叫AVC,H.265也叫HEVC,H.266也叫VVC。這種命名上的混亂,很大程度上就是行業自身的歷史包袱造成的。

VLC和FFmpeg在解析文件時會直接忽略文件擴展名。 它們會深入分析文件實際內容來判斷格式,因為現實世界裡太多文件的擴展名和實際內容對不上。JB說這恰恰是VLC比其他播放器強的地方:大多數播放器試了一種格式不對就直接報錯退出,VLC會繼續嘗試其他可能性。

這種容錯能力來自VLC的基因。VLC最初是法國一個大學校園網影片流項目的客戶端,走的是UDP協議。UDP傳輸不保證數據完整到達,丟包是常態,所以從第一天起VLC就被設計成不信任輸入數據。這個思路從一開始就貫穿了整個架構,後來變成了一種文化。當年盜版內容下載到一半時AVI格式的元數據還沒下完,其他播放器直接崩潰,VLC會嘗試解析殘缺文件繼續播放。這讓它迅速在用戶中建立了"什麼都能打開"的口碑。

4. 從法國大學生打遊戲到65億次下載

VLC的故事要從1990年代法國一群想打電子遊戲的大學生說起。

法國頂尖工程學院Ecole Centrale Paris有一個特殊的地方:校園由校友非營利組織管理,一切由學生自治,從電台到超市到宿舍分配全是學生自己搞。1990年代中期Doom和Duke Nukem流行,學生們想要更快的網路。大學說校園不歸我們管,你們自己解決。他們找到法國Bouygues集團的CIO,對方建議用衛星天線接收電視信號,把解碼後的影片數據直接在校園的ATM高速網路上做組播,也就是一路信號同時發給所有終端。這個叫Network 2000的項目demo只有40秒,45秒後就崩潰。但demo是40秒,所以沒問題。

一年後兩個學生想到,也許其他人也想在局域網上看影片,於是創建了VideoLAN項目。客戶端部分後來成了VLC。項目在2001年開源,但過程並不順利,大學想把學生寫的MPEG-2解碼器當智慧財產權賣掉,學生們花了三年才說服學校同意開源。

JB在2003年進入這所大學時加入了項目,後來創建了VideoLAN非營利組織,把項目從大學獨立出來。2005年項目幾乎死掉,只剩兩個活躍開發者。 JB硬是堅持做了下去,從幾十萬用戶做到幾百萬,再到今天全球數十億台設備。

但JB反覆強調他不是VLC的"創造者"。他說VLC是從VideoLAN項目里一步步長出來的,不是誰從頭設計的。

5. 拒絕數千萬美元,堅持不在VLC里放廣告

2000年代的軟體生態和今天完全不同。下載一個免費軟體被偷偷安裝工具欄、被修改默認瀏覽器、被植入惡意軟體是家常便飯。來找JB的全是這類灰色公司,開價從幾千美元到數千萬美元不等。

JB說如果Netflix當年來談在VLC里集成Netflix播放入口,故事可能不一樣。但來的都是灰色廣告公司。他拒絕的理由乾脆:這樣做不道德,他晚上睡不著覺。如果接受了,三年後項目就會死掉,有人會分叉代碼重新開始,而他會背叛所有其他貢獻者的勞動。

最後一次報價的金額他用了"obscene"這個詞來形容,意思是大到不體面的程度。對方甚至用了心理戰術:"想想你拿了這筆錢可以建設新的開源項目。" JB說不行,這不對。

Reddit上有一個經典的meme帖子,把JB畫成一個巫師形象,配文說他拒絕了數千萬美元讓VLC保持免費。JB本人在帖子下回復了一句"good morning",拿到了兩萬四千個贊。

VLC完全離線運行,不和任何伺服器通信,沒有遙測功能,不收集任何用戶行為數據。JB說他們根本不知道用戶在用VLC做什麼。曾經有駐阿富汗的美軍反映VLC的RTSP流媒體播放功能出了問題,影響軍營士氣,因為士兵們晚上靠看電影打發時間。JB給他們單獨出了一個修復版本。

6. 許可證是開源社區唯一的社會契約

JB用了一個巧克力蛋糕的類比來解釋開源:普通軟體是你去麵包店買蛋糕,只給你成品。開源是給你蛋糕、給你配方、教你怎麼造烤箱,還允許你修改配方轉賣給別人。

開源許可證分兩大類。寬鬆型如MIT和BSD,基本就是拿去用,想怎麼改怎麼改。另一類叫Copyleft,也就是"著佐權",代表性的有GPL和LGPL,核心要求是你如果修改了代碼再發布,必須也用同樣的許可證開放出來,等於強制回饋社區。FFmpeg和VLC主要用GPL/LGPL。JB強調許可證是社區唯一的共識:"社區在其他事情上幾乎什麼都達不成一致,唯一達成共識的就是許可證。"

JB曾經把VLC核心引擎libVLC從GPL改成了限制更少的LGPL,目的是讓第三方應用可以集成VLC引擎,比如遊戲裡播放影片時不用把整個遊戲代碼都開源。為此他必須聯繫超過350位歷史貢獻者獲得同意。有些人只留了一個郵箱地址,他不得不通過各種方式追蹤,甚至親自跑到工作單位去找人。

其中一位貢獻者已經去世,寫代碼的是他的兒子。JB不得不向一個工廠工人父親解釋開源許可證的含義,請他簽署授權變更文件。"我們在談論的是人的生命。"JB說他當時幾乎流淚了。那個父親對開源一無所知,也不理解兒子寫的那幾行代碼為什麼重要,但他簽了。

7. "你的代碼好不好?也許你是一條狗,我不在乎。"

"你的代碼好不好?這是我們唯一關心的。我們不在乎你是誰。也許你是一條狗,我不在乎。" JB這段話概括了FFmpeg和VLC社區的核心文化。有人提交補丁被拒絕後說自己是某大公司的工程師,回答是:我們不在乎。

VLC核心團隊5到8人,FFmpeg核心團隊10到15人。歷史上大約有2000到3000人給FFmpeg貢獻過代碼,但留下來的只有1%。這意味著核心團隊最終要維護所有人寫的代碼,所以標準必須極高。JB說:"你的代碼可能是好的,但我們需要卓越。因為我們只有幾個人維護對整個世界至關重要的東西。"

Lex問到Linus Torvalds以嚴厲著稱的代碼審查風格。JB說Linus的語氣在開源社區中也算特殊,但有背景:他罵的通常是已經認識多年的子系統維護者,不是隨便對陌生人發火。而且很多開源社區的溝通聽上去比較沖,原因更簡單:大多數貢獻者的母語不是英語。一個芬蘭人或法國人用英文寫的郵件,可能聽起來比他本意粗魯得多。

志願者下了一天班回到家,可能很累,可能有情緒,但仍然在關心這些開源項目。他們不一定有精力手把手解釋每一個細節。Kieran說這需要被理解:"FFmpeg幾乎完全由志願者開發,這句話不是客套,是字面意義上的事實。"

8. 逆向工程編解碼器:在二進制荒原上做考古

FFmpeg社區里最厲害的兩類人是寫匯編的和做逆向工程的。

逆向工程一個專有編解碼器的流程大致是這樣的:先在影片會議軟體或遊戲的安裝包中找到負責解壓縮的那個模組,用反匯編工具打開它(反匯編就是把機器碼翻譯回匯編指令,讓人能勉強讀懂),找到能接入的位置,讓這個模組單獨運行來解碼樣本文件,把它輸出的原始圖像數據導出來作為對比基準。然後在反匯編結果中憑直覺和經驗去找,DCT變換在哪裡(DCT是一種把圖像從像素形式變換到頻率形式的標準數學操作),熵編碼在哪裡,幀內預測在哪裡。很長一段時間你什麼都看不到,因為整條鏈路全對了才能輸出圖像。你可能在錯誤的方向上花了幾周才發現搞錯了。

一般來說,逆向一個1MB的二進制文件大約需要一個月。FFmpeg社區有一位傳奇人物叫Costa,烏克蘭人,住在德國,他逆向工程的二進制文件達到20到30MB級別。JB為GoToMeeting編解碼器的支持懸賞後,Costa在兩個月內就搞定了。他事後說得輕描淡寫:"我看了這段代碼,這裡像是我在WMV里見過的DCT。"他寫的代碼里還藏了不少和JB開玩笑的彩蛋。

Kieran自己也做過逆向工程。他在逆向Cineform編解碼器時碰巧找到一個大量使用平坦色塊的動畫樣本,這讓他能跳過複雜的編碼工具先跑通基礎流程,再一點一點往上加。

這類工作放長遠看是有實際意義的。今天GoToMeeting已經沒什麼人知道了,但那些會議錄像文件還在。如果只有一個Windows 32位的專有解碼器能打開它們,那些錄像在Android、iPad或RISC-V架構上就永遠丟了。

9. x264和"人眼優先"的編碼革命

x264是H.264影片標準的開源編碼器實現,是VideoLAN旗下的項目。簡單說,編解碼器標準規定了影片數據的格式和規則,編碼器是把原始影片按這套規則壓縮的具體軟體。x264的統治力可以這樣概括:你在電腦或伺服器上生成過的H.264編碼MP4文件,大概率就是x264編的。

x264之前,影片編碼行業20年來一直用一個叫PSNR的數學指標來衡量編碼質量。PSNR的計算方式是把原始圖像和壓縮後的圖像逐像素對比,算均方誤差再取對數。數字越高代表數學上越接近原圖。問題在於,要把PSNR分數刷高,最有效的策略是給畫面所有地方均勻加一點微小誤差,結果就是畫面整體變糊,細節全丟了,但數學分數漂亮。

x264的核心開發者Lauren Merritt做了一件當時算是離經叛道的事:引入了psycho-visual rate distortion,翻譯過來就是"視覺心理學導向的率失真優化",用人眼感知模型來指導編碼器的決策,而不是盲目追求數學指標。同時引入自適應量化,意思是編碼器會根據畫面內容動態調整比特分配,把更多比特給視覺上重要的區域,從草地和樹葉等高頻紋理上節省比特。Lauren堅持一個原則:"我不想在三萬美元的專業顯示器上測試,我要在普通人的筆記本上看起來好。"

推動這件事的最早動力來自社區中的動漫愛好者。在Crunchyroll這類正版平台出現之前,很多動漫內容沒有商業渠道,愛好者們自己從日本DVD上提取、編碼、製作字幕。動漫畫面有大量平滑漸變和特殊紋理,傳統編碼器處理不好這些東西,會出現嚴重的色帶效應。x264針對這些問題做了專門優化。

瑞典電視台製作的Park Joy測試序列後來成了編碼器能力的終極試金石,裡面有水面反光、樹葉搖動、人物運動等高難度內容。用傳統PSNR指標得分高的編碼器在這個序列上畫面慘不忍睹。Warner Brothers的工程師Chris Henderson冒著職業風險在公司內部推動用這個免費開源編碼器製作藍光碟片,結果畫質遠超商業方案。JB的一個朋友就是負責製作經典電影Cinema Paradiso藍光版的工程師,用的就是x264。

10. 240000行手寫匯編:一門正在消亡的極致優化藝術

dav1d是VideoLAN旗下的AV1解碼器項目。AV1由Alliance for Open Media制定,成員包括Google、Netflix、Amazon、Apple、Mozilla和VideoLAN,是一種免專利費的影片編解碼標準。當AV1發布時很多人說這種格式太複雜,必須靠硬體解碼才行。JB和團隊用極端的軟體優化證明了相反的結論:用一到兩個CPU核心就能流暢解碼720p的AV1影片。

FFmpeg為所有編解碼器寫的匯編代碼總量大約10萬行。dav1d一個項目就有24萬行手寫匯編。代碼組成比例:79.9%匯編,19.6% C,0.5%其他。

FFmpeg中使用的匯編有一個特定風格叫SIMD,全稱"單指令多數據"。普通的計算是一條指令處理一個數據,比如給一個數加5。SIMD可以一條指令同時對16個甚至更多不同的數做加法。影片本質上是一個像素網格,天然適合這種並行處理。FFmpeg的做法是不用任何抽象層,直接用裸匯編指令操控CPU的寄存器(寄存器是CPU內部最快的儲存單元,比內存快幾個數量級)。Kieran展示過一個函數,手寫匯編比C語言實現快62倍。

Kieran每次在Twitter上發布這類對比數據都會引來一波爭論。反對者說現代編譯器的自動向量化已經夠好了,手寫匯編沒必要。Andrej Karpathy看到這些推文後專門去學了匯編。Kieran說差距根本不是5%或10%的問題,是好幾倍。編譯器自動生成的代碼和人手寫的匯編之間,目前還是兩個量級。

dav1d的優化還走得更遠:它在內部創建了自己的函數調用約定。正常情況下,一個函數調用另一個函數時,作業系統規定了一套標準流程來保存和傳遞數據,叫做調用約定。dav1d因為知道自己是在庫內部調用,就跳過了標準流程,省掉了往CPU緩存里存取寄存器數據的開銷(CPU緩存分L1和L2兩級,越靠近核心越快,但每次讀寫都要花時間)。而且這種優化在每一個晶片架構上都要重做一遍:Intel/AMD的x86架構有AVX-512和AVX指令集,ARM架構有Neon和SVE指令集,還有RISC-V架構,全部手寫。程序運行時先檢測當前CPU支持哪些指令集,然後自動切到對應的最優代碼路徑。

JB提到兩個在匯編領域登峰造極的人。Henrik Gramner對Intel x86匯編的理解深到什麼程度呢,Intel自己的工程師被問到某些指令的細節時會說"你們有Henrik,他比我們更清楚"。Martin Storsjö專攻ARM架構,據說他會在操場上看孩子玩耍時掏出手機,用虛擬鍵盤直接寫匯編代碼。

Kieran開發了一套asm-lessons教學,從FFmpeg實際場景出發教匯編,前置知識只需要高中數學和C語言的指針概念。Daniel Kang在高中時就為FFmpeg寫了大量匯編代碼,Ruka Peng在16歲時提交了首批FFmpeg貢獻,直接修復了安全問題。Kieran說大語言模型目前還寫不好這類匯編,試過讓它改代碼並保證結果完全一致,它做不到,還會反覆犯同樣的錯誤。根本原因是訓練數據里這類代碼太少。

11. Rust的理想主義和匯編的現實主義

JB和Kieran對Rust的看法有分歧但結論一致。JB在自己創辦的Kyber里大量使用Rust,承認它在內存安全方面確實優於C++,從零開始寫新項目時表現出色。Kieran的說法更直白,他說Rust有一種"世界語氛圍",理想主義先行,但到了實際落地的時候差一口氣。

兩人的共識是:用Rust重寫現有項目,幾乎永遠是個錯誤決策。JB引用了一條編程界的老規律——讀代碼比寫代碼難一個數量級。 你拿到別人的代碼讀不懂,第一反應是"我重寫一遍"。重寫前80%很快,到90%費點勁,最後那10%的邊緣情況能花掉99%的時間。

更要命的一個矛盾是:即使把dav1d或x264的C代碼全部用Rust重寫來增強安全性,一旦進入手寫匯編部分,匯編指令可以跳轉到內存中的任意地址,Rust的整個內存安全模型就被擊穿了。JB提出的替代方案是做"安全匯編",在編譯階段檢查匯編代碼的內存跳轉行為,把安全檢查放在匯編層面解決,而不是換掉上層語言。

12. FFmpeg和libav的分裂與合併

2011年FFmpeg社區因為項目治理和領導風格的分歧發生了分裂,一部分開發者另立了一個叫libav的項目。JB說這種分叉在開源世界裡是正常現象,GCC編譯器也經歷過類似的EGCS分裂,最後合併回來反而讓GCC變得更好。

因為開源許可證的存在,分叉後雙方的代碼可以互相吸收。幾年後libav的大部分開發成果被合併回了FFmpeg,FFmpeg獲得了一個功能超集。主要的Linux發行版和開發者逐步回歸FFmpeg。JB認為這次分裂最終是有益的,它迫使社區解決了之前懸而未決的代碼審查流程和治理規則問題。

13. FATE測試體系和極端的向後兼容

FFmpeg有一套叫FATE的自動化測試環境,全稱FFmpeg Automated Testing Environment。這套系統要確保FFmpeg在各種作業系統、編譯器和晶片架構的組合下都能正確工作。測試機器全部由志願者提供和維護,覆蓋的組合數量非常誇張:不同版本的macOS、iOS、tvOS、Windows、Linux,用GCC、Clang、Visual Studio、Intel編譯器分別編譯,在x86、ARM、PowerPC、RISC-V等架構上分別測試。每次代碼提交後系統自動跑全部測試用例,涵蓋所有編解碼器、所有濾鏡變換。

VLC在向後兼容上也做到了極端的程度。當前版本還能在Windows XP上運行,也能在最新的Windows 11上運行。macOS從10.7到最新版全部支持。iOS從iOS 9一直到iOS 26。最誇張的是VLC還支持OS/2作業系統,JB說全世界可能就10個人還在用OS/2,其中有一個在維護VLC的OS/2版本。為了在iOS 9上編譯,他們需要把不同版本的蘋果Xcode開發工具和SDK拼成一個弗蘭肯斯坦式的混合版本,因為蘋果早就不支持iOS 9了。JB說有人給他發消息說"謝謝你,我還在用iPad 2看電影,VLC在iOS 9上還能跑",這種反饋是他們堅持向後兼容的理由。這也意味著不用強迫用戶買新設備,只要軟體優化到位,舊硬體照樣能用。

14. 大公司與開源社區的權力不對稱

6000億美元市值的公司在一個全由志願者維護的公共bug追蹤器上標註"高優先級",這件事確實發生了。

Google用AI掃描FFmpeg代碼發現安全漏洞,按行業標準90天期限通知修復,但沒有考慮到志願者驅動開發的節奏。其中一個漏洞出現在1990年代一款遊戲的冷門編解碼器上,被標記為高危。AI生成的報告又長又囉嗦,對志願者來說是額外的工作負擔。更讓社區不滿的是,Google在漏洞修復之前就跑去媒體上宣傳自家AI的安全分析能力。

Kieran打了一個比方:這就像有人用專業工具去撬你家門鎖,然後告訴你"你的鎖不安全,你得自己想辦法",但他們完全有資源幫你換鎖。

微軟Teams團隊的一位經理在FFmpeg的公共bug追蹤器上直接寫"這對Microsoft Teams來說是高優先級"。FFmpeg禮貌地提出簽支持合同,微軟回覆說可以一次性付幾千美元。Kieran說這些公司根本沒搞清楚狀況,把開源項目當成了簽過服務級別協議的付費供應商。

JB說VLC可能是Windows上使用量排名前十的軟體,但他不在微軟的獨立軟體供應商合作計劃里,沒有任何對口聯繫人,而Adobe和Spotify都有。有時候在社交媒體上公開施壓是小團隊能動用的唯一有效武器。VLC在Android Play Store上有一個bug導致超過一年無法更新,近1億用戶受影響,唯一讓Google有人回應的辦法是發了一條措辭激烈的推文說要停止分發Android版VLC。

這些爭論最終產生了正面結果。Google開始提交修復補丁,也開始為修復安全問題提供獎勵。FFmpeg的捐款有了實質性增長。Kieran說這些推文達到了目的:讓更多人認識到FFmpeg的重要性,認識到這些項目背後是真實的、有限的、會疲倦的人。

15. 開源維護者的精神負擔

那張著名的meme圖說的就是這個事情:現代數字基礎設施畫成一個巨大的積木塔,最底下有一個特別小的方塊,上面寫著"一個內布拉斯加州隨機維護的開源項目",整座塔就靠它撐著。

XZ事件是近年來最典型的案例:一個人獨自維護一個被無數系統依賴的壓縮庫,被兩個攻擊者用持續的深夜問題轟炸逼到崩潰,最後把代碼提交權限交給了攻擊者。curl的維護者Daniel Stenberg把AI生成的低質量bug報告稱為"AI slop",認為這正在加速維護者的倦怠。

JB收到過死亡威脅。2009或2010年,當他決定不再為VLC維護PowerPC埠時,有人寄來一封信,裡面裝著白色粉末,信上寫著他應該去死。他母親嚇壞了,報了警。粉末當然不是炭疽,但對當時20多歲的JB來說是很大的打擊。他現在說那次經歷反而鍛煉了他,讓他後來能承受各種壓力。

Lex問他怎麼保持心理平衡。JB說他有一個思維習慣:碰到什麼事情都先想最壞的結果。"最終我會死嗎?不會。那就沒關係。" 公司破產?公司有生有死,正常的。律師來信?VideoLAN的法律費用一年不到一萬美元。他還說了一句挺有意思的話:後悔是對大腦的一種稅,犯了錯就學習,但不要後悔,除非你有時光機。

16. 人們為什麼免費做這些事

JB總結了三層驅動力。

第一層是興趣。很多人因為愛看動漫進入社區,JB自己因為愛看電影。當有人問他應該參與什麼開源項目時,他的回答永遠一樣:做你喜歡的事情。

第二層是成長。在JB看來,FFmpeg社區是世界上最好的編程學校。你的代碼會被最資深的程序員逐行審查,你得理解CPU架構、內存層級、IO機制這些底層的東西。Zig編程語言的創始人Andrew Kelly就是從FFmpeg社區出來的。而且在FFmpeg里寫代碼有一個硬約束:你必須在16毫秒內顯示一幀畫面,沒有遊戲引擎那種"跳一幀等一等"的餘地,錯過一幀會連帶破壞後續所有幀的解碼。

第三層是成就感。JB舉了個例子:你在諮詢公司寫發票下載門戶,你沒法跟奶奶解釋這有什麼意義。但你說"我讓你的筆記本能播放影片",她聽得懂。你寫的代碼在幾億人的設備上運行,這種成就感是實打實的。Tim Sweeney(Epic Games創始人)在Twitter上評價JB時說過一句話:"世界上很多事情之所以發生,是因為有一個了不起的人決定去做它。VLC就是這種情況。"

John Collinson說過的一句話也被JB在播客中引用:"世界是激情項目的博物館。"在軟體世界裡,這種激情項目可以通過網路效應放大到遠超個體之和的規模。你不需要建築許可證,不需要找場地,你只需要一台電腦,加上對一個問題較真的勁兒。

17. 專利戰場和免費編解碼器的崛起

多媒體領域是僅次於移動通信的專利密集區。H.264時代的專利授權由MPEG LA統一管理,費用還可以接受。但到了HEVC這一代,各方為了把自己的專利塞進標準規範,把很多實際用途極低的技術也寫進去了。結果授權方從一家變成了MPEG LA加HEVC Advance再加若干獨立持有者,費用可能達到每年數億美元。JB提到HP在幾個月前決定從Windows筆記本中去掉HEVC支持,原因就是專利費不斷漲。

對YouTube和Netflix來說,每年可能要付數億美元的專利授權費。Google、Meta、Netflix做了一個簡單的計算:與其付這個錢,不如自己造一個免費編解碼器。這就是Alliance for Open Media和AV1誕生的直接原因。AV1和正在制定中的AV2標準在制定過程中就做專利排查,而MPEG體系中專利問題被明確排除在標準討論之外,屬於"我們不管,你們自己去談許可"。

VLC設在法國,JB說法國不承認軟體專利。他算過,如果要為VLC支付所有涉及的專利許可費,每個用戶得付超過200歐元。

AV2比AV1再省約30%頻寬。JB在2026年CES上做了VLC運行AV2的首個公開演示。下一代dav1d解碼器叫dav2d,名字是一個遞歸縮寫,也就是名字包含自身:dav1d is an AV1 decoder。"d"在法語裡是"2"的發音。

18. Kyber:讓距離消失的超低延遲傳輸

JB創辦的Kyber追求4毫秒的端到端影片延遲,相當於240Hz刷新率。目標應用場景是需要實時反饋的所有東西:機器人遙操作、無人機控制、遠程手術、雲遊戲。

Kyber只用一條QUIC連接完成所有通信。QUIC是一種比較新的傳輸協議,基於UDP,在設計上就是為了低延遲。在同一條連接上同時傳輸影片、音頻和控制信號,並且維持多路流之間的時鐘同步。時鐘同步這件事特別重要:一個機器人可能有五個攝影機加一堆傳感器,如果各路數據流的時鐘有漂移,你拿這些數據去訓練AI模型,每次重訓結果都不一樣。

目前Kyber在Windows到Windows之間達到了7毫秒端到端延遲,其中Nvidia硬體編碼器就占了3.5毫秒,Intel解碼器占2毫秒。JB在CES展示了一輛全3D列印的漫遊車,從法國遠程控制。他們還在做3D列印的固定翼無人機和帆船。

Kyber是開源的,採用AGPL加商業雙許可模式。小團隊和愛好者可以免費使用,但必須開源自己的產品。大公司想閉源使用就要付商業許可費。JB說他看到的未來是數百萬台機器人和無人機需要被遠程觀測和控制。即使將來汽車做到了全自動駕駛,出了問題時也需要有人接管,而那個人可能在地球另一端。

19. FFmpeg是人類感官數據的羅塞塔石碑

JB給多媒體下了一個比通常理解更寬的定義:"多路時間同步的人類感官數據流。"按這個定義,只要是有時間軸的、面向人類感官的數據,都算多媒體。VLC已經有了VR/XR版本,有實驗性的觸覺反饋haptic插件來支持4D影院的液壓座椅運動數據,有空間音頻模組。未來如果有氣味傳感器和氣味擴散器被標準化,它會進入FFmpeg。如果腦機接口產生了神經數據編解碼標準,FFmpeg也會支持。JB開玩笑說可以做"左鼻子右鼻子立體聲嗅覺"。

Kieran特別提到了檔案保存社區。紐約城市大學的Dave Rice牽頭的這個社區資助開發了一個無損編解碼器叫FFV1,設計目標是在磁帶儲存中即使丟了一個比特也能快速恢復,不會因此丟掉一大段畫面。這個社區把工作流程開源後教給預算有限的國家,在印度教孩子們用FFmpeg命令處理歷史影像。

Kieran說C語言會像拉丁語一樣存在下去:一千年後人們仍然能學習它、使用它。 FFmpeg用C寫成,是最接近數學表達的編程語言之一,本身就是數字時代的羅塞塔石碑。它已經在火星上運行了,NASA的Mars 2020漫遊車用FFmpeg來壓縮照片傳回地球。

Lex在播客結尾引用了Linus Torvalds的話:"大多數優秀的程序員寫程序,既不是因為期望被付錢,也不是因為期望被公眾讚賞,而是因為編程本身是有樂趣的。" 在FFmpeg和VLC的故事裡,這種樂趣,加上一群人對代碼質量近乎偏執的堅持,創造了一個數十億人每天在用卻從來不知道的基礎設施。

核心問答

Q1:FFmpeg和VLC為什麼能存活20多年且沒有真正的競爭對手?FFmpeg形成了一種贏家通吃的效應:每多支持一個編解碼器,整個庫的價值就增加一分,因為用戶只需要一個工具就能處理所有格式。這種網路效應加上完全開源和極致的性能優化,讓個人用戶和萬億美元公司站在了同一個技術棧上。Kieran用了一個對比:瀏覽器領域還有Firefox、Chrome和幾個日本引擎在競爭,但多媒體領域FFmpeg基本上已經贏得了全部。VLC靠"不信任輸入"的設計哲學和拒絕商業妥協建立了用戶信任,在2000年代其他播放器捆綁惡意軟體的環境中脫穎而出。

Q2:為什麼手寫匯編在2026年仍然重要?硬體性能不再像過去那樣自動翻倍,但影片解析度從標清到4K HDR數據量增長了幾十倍,AI推理對算力的需求還在指數增長。dav1d的案例說明,在關鍵路徑上手寫匯編比C快10到62倍,編譯器的自動向量化彌合不了這個差距。全球約30億台設備需要解碼AV1影片,每條指令省下的時鐘周期乘以這個規模,就是巨大的能源和成本節省。JB認為隨著AI推理走向實時化,這種底層優化的思路會越來越重要。

Q3:大公司應該怎樣和開源社區打交道?別把公共bug追蹤器當成企業工單系統。如果你依賴某個開源項目,簽支持合同、僱傭或資助核心維護者、提交修復補丁,這些都是正道,光提交問題報告不算貢獻。Google在FFmpeg安全報告爭議之後開始提交補丁和提供修復獎勵,說明公開討論可以推動改變。但根本問題還在:全球數字基礎設施的關鍵組件由極少數不拿工資的人在維護,這個結構性風險需要整個行業正視。

宅中地 - Facebook 分享 宅中地 - Twitter 分享 宅中地 - Whatsapp 分享 宅中地 - Line 分享
相關內容
Copyright ©2026 | 服務條款 | DMCA | 聯絡我們
宅中地 - 每日更新