每个周期都重要:解码几乎全网视频的志愿者们

原标题Every Cycle Matters: The Volunteers Who Decode Almost All Internet Video

Lex Fridman 与 Jean-Baptiste Kempf、Kieran Kunhya 谈 FFmpeg、VLC、手写汇编,以及 YouTube、Netflix 和火星车背后那群没有报酬的人。

FFFFmpeg嘉宾
频道
Lex Fridman Podcast
发布
2026年5月6日
视频
4:18:22
阅读
36 分钟
原文
英语
在 YouTube 打开
往下滚动阅读时,视频会缩到右下角继续播放。字幕跟随阅读语言。
阅读语言共 2 种语言可读
由 AI 从英语原文翻译。打开“对照原文”可以逐段核对。
摘要

30 秒看懂

FFmpeg 位于 YouTube、Netflix、Chrome、VLC 以及互联网上大部分视频的底层,核心维护者却只有十到十五名志愿者。在与 Lex Fridman 长达四小时的对话中,VideoLAN 主席 Jean-Baptiste Kempf 和编解码器工程师 Kieran Kunhya 从按下播放键讲起,一路讲到 24 万行手写汇编、一封装着面粉的死亡威胁信,以及一款被 CIA 改造过的播放器。他们的论点很务实,并不浪漫:仍有少数人坚持,不让媒体技术栈沦为间谍软件、专利收费站,或是 90 天披露期限下由 AI 批量生成漏洞报告的队列。

  1. 1dav1d 是 VideoLAN 的 AV1 解码器,由约 3 万行 C 代码和 24 万行手写汇编组成,汇编量超过 FFmpeg 全部编解码器汇编的总和。原因是它要在数十亿台设备上运行,而这些设备往往没有硬件解码器。
  2. 2可能有一千人碰过代码仓库,但最终留下来的只有约百分之一。剩下的五到十五位维护者,会在你换了工作之后继续负责你的补丁,所以标准是做到优秀,而不是为履历添彩。
  3. 3为了让 VLC 保持无广告,Kempf 拒绝过数千万美元。送上门的报价包括工具栏、被劫持的搜索引擎和播放器内的广告,从来没有 Netflix 那种合作。他说,自己得能睡得着觉。
  4. 4谷歌的 AI 向 FFmpeg 提交了按 90 天披露期限计算的大量漏洞报告,微软 Teams 又把一个志愿者维护的 bug 跟踪器上的问题标为“高优先级”。真正能推动事情的,只有一条火药味十足的公开帖子。捐款有所增加,但仍不够支付一名全职开发者的薪水。
  5. 5作为工程师和 CTO,Kempf 的经验法则几乎是从不重写:写代码比读代码容易一个数量级;手写汇编可以跳到内存里的任何位置,所以即使用 Rust 替换 C 那一层,也换不来一个安全模型。
  6. 6一个假冒的德国 VLC 网站,搜索排名已经压过官网十二年;安装程序要等三周才开始下载间谍软件。Kempf 的建议很直接:自己手动核对域名,因为搜索引擎靠不住。
全文

按章节阅读完整文稿

01

就算文件是个玩笑,VLC 也会试着播放

Lex Fridman 开场就说,FFmpeg 是 YouTube、Netflix、Chrome、VLC 和 Discord 底下看不见的骨架,而 VLC 是几乎能播放任何格式、没有广告也不追踪用户的播放器。整期节目,他都戴着那顶橙色交通锥帽子。两位嘉宾分别是:VideoLAN 主席、VLC 主要维护者之一 Jean-Baptiste Kempf,以及 Kieran Kunhya。Kunhya 长期为 FFmpeg 贡献代码,是编解码器工程师,也是 X 上那个出名的 @FFmpeg 账号的运营者,还创办了 Open Broadcast Systems。

被问到 VLC 打开过的最古怪的东西,Kempf 列举了 VHS 采集卡、带自定义加密的 DVD-Audio,以及存在于 FFmpeg 里的游戏编解码器。Kunhya 最喜欢的是一段十秒钟的《星球大战》游戏开场,有人只凭一张光盘,就做出了逐位精确的还原。在 VideoLAN 的一次大会上,他们还举办了一场“最糟文件”比赛:一个 MKV,每一帧的分辨率、宽高比和旋转角度都在变;另一个号称“视频”的文件,只有黑帧,上面叠着 SSA 字幕动画。两个文件都能播放。还有一个文件,同时是合法的 ZIP,也是合法的 MP3。

VideoLAN 官网约四分之一的流量,来自搜索“cone player”。Kempf 说,印度和中国偏远地区有很多人不知道 VLC 这个名字,却认得那个交通锥。他们曾在愚人节计划把 logo 换成一个带履带工程机械风格的图案,结果招来约 1 万封愤怒的邮件。他说,电视上如果画一个播放键,那就成了 YouTube 的标志;橙色交通锥醒目又古怪,古怪到能变成梗,而且这个梗能持续二十年。他们还试过把一张煎饼塞进 DVD 光驱,没能播放。这段视频他们留着。

02

按下播放键,是一辈子的功夫压缩在几秒钟里

