FFmpeg维护者JB Kempf:20人团队撑起全球互联网视频骨架,240000行汇编全靠手写,拒绝数千万美元 原创

这期是技术加情怀了。极少数人基于热情和对卓越的执念,构建了数十亿人每天依赖但普通人从不知晓的基础设施。

这期是技术加情怀了。极少数人基于热情和对卓越的执念,构建了数十亿人每天依赖但普通人从不知晓的基础设施。

Lex Fridman播客第496期,2026年5月7日发布。嘉宾Jean-Baptiste Kempf(以下简称JB)是VLC媒体播放器的核心开发者、VideoLAN基金会主席;Kieran Kunhya是FFmpeg长期贡献者、编解码器工程师、Open Broadcast Systems创始人,同时运营着Twitter/X上那个以辛辣风格闻名的FFmpeg官方账号。这是一期近四小时的长对话,Lex全程戴着VLC标志性的橙色交通锥帽。

FFmpeg维护者JB Kempf:20人团队撑起全球互联网视频骨架,240000行汇编全靠手写,拒绝数千万美元

FFmpeg估计承载了全球超过90%的视频处理流程,从YouTube到Netflix到Chrome到你手机上的任何视频应用,底层大概率跑的是FFmpeg的代码。VLC的累计下载量超过65亿次。两个项目的核心维护团队加起来不到20人,全部是志愿者。

FFmpeg维护者JB Kempf:20人团队撑起全球互联网视频骨架,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安全报告争议之后开始提交补丁和提供修复奖励,说明公开讨论可以推动改变。但根本问题还在:全球数字基础设施的关键组件由极少数不拿工资的人在维护,这个结构性风险需要整个行业正视。

来源:至顶AI实验室

0赞

好文章,需要你的鼓励

2026

05/08

19:47

分享

点赞

邮件订阅