Fridman 问,按下播放键之后会发生什么。首先,播放器把 URL、路径或光盘转成字节流;然后,解复用器把字节流切分成压缩的视频帧、音频帧和字幕帧。播放器会查看每一帧视频,判断 GPU 能不能解码。Kunhya 估计,大约 45% 的内容 GPU 无法处理,因为编码变体和厂商支持的能力各不相同。硬件解码对用户来说是个黑盒。软件解码则从熵解码开始,也就是霍夫曼编码或算术编码,接着在空间域做帧内预测,残差存放在频域,经过逆变换,再加回去,才得到画面。

Kempf 说,人们往往忘了信号被压缩了多少。PCM 音频压成 MP3,大约是 10 倍;视频要压到 100 倍、200 倍,目标是 1000 倍。这已经不是 ZIP 的思路。ZIP 要做的是逼近无损的极限;视频编解码器则会主动降低质量,只要人眼看着剩下的部分仍然舒服就行。它们把 RGB 转成 YUV,即一个亮度通道加两个色度通道,因为人眼中的视锥和视杆细胞对亮度比对颜色细节更敏感。在任何巧妙的算法之前,色度分辨率减半就能让文件小一半,而大多数观众根本察觉不到。

现代编解码器在频域中工作,用离散余弦变换把画面切成块,这就是解码出错时画面会出现方块的原因。每一代编解码器在画质相当的前提下,码率大约能降低 30%,代价是 CPU 开销高出一个数量级。Kunhya 的这句提醒,是后面所有故事的注脚:流水线里的每一句话,都是有人花了一辈子做出来的,每一句背后都能写一本书。压缩也是不对称的:编码可以一次性投入巨大的计算量;解码却必须便宜到手机也能跑,还要能容错,让丢了包的 UDP 流能在途中接上。

03

三个字母的扩展名只是提示,从来不是契约

容器,也叫封装格式或复用器,是把多条轨道装在一起的文件格式;编解码器则是其中的编码器和解码器。MP4 是大家最熟悉的名字。Kempf 小时候接触的是微软的 AVI 和苹果的 MOV,后者后来演变成了 MP4。VideoLAN 的 Steve Lhomme 还发起了 Matroska,这是一种更具前瞻性的开放容器。把 MP4 和 H.264 混为一谈,算不上什么大罪。H.264 的正式名称是 MPEG-4 Part 10,也叫 AVC,它属于一个更大的元规范,这个规范里还包括早期的 MPEG-4 视频和 AAC 音频。Kunhya 的实用经验是:99% 的 MP4 文件都是 H.264 加 AAC,其余都是特例。

VLC 和 FFmpeg 仍然不相信文件后缀。“.mp4”只会提高 MP4 解复用器的优先级,程序还是会检查字节内容本身。这个习惯比消费级播放器还要老。VLC 最初是 1990 年代末一个校园流媒体系统的客户端,那个系统就叫 VideoLAN,通过 UDP 传输 MPEG-2,而数据包经常是损坏的。“你不能相信你的输入,”Kempf 说,整个架构都是为损坏的文件而设计的。人们下载到索引在文件末尾、并且不完整的 AVI 时,别的播放器会直接罢工,VLC 则会提示文件已损坏,但仍会尝试播放。

Kunhya 补充说,编解码器的工作,是去掉空间和时间上的冗余,同时留下一条能接入、能恢复的流。Kempf 用镜头摇动来打比方:背景里的云不必每一帧都重新发送;一面黑墙可以写成“与左上角那个像素相同”。理论上,搜索窗口可以无限大;实际上,内存和算力会先把它卡住。比如拿 4K 画面去和两百帧之前的像素比对,可不是随随便便就能做的事。AV1、AV2 和 VVC 与其说是一种编解码器,不如说是一个工具箱:一场 Zoom 通话从 PPT 切到电影片段时,编码器会换用不同的工具。

04

FFmpeg 是一门语言,许可证是社区唯一完全达成一致的东西

FFmpeg 是处理编解码器、复用器、解复用器和滤镜的底层库,它的命令行工具也已自成一门语言。它出现在 VLC、Chrome、智能电视、OBS 以及各类专业设备里。Fridman 引用过一个估计:线上线下超过 90% 的视频工作流都会用到它。VLC 至少被下载了 65 亿次。Kunhya 喜欢的一点是:外婆的家庭录像和一家万亿美元市值的公司,站在同一套技术栈上,有时候靠的是一条 3000 个字符的 FFmpeg 命令。如今,人们会请大语言模型来写这些命令。Kempf 说,图像领域有 ImageMagick,却没有哪个工具的覆盖面能和 FFmpeg 相比;视频领域则阴差阳错地长出了一个命令行版的 After Effects。

Kempf 用巧克力芝士蛋糕来打比方。面包店卖给你的是成品,外婆可能会把配方告诉你。开源则是把蛋糕、配方、烤箱的建造方法都交给你,还告诉你怎样修改、转售配方。软件无非是一长串极小的指令;计算机并不聪明,只是快。自 FFmpeg 诞生以来,大约有两三千人为它贡献过代码。它的许可证好比这个群体的社会契约,带着卢梭式的意味:许可证随时可以收紧,但未经同意不能放宽。这也是为什么云厂商把 MongoDB、Elastic 包装成云服务之后,引发了重新授权之争,而 FFmpeg 没法照搬:贡献者太多,其中有些人已经去世了。

Kempf 把 libVLC 的引擎从 GPL 改成了 LGPL,这样第三方就能内嵌这个播放器,而不必开源整个产品;另外,苹果的 App Store 几乎不允许 GPL 应用上架。iPhone 和 Apple TV 版本用的是 MPL。FFmpeg 采用 LGPL,也是同样的思路:允许发布闭源应用,但对库本身的改动要回馈社区。重新授权意味着,按照美国版权法,要把项目视为共同作品。他联系了 350 多人。其中一条线索通到一家工厂,一位父亲不得不听一个陌生人解释,为什么要征得他的同意,才能使用他已故儿子写下的五行代码。Kunhya 说,这个社区的版图很分散,有人身处叙利亚的战区,电力只能断断续续供应。Kempf 说:“也许你是条狗,我不在乎。我需要看你的代码。”

05

只有百分之一的人留下,所以语气很冲;交通锥不卖

Linus Torvalds 是这种文化里的“民间反派”。Kempf 认为,Git 也许比内核更重要;他还注意到,Torvalds 对那些早就认识他的子系统维护者通常很严厉。Kempf 指出,Azure 的大部分仍在运行 Linux,Android 也是 Linux,因此没有任何东西在质量上能够例外。VLC 的核心只有五个人,FFmpeg 则是十到十五个人。时间线上有一千个名字,最后留下的只有十个,留存率就是 1%。人会换工作、换伴侣、换大洲。“我们就是将来维护你代码的人,”Kempf 说,代码必须做到优秀,而不只是还行。网上的语气自成一种亚文化,但在 VideoLAN 的开发者大会上,同一群人其实很有趣。英语不是任何人的母语,所以美国读者可能会把一个疲惫的欧洲志愿者的简短回复,听成侮辱。

Reddit 上流传着一个段子,说 Kempf 为了让 VLC 不放广告,把价值数千万美元的报价全推掉了。这件事他本人证实过,不止一次。不过,这个项目并不是他一个人的发明。巴黎中央理工学院的学生,被困在一个 1980 年代的 IBM/3Com 令牌环校园网里,网络由他们全权管理,他们想要一个更快的网络来玩《毁灭战士》。一位 Bouygues 的首席信息官提议,在局域网里用一个大型卫星天线,再配上 MPEG-2 来传视频,这就是 Network 2000,一个只演示了 45 秒、还会丢数据的原型。之后,Christophe Massiot 等人把它发展成了 VideoLAN。他们用三年时间逼学校在 2001 年把它开源,并发布了后来叫作 VLC 的客户端。Kempf 在 2003 年加入,把这项工作转进一家非营利组织。到 2005 年,他已是两名仍在活跃开发的人之一,他们拒绝让这个项目死去。

真正找上门的钱,来路并不光明:有的是间谍软件式的浏览器工具栏,有的是被劫持的主页,还有播放器里的广告。“如果当初 Netflix 找上我们,说想把 Netflix 放进 VLC 里,故事可能就不一样了,”他说。可没有人这么做。他并不反对赚钱,自己也创办过好几家公司,他反对的是暗地里来。最后一次报价,他形容为“离谱”,还包装成资助某个未来开源项目的名目。他认为,卖掉 VLC 会在三年之内通过分叉把它杀死,同时也背叛了所有免费干活的人。Kunhya 提醒听众,2000 年代,悄悄装入间谍软件的程序很常见,这些条款都埋在没人去读的许可协议里。

06

AI 生成的漏洞报告,变成了对一个业余项目的拒绝服务攻击

Kunhya 说话很谨慎:谷歌仍是开源最大的支持者之一。变化在于,谷歌开始用 AI 对 FFmpeg 提交安全报告,还在媒体上宣传这个模型有多厉害,并套用了为有薪团队设计的 90 天披露期限。其中一个问题出在一个冷门的 1990 年代游戏编解码器里。他用门锁打了个比方:这把锁本来就不是为了防诺克斯堡那一级的威胁而设计的。用规模化的 AI 去撬锁,撬开之后告诉房主“你的锁不安全”,这种做法只有那些同时拥有工程师、能提交补丁的一方才做得出来。这些报告写得很啰嗦。对冷门编解码器来说,它们几乎等同于一场由 AI 生成的漏洞报告所引发的拒绝服务攻击,而且一律标为高危。另一个并非来自谷歌的“漏洞”,是一个滤镜里的整数溢出,它可能让某个像素的颜色出错,却被标成了红色的 7.5 分。

前 FFmpeg 开发者 Alex Strange 以个人身份发帖,描述了其中的激励落差:研究者能拿到一个可爱的名字、一个 logo 网站、一笔谷歌的赏金、一个 DEF CON 奖项,还能参加某种秘密安全圈的狂欢聚会,人人都打扮得像身处《黑客帝国》里。修复问题的志愿者却什么也拿不到。这场争论之后,谷歌开始直接提交补丁,也为修复设立了奖励。与此同时,微软 Teams 在公开的 bug 跟踪器上留言,说它的问题是高优先级,因为 Teams 有很多用户。有人提出洽谈长期支持合同,对方给出的报价却是一次性的几千美元。Kempf 的诊断是:大公司里的 OSPO(开源项目办公室)从没有向中层经理讲清楚,FFmpeg 不是供应商,它的公开 bug 跟踪器也不是供应商的 Jira。他说:“如果你想让我当你的供应商,我很乐意。把合同发给我就是了。”

这种火药味十足的公开发声确实奏效了。捐款大幅增加,仍然不够支付一名全职开发者,但人们的认识确实提高了。VLC 在 Android 上因为 Play Store 的一个 bug,一年多无法更新,最后让人出面的,是一条推文,威胁说要停止向约 1 亿用户分发 VLC。Windows 应用商店也是同样的做法。Kempf 认为,VLC 大概是 Windows 上使用量前十的程序,但他们没有微软的 ISV(独立软件开发商)对接人,Adobe 和 Spotify 却都有。“不幸的是,我们太小了,唯一真正有力的手段,就是在社交网络上喊话,因为它会像滚雪球一样越闹越大。”Kunhya 把这种互相开火的风格比作说唱对决,或者 WWE 摔跤。与 OpenBSD 的 Theo de Raadt 的一场讨论越了界,Kempf 直接打电话给他,把火压了下去。十六岁的 Ruikai Peng 在 git 里发现了一个 bug,三天修好了,没有申请 CVE 编号,也没有做 logo 网站。Kunhya 说:“孩子们都挺好的。”

07

人们留下,是因为视频很酷,也因为他们乐于逆向二三十 MB 的二进制块

为什么要参与贡献?Kempf 的第一个答案是:多媒体就是播放视频,而视频很酷;社区里有很大一部分人是因为喜欢动漫而加入的。他的长期建议是做自己真正热爱的事。他自己做 VLC,是因为爱看电影,哪怕妻子讨厌他一遍遍地重看。第二个理由是学习:如果你写的 C 和汇编能通过 FFmpeg 的审查,那么即便之后写 TypeScript,你也会是更好的程序员。Andrew Kelley 就是在这所“学校”之后创办了 Zig。你只有 16 毫秒把一帧画面送上屏幕,错过了,画面就会散掉。你还得学计算机体系结构:流水线、SIMD、ALU、I/O,因为同一代 CPU 上相差三个周期,输出就会不同。Kunhya 估计,FFmpeg 在任何时刻都可能运行在 1 亿到 10 亿颗 CPU 上。你可以跟外婆说,你在帮她看电影;但你不能跟她说,你做了一个 PG&E 账单的门户。

他把 FFmpeg 和 VideoLAN 比作双星:VLC 之于 FFmpeg,就像 Android 之于 Linux。Kempf 猜测,超过 80% 的 FFmpeg 编码流水线依赖 x264,那是 VideoLAN 的一个项目,后来成了互联网上事实上的软件 H.264 编码器。VLC 会把各种怪异文件喂给 FFmpeg,历史上还资助过它的开发。一个 Windows 版 VLC 大约有 1600 万行代码:VLC 自身约 100 万行,FFmpeg 约 200 万行,其余来自 libdvdcss、dav1d、checkasm 之类的邻近项目。X 上那个“不过是里面装了 FFmpeg”的梗,忽略了这个循环关系。按 Kunhya 的讲法,FFmpeg 经历过几个时代:Fabrice Bellard 创办了它;Michael Niedermayer 在 2000 年代写出了 DivX、Xvid、Windows Media 和 RealVideo 的原生解码器,让人们不必再依赖带间谍软件的编解码器包;2000 年代末是 H.264 和高清的时代;2010 年代则属于逆向工程师。

Kostya Shishkov 是当时身在德国的乌克兰人,他把二进制文件当作规范来读。一个 1 MB 的二进制块,大约要一个月的工作量,而他处理的是 20 到 30 MB 的。GoToMeeting 是 VLC 呼声最高的功能需求,于是 Kempf 发布了一笔悬赏。Kostya 用了大约两个月交出成果,从 WMV 中识别出了 DCT 的模式,还在源代码里拿 Kempf 的名字开了不少玩笑。这种方法很像考古:找到解码模块,挂上钩子,把 YUV 输出导出来作为逐位精确的参照,然后在反汇编器里寻找熵解码和 DCT,由于有 DRM,常常还得放进虚拟机里做。很长一段时间屏幕上什么都看不到,只能在内存里调试。1990 年代的 MPEG-2 在不同实现之间并不是逐位一致的,Kunhya 引用 Yuriy Reznik 的话,称之为行业的重大失误之一。从 2000 年代起,Lex 的解码器、JB 的解码器和 Kieran 的解码器都必须逐位匹配。与浏览器不同,FFmpeg 几乎占领了整张编解码器版图。

08

FATE 是志愿者机器的数据透视表,dav1d 有 79.9% 是汇编

FATE(FFmpeg 自动化测试环境)是一个由志愿者维护的测试农场,覆盖各种编译器、操作系统和指令集的组合。仅 macOS 就会分化出 iOS 和 tvOS;测试面板里还出现过 RISC-V、PowerPC、DEC Alpha、Visual Studio、英特尔编译器、Apple Clang 和 GCC。Kunhya 在自己的办公室里放着 fate.ffmpeg.org 最上面那几台 Mac。C 代码复杂到连编译器都会编错,而一个比特的错误会沿着预测帧扩散,最终在画面上表现为可见的故障。VLC 依托这个矩阵,仍然能运行在 Windows XP 和 Windows 11 上,支持从 macOS 10.7 到最新版本、从 iOS 9 到当前版本,还有 Linux、BSD、Solaris,甚至 OS/2。OS/2 的用户可能只有十来个人,其中一位还在维护 VLC 的移植版。少数几个人维护的操作系统,比微软、谷歌或苹果支持的还多。最让人头疼的是 iOS:为了让 Arm32 架构的 iPad 2 还能播放电影,他们得拼凑出一套由旧版 Xcode 和 SDK 组成的“弗兰肯斯坦”式组合。Kempf 说,这是一种选择:不去逼用户升级硬件,因为那些升级本来可以通过优化避免。

SIMD(单指令多数据)汇编是一门正在失传的手艺。标量加法是把 5 加到 10 上,得到 15;SIMD 则可以用一条指令,把 5 同时加到 16 个数上,这与像素网格正好契合。FFmpeg 不依赖内建函数(intrinsics),寄存器都是手工分配的。性能提升是 10 倍到 50 倍,而不是 10%。Kunhya 的一个格式转换内核,比 C 版本快 62 倍,原因是 10 位视频在 CPU 上没有原生支持,必须打包处理。在 Open Broadcast Systems,他维护着一张 5×5 或 6×6 的矩阵,里面是各种打包格式互相转换的内核,全部手写,每个都要兼容多代 CPU。大多数公司到 C 就停下了。

dav1d 就是最好的例证。开放媒体联盟(Alliance for Open Media)发布 AV1 时,连成员公司都说这种格式太复杂,软件解码不现实。Kempf、Ronald、Henrik Gramner 和 Martin Storsjö 还是做出了一个解码器:3 万行 C 代码,24 万行手写汇编,口号是“every cycle matters”(每个周期都重要)。FFmpeg 所有编解码器的汇编加起来约有 10 万行,这一个解码器就超过了它的两倍。现在,Netflix 约 30%、YouTube 约 50% 的视频都是 AV1,覆盖约 30 亿台设备,其中很多没有硬件解码器。一两个核心就能解码 720p。Kunhya 在推特上列出了 dav1d 的代码构成:79.9% 是汇编,19.6% 是 C,0.5% 是其他,并配文说,这就是顶级视频编解码器该有的样子。他看着软件圈的人在网上争论了两年,有人坚持自动向量化终会追上。它没有。差距是几倍,而不是 5%。

他们还在榨取机器的每一分性能:用于视频的密码学指令;dav1d 内部使用自定义的调用约定,省得把暂时用不到的寄存器溢出到 L1 和 L2 缓存;运行时在 AVX-512、ARM64、SVE、SME 和 RISC-V 之间自动检测。Loren Merritt 的 x86inc 已经让一份汇编文件能适配四种 x86 ABI;dav1d 走得更远,因为调用都发生在它自己的二进制内部。Kempf 说,他从没听说过别的大众市场项目这样做。高频交易也很在意指令,但那不是跑在十亿台笔记本电脑上的东西。对于用 Python、靠凭感觉编程(vibe coding)的听众来说,可以类比大语言模型的量化:压缩到 FP8、FP4,甚至微软 Phi 做到 1.5 bit。你受内存限制,不可能总能换更大的机器,所以要去剖析那些每天要运行几十亿小时的代码。FFmpeg 命令行上的胶水代码不值 24 万行,值得的是那个热点解码器。Kempf 说,你没法用凭感觉编程做出来的核心东西,是针对硬件的优化。

09

Rust 无法让可以跳到任意位置的解码器变得安全,分叉则是留下的人要付的税

Kunhya 的 asm-lessons 仓库之所以存在,是因为教科书把汇编当作语法来教。他想要的是 FFmpeg 的方法:去解决一个真实的向量问题,门槛只是高中数学和指针。十六岁的学生已经提交过补丁,比如多年前的 Daniel Kang。他把这种工作比作驾驶喷火战斗机:操纵杆用钢索直接连着副翼,中间没有任何东西,你得把机身推到设计者都没想到的极限。语言模型懂的汇编比他预想的要多,却仍然做不到逐位精确,因为缺少像 Stack Overflow 那样的语料。瑞典的 Henrik Gramner 对 Intel SIMD 的延迟了如指掌,以至于 Intel 会让 VideoLAN 直接去问 Henrik。芬兰的 Martin Storsjö 则一边在游乐场看着孩子玩,一边用手机的虚拟键盘写 ARM NEON 代码。

在 Rust 的问题上,两人意见不同。Kunhya 把内存安全当作目标,但讨厌那种自我抬高的劲头,就像世界语,或者 Sinclair 的 C5 电动三轮车那样,当年它本要取代汽车。原型很容易做,最后那 1% 的 coreutils 却要占掉 99% 的时间。只换一个编译器、ABI 不兼容,再加上一个只有 85% 功能的重写,算不上迁移计划。Kempf 曾在 VLC 里加入 Rust 模块,他的新公司 Kyber 也主要用 Rust 来写。他把 Rust 称为拥有所有权概念的更好的 C++,在从零开始的解析和网络场景里表现出色,但与既有代码的互操作性很差。他的职业原则几乎是从不重写。写代码比读代码容易一个数量级,大语言模型也印证了这一点。六个月后,你未必还能看懂自己最聪明的代码;而一个看不到那些未记录取舍的新人,就会想要推倒重来。这种直觉通常是错的。

即便把 dav1d 的 C 部分用 Rust 重写,也会在汇编那一层崩掉,因为手写的 SIMD 可以在内存里跳到任何地方。他认为,真正需要的是编译期可检查的汇编,也就是 checkasm 的思路:在编译时为 SIMD 插桩,并与 C 参考实现逐位比对。没有这一层,24 万行汇编就无法维护。2011 年的 Libav 分叉,从 Ubuntu 的软件包来看像一场内战,实际上关乎治理。Libav 的大部分代码后来都合并了回去,代码审查的文化稳定下来,FFmpeg 也变得更强。比起分叉,Fridman 更担心的是倦怠。Kempf 提到 curl 的 Daniel Stenberg 谈“AI 垃圾内容”,提到 XZ 的维护者因被骚扰,最终把提交权限交给了攻击者,还提到 libxml 和 IANA 的时区数据库,这些都是靠一个人撑着的承重墙。相比之下,FFmpeg 的十到十五个人已经算是一群人了。

2009 或 2010 年前后,VLC 1.0 版本临近发布,团队只有四个人。苹果转向英特尔之后,Kempf 停止发布新的 PowerPC 版本。之后有一封信寄来,里面装着粉末,信上骂他是个垃圾,应该去死,还写着“PowerPC 万岁”。当时炭疽信件事件还在新闻里。粉末是面粉。他母亲吓坏了,他们就报了警。他现在说,几乎庆幸那件事是在那个时候发生的,因为它教会了他承受恨意。Fridman 说,他因为 FFmpeg 笑过几千次,却一直没有地方说声谢谢,直到 X 上有了那个账号。Kempf 仍然会在 Reddit 上回答陌生人的问题。开发者们仍然泡在 IRC 上:没有广告,没有追踪,没有讨论串,没有表情回应,而且它能用。

10

x264 无视神圣的指标,转而相信笔记本屏幕,最终赢得了整个互联网

H.264 仍然主导着互联网视频和蓝光。Kunhya 参与过这一标准的开放编码器,他认为这次飞跃靠的是时机:高清、Core 2、Nehalem,以及对二十年 PSNR 崇拜的一次反叛。最小化均方误差,会让整幅画面到处都有些轻微的模糊,所以那些“分数好”的画面看起来糊乎乎的。爱好者们在编码个人视频时(主要是动画)发展出了基于块能量的心理视觉率失真优化,以及自适应量化:从繁忙的草地上挪走比特,分给人脸。ParkJoy 是一段瑞典电视台拍摄的高清影片,画面是一群人在河边跑步,制作不惜成本。它至今仍是区分编码器的公开测试序列:高 PSNR 模式会把它抹糊,心理视觉模式看起来更好,分数却更低。当时还没有 VMAF。Loren Merritt 拒绝了一台 3 万美元的参考显示器,他要的是在别人的笔记本上也能看起来正确。

Kempf 的“折磨片段”是《行星地球》里的一群鸟,画面里的鸟会变成数百万只;你可以在 YouTube 上看到编码失败的样子。动画中的色带问题,是 Loren 的另一个课题。x264 至今仍是所有 AV1、AV2、VVC 和 HEVC 编码器对比时的基准。华纳兄弟的 Chris Henderson 用它制作了整套《Fringe》蓝光合集,等于拿自己的工作去赌一个免费工具。Kunhya 仍然会为最有电影感的影片买实体碟。这个编码器和 VLC 一样,诞生于巴黎中央理工学院,由 Laurent Aimar 发起,之后由 Loren、Jason、Måns、Henrik、Anton 等人接力,其中大部分人从未见过面。在 Crunchyroll 出现之前,字幕组要翻录日本 DVD、翻译字幕,还得自己找工具;Aegisub 和注音假名(ruby)就是那时的产物,英文或法文字幕会叠在同一帧上。在动画中很常见、在真人影片里却少见的渐变,后来成了编码领域的一门专门课题。

从 MPEG-2 到 DivX、H.264、HEVC/VP9,再到 AV1,逆变换、帧内、运动和熵编码这些核心概念一直没有变。每一代的压缩率大约提升 25% 到 50%;在同样的画质下,AV1 相比 H.264 可以节省 40% 到 60% 的带宽,但编码时的 CPU 开销高出约两个数量级。YouTube 仍然几乎所有内容都用 H.264 编码,热门内容再用 AV1 重新编码。I 帧是完整的画面,类似 JPEG。P 帧会从过去的第 5、7、42 号块中取数据。B 帧可以依赖未来的画面,因此解码顺序和显示顺序并不一致,这一点最先让 Kempf 大吃一惊。FFmpeg 默认的 H.264 GOP 约为 250 帧,相当于好几秒的预测,依然能顺滑播放。Kyber 常用帧内刷新:流的开头只有一个 I 帧,之后的画面滚动刷新,码率就不会突然飙升。YouTube、Netflix 和 Meta 里有成千上万人不写编解码器,他们要为电影、手机拍摄、屏幕录制和剪辑中间素材,寻找各自合适的参数。在 YouTube 被收购之前,谷歌视频(Google Video)甚至通过 ActiveX 在 Internet Explorer 里运行 VLC。如今情况正好反过来:VLC 可以编译成 WebAssembly,在 JavaScript 虚拟机里运行。

11

CIA 发布的是真正的 VLC 加一个额外的 DLL,德国的仿冒站仍排在前面

WikiLeaks 的 Vault 7 披露过一个 CIA 制作的 VLC:它的二进制文件本身是真的,只是多了一个插件,名为 psapi.dll,这个插件会读取“文档”文件夹,加密其中的内容,然后发送出去。这种社会工程学手段很巧妙:你看两个小时电影,根本不用碰电脑;高清片源本来就会让风扇轰鸣;所以一切看起来都很正常。来自中国的攻击团伙对印度用户用过类似的手法,导致 VLC 在印度被禁,并迫使 Kempf 出庭,证明真正的播放器并不是植入的程序。攻击者重用了一个签名正确的 DLL,同时让 vlc.exe 指向一个伪造的 libVLC。他说,对于这种冒充,他们几乎无能为力。一个德国的假冒网站已被举报了十二年。Kempf 说,谷歌知道其中的恶意载荷,但这个二进制文件太大,超出了它的恶意软件分析器的能力。在德国,这个德语的仿冒网站排名高于 videolan.org。安装之后三周内什么都不发生,然后有个服务被唤醒,下载间谍软件和广告软件。搜索帮不了你,你得自己核对域名。

沙箱很难做,因为 VLC 是一个小内核,外加大约 500 个插件,其中包括英特尔、英伟达和 AMD 的 GPU 驱动。着色器或 FFmpeg 里的一次崩溃,不应该让攻击者拿到用户的文件。手机应用本来就是被关在沙箱里运行的;桌面沙箱如果把每项权限都开了口子,那只是做做样子。他们正在把解码、解复用和滤镜拆成独立进程,参照 Chrome 的做法,但不同之处在于,这条管线每秒要传输数百兆比特的数据,而不是一个 10 MB 的网页。用户数量这么大,总有人会用到每一个功能。2010 年,法国南部一位高中数学老师贡献了一个贝塞尔曲线拼图滤镜,好让看长篇法语电影时无聊的配偶可以点击拼图块。五年后,有用户来信说 16×16 太简单了。Kempf 的提交把上限提高到了 256×256。他还补充说,通过 SSH 输出 ASCII 艺术,正是调试组播网络的办法:在一台没有图形界面的路由器上,只看屏幕是黑的还是不黑。

在那些编解码器的浪漫故事之后,自适应流媒体其实主要是 CDN 的拥塞问题:如果一个分片的下载时间超过它时长的一半,就降一档;难的是升回去。观众能容忍画质的起伏,甚至能接受 30 帧的体育直播;但一旦 AAC 退化到频谱带复制,声音变薄,他们马上就能察觉。Kempf 说,直播加上 DRM,再加上各种设备,在运维上很难,但 10 到 20 秒的延迟并不是什么深奥的科学。真正深奥的,是当你拒绝这些秒数的时候,会发生什么。

12

四毫秒的玻璃到玻璃延迟,一块能用千年的罗塞塔石碑,以及毫无遗憾

Kempf 的下一步是 Kyber:从压缩文件,到流媒体,再到无人机、人形机器人、远程车辆和云游戏的交互控制。这时画质已经不是重点;开车的时候,一毫秒也很重要。他指出,Waymo 在自动驾驶失效的那一小部分时间里,仍然需要远程操作员。Kyber 使用一条基于 QUIC/UDP 的连接,默认加密,同时承载音频、视频,以及鼠标、键盘或手柄的输入。因为时钟会漂移,服务器端会重新打时间戳。一台摄像头很容易,五六台就很难了,而机器人学习用的数据集在回放时必须保持一致。前向纠错会多发几个百分点的数据,让丢失的包无需往返重传就能恢复。目标是 4 毫秒的玻璃到玻璃延迟,对应 240 Hz。他们目前在 Windows 到 Windows 或 Windows 到 Mac 之间做到了 7 毫秒,其中约 3.5 毫秒来自英伟达的编码器,约 2 毫秒来自英特尔的解码器。定制的 SDI 硬件可以更低;他希望能在 Jetson Nano 或 N150 这类小板子上,通过公网实现。许可证是 AGPL 加商业授权。CES 展会上,有一台 3D 打印的小车在拉斯维加斯展示,由远在法国的人通过一个网络摄像头和一块小板子远程驾驶。

AV2 是开放媒体联盟的下一代编解码器,比 AV1 约好 30%。他们在 CES 上用 VLC 演示过它,计划中的 dav1d2 他想叫 Devid。H.265 就是 HEVC,H.266 就是 VVC;ISO 是私营机构,ITU 是联合国机构,所以每个标准都有两个名字。每一代平均提升约 30%,屏幕内容有时能到 70%。多媒体领域和蜂窝射频一样,是专利雷区。H.264 之后,HEVC 加入了大量只有 0.1% 的时间才有用的工具,目的只是为了方便挂上专利;之后又出现了 MPEG LA、HEVC Advance,诺基亚也在专利池之外。专利费没有上限,对 YouTube 或 Netflix 这种规模的公司来说,每年可能是数亿美元,这足以让人值得去发明 AV1。MPEG 在会议上不谈专利,AOM 则做专利审查。AV1 甚至把一种 B 帧变体改名为 S 帧,这种命名有点像“简直不敢相信它不是黄油”那类噱头。VLC 落脚在法国,而法国不承认软件专利。Kempf 曾算过,如果要为每个用户支付全部授权费,要超过 200 欧元。有两家情报机构要求在 VLC 里留后门,他的回答是:不,说得没那么客气。如果要他们在软件上妥协,那他们就把它关掉。构建在从未联网的机器上进行,先编译编译器本身,并做双重签名,这是在一个非西方机构试图把假的二进制文件推到他们服务器上之后才定下的规矩。项目里没有遥测,因此没有哪个政府能问到谁看了什么。从法律上看,VideoLAN 只有他一个人。律师函每周都会来,一年的律师费不到 1 万美元。最坏的情况,有人能从这家非营利组织拿走 5 万美元。源代码早已公开,这一点是挡不住的。

档案界在 Kunhya 的讲述中,由纽约城市大学的 Dave Rice 牵头,把 FFmpeg 视为一块能保存上千年的罗塞塔石碑。英国 BBC Micro 的“新末日审判书”项目,二十年后就需要逆向工程才能读取。档案界资助了 FFV1 的开发,这是一种无损编解码器,支持 GPU 编码,并能抵抗比特翻转,磁带出错时不会让整个 GOP 报废;他们还在一些缺少相关机构的国家,教孩子们使用 FFmpeg 命令。Kunhya 希望 C 语言会像拉丁语一样:从过去学来,今天依然能用。1930 到 1950 年代的影片正在消失;1970 年代到 1980 年代的磁带,能用的磁头比磁带卷数还少。总得有人决定哪些东西要丢掉。也许一千年后,我们会被 AI 生成的垃圾内容淹没;这段从数据稀缺转向数据过剩的过渡期,本身值得保存。两人都说,FFmpeg 还会存在一百年;VLC 也许也会。Kempf 对多媒体的定义是:对人类多种感官的数字化表示。因此,气味轨道、立体鼻孔,以及 VLC 已经为四维液压座椅准备好的触觉插件,都属于多媒体。Neuralink 对应的就是 ffmpeg -i,输入格式是 human brain。标准会兴起、消亡,然后再回来,就像 3D 音频那样。杜比曾经定义了声音,在他看来,现在它主要是律师了。

Kunhya 最喜欢的 FFmpeg 推文,一条是“Talk is cheap, send patches”(空谈不值钱,发补丁吧),另一条是“FFmpeg, nothing is beyond our reach”(FFmpeg,没有什么是我们够不着的)。第二条的背景,是一颗美国军用卫星。这个库还在 NASA 的火星 2020 漫游车上压缩图像;他们想用商用现成的技术,所以这个项目是“多行星”的。VLC 出现在一级方程式赛车的围场、欧洲航天局、SpaceX 的发射现场,还有 CERN。在 CERN,围绕 27 公里长的大型强子对撞机(LHC)环形隧道的模拟摄像机画面,被采集进 VLC,再在全站组播。2010 年,Kempf 和 Laurent 花一小时修好了一个文档写得很差的参数,其余时间则泡在反物质和对撞机之间。被问到遗憾时,Fridman 引用了法语“Je ne regrette rien”(意为“我不后悔”)。Kempf 回答说,遗憾是对心智的一种税:要从中学习,但别为一段你回不去的过去付房租。他面无表情地表示,不愿意被拿去和约翰尼·德普相比。Fridman 以 Linus Torvalds 的观点收尾:大多数优秀的程序员写程序,是因为它好玩。那顶交通锥帽子,一直戴到了最后。

同频道的其他文章

3:36:56EN
Lex Fridman· 2026年9月16日播客Psychiatry Has Never Found Its Penicillin主持 Lex FridmanHistorian Andrew Scull tells Lex Fridman why the field can ease symptoms, has never cured a major mental illness, and keeps paying for overconfidence with patients' lives.Mental HealthPublic HealthNeuroscience
5:15:51EN → 简体中文
Lex Fridman· 2026年8月26日播客 · 2 人对谈DHH 没有亲手写一行 Omarchy Quattro 的代码嘉宾 DHH · 主持 Lex Fridman与莱克斯·弗里德曼一次充满怀疑的对话过去十三个月后,Rails 的创造者讲述了 Opus 4.5、一群编码智能体(Agent)和一个一分钟的 Linux 安装器,如何结束了他一凿一凿手写 Ruby 的时代。编程智能体Vibe Coding智能体工程+3
3:12:58EN → 简体中文
Lex Fridman· 2026年8月12日播客 · 2 人对谈一个冷水澡,二十位冠军:Khabib Nurmagomedov 是如何炼成的嘉宾 Khabib Nurmagomedov · 主持 Lex Fridman在马哈奇卡拉的一间学校体育馆里,七十个人共用一个淋浴间,而且只有冷水。Martial ArtsCombat SportsCoaching+3
3:46:18EN → 简体中文
Lex Fridman· 2026年7月28日播客 · 2 人对谈抽掉奴隶制,就没有美国内战嘉宾 Gary Gallagher · 主持 Lex Fridman1860 年,美国奴隶主名下的奴隶价值,超过了全美所有铁路和工厂的总和。Political PhilosophyLeadershipHistory
3:51:47EN → 简体中文
Lex Fridman· 2026年6月30日播客 · 2 人对谈46% 的皇帝被暴力推翻,帝国照样延续下来嘉宾 Anthony Kaldellis · 主持 Lex Fridman历史学家 Anthony Kaldellis 与 Lex Fridman 一起走过 2200 年的罗马史,并主张我们所说的拜占庭,其实就是罗马本身。Political PhilosophyGeopoliticsLeadership
2:53:42EN → 简体中文
Lex Fridman· 2026年5月29日播客 · 2 人对谈月亮一直在下落,却总也落不到地球上嘉宾 Biggest Mysteries in Physics · 主持 Lex Fridman费米实验室(Fermilab)物理学家 Don Lincoln 在与 Lex Fridman 的对谈中说,物理学的历史就是一部统一的历史;反物质(antimatter)、暗能量(dark energy)和万物理论(theory of everything)依然远在我们能做的实验之外。Quantum MechanicsScience CommunicationPhilosophy of Science