FFmpeg:互联网视频背后的惊人技术 | Lex Fridman Podcast #496
摘要
FFmpeg 和 VLC 是以极少传统资本建成的文明级基础设施:Fridman 称 FFmpeg 出现在超过 90% 的视频工作流中,VLC 下载量至少达到 65 亿次。 同一套技术栈服务于家庭影片、YouTube、Netflix、浏览器、电视台、广播机构乃至航天器,形成罕见的开源飞轮:每增加一种编解码器,整个平台的价值都会提升。Kunhya 的表述更具战略意味:VLC 和 FFmpeg 是“二元星系统”,不是竞争对手。
视频的核心经济问题,是用算力换带宽,同时保留人眼和人耳真正感知到的内容,而不是像 ZIP 文件那样复原源文件。 音频可以压缩约 10 倍,视频可压缩 100–200 倍;在质量相当的情况下,每一代编解码器大约再提升 30% 的压缩率,但编码算力需求可能增加 1–2 个数量级。这种不对称之所以成立,是因为内容往往只需“编码一次”,却要分发给数百万观众。
在代码运行数十亿次的地方,手写汇编仍是巨大的经营杠杆,尽管软件行业长期相信编译器和自动向量化。 Kunhya 称 dav1d 包含约 3 万行 C 和 24 万行汇编,而 FFmpeg 全部编解码器的汇编代码约 10 万行;他还举例称,单个函数的运行速度达到 C 的 62 倍。据估计,有 30 亿台设备在解码 AV1,其中 Netflix 和 YouTube 视频分别约有 30% 和 50% 如此,“每一个周期都重要”。
这些项目真正持久的护城河,是一份社会契约:开放访问、严格审查、广泛硬件支持,以及拒绝通过背叛用户来变现。 Kempf 曾多次拒绝价值数千万美元的报价,因为其中涉及工具栏、间谍软件、劫持搜索或广告;他的判断标准是,自己能否“晚上睡觉时对这个决定感到高兴”。LGPL 许可仍允许围绕 FFmpeg 和 libVLC 开发商业产品,但对这些组件的修改必须回馈社区。
大型科技公司经常把志愿者项目当供应商使用,却不给供应商级别的经济回报,最终形成不断扩大的基础设施和安全责任。 节目中最尖锐的例子,是针对冷门编解码器的 AI 生成安全报告:漏洞发现可以低成本规模化,但分诊、修复、对外沟通和固定 90 天期限都由志愿者承担。舆论压力带来了补丁、修复奖金和更多捐款,但 Kunhya 称,FFmpeg 的捐款仍不足以支付 1 名全职开发者。
这里的开源既是全球人才市场,也是精英工程学院,唯一的入场券是优秀代码。 有青少年写出数千行生产级汇编,也有人在战区贡献代码;维护者明确拒绝企业履历崇拜:“也许你是一条狗。我不在乎。”标准之所以维持在高位,是因为数千名短期参与者提交的代码,最终可能由仅约 10–15 名 FFmpeg 核心开发者和 6–8 名 VLC 贡献者接手。
信任来自架构和可验证性,而不是口头承诺:VLC 不收集遥测数据,拒绝政府后门,并在离线系统上构建、分层签名发布。 剩余风险集中在分发渠道和依赖代码:假 VLC 安装包曾延迟数周才启动恶意软件,而真实的媒体进程会调用数百个插件、FFmpeg 和 GPU 驱动。VLC 的应对方式是进程级沙箱,让解码器或解复用器即使崩溃,也无法接触用户文档。
下一个可投资的边缘,将从被动播放转向同步、超低延迟的机器控制,以及更丰富的感官媒体。 Kempf 的 Kyber 通过一条 QUIC 连接传输视频、音频、指令和同步传感器数据;Kunhya 报告称,Windows 到 Windows 或 Windows 到 Mac 的端到端玻璃延迟为 7 毫秒,目标是 4 毫秒。除了 AV2,同一架构还可以扩展到点云、XR、触觉、深度、气味,最终甚至神经流:多媒体就是“面向人类感官的多条数据流”。
精读
1. VLC 的荒谬兼容性,始于把每一种输入都视为可疑对象
Kempf 开场展示的并不是时髦的流媒体格式,而是 VHS:通过 SCART 或 RCA 将采集卡接入后,VLC 可以播放或录制信号,部分模块甚至能直接控制 VCR 摄像机。项目还曾用一个夏天实现 DVD-Audio,包括其定制加密,而当时商业软件已经基本放弃支持这种格式。
FFmpeg 的兼容性长尾延伸到一款老《星球大战》游戏的 10 秒开场:有人实现了它的特殊编解码器,并确保一张光盘上的那段序列能够逐比特准确解码。其背后的档案伦理不言自明——只要贡献者愿意投入,数据的冷门并不是放弃恢复它的理由。
VideoLAN 曾举办比赛,故意制造恶意媒体文件:一个 MKV 每帧都改变分辨率、宽高比和旋转角度;另一个“视频”只有黑帧和动态 SSA 字幕;还有一个文件被描述为同时是有效 ZIP 和 MP3。VLC 能播放这些愚蠢文件,是因为病理样本训练的正是处理现实世界损坏媒体所需的韧性。
交通锥之所以成为分发资产,恰恰因为它“荒唐且可笑”。Kempf 称,VideoLAN 网站 25% 的流量来自搜索“cone player”,而一次愚人节替换活动引发约 1 万封抗议信。一个鲜明的网络梗最终变成了文化符号,也为这个小型非营利组织带来了无需购买的全球身份认知。
2. 按下播放键,就会启动一整套以人的一生为尺度的工程问题
Kempf 将第一阶段描述为:把地址——HTTP URL、本地路径、DVD 或设备——交给操作系统,再得到字节流。随后,解复用器识别容器结构,分离压缩视频、音频和字幕轨道;在此之前,系统里还不存在任何像素或声音采样。
Kunhya 称,播放器必须先探测每条视频流,再选择解码器,因为最多 45% 的文件可能无法由 GPU 解码。不同编解码器变体和 GPU 厂商暴露出的能力各不相同;兼容内容会进入硬件“黑盒”,其余则回退到软件解码。
软件解码首先移除霍夫曼编码或算术编码等熵编码,读取语法信息进行帧内预测,从量化后的频域系数中重建预测残差,执行逆变换,再将残差还原到空间域。只有经过这些步骤,压缩语法才会变成原始图像数据。
最后,图像交给图形系统,原始音频交给声卡,后者再生成供扬声器播放的模拟信号。Kunhya 的提醒避免了这张整齐的流程图制造“事情很简单”的错觉:“每一句话背后都是某个人一生的工作。”每一条箭头背后,都有书籍、学术专长和数千个现实边界案例。
3. 压缩的成功,在于以人类最不容易察觉的方式损失信号
Kempf 的区分至关重要:媒体压缩不是 ZIP。无损归档试图复原完全一致的数据,而常见音视频编解码器会主动丢弃信息——类似 MP3 的音频大约压缩 10 倍,视频通常压缩 100 倍或 200 倍——同时让损失尽可能符合人类感知。
因此,视频处理会从 RGB 转向 YUV 一类的表示方式,将亮度和色彩信息分离。由于视觉对亮度细节更敏感,色度分辨率通常可以大幅降低,先将未压缩数据缩小一半,而大多数观众并不会有意识地察觉消失了什么。
编解码器会把图像划分为块,预测各块内容,用类似离散余弦变换的数学方法转换残差误差,再量化系数并紧凑编码。劣质或损坏图像中常见的方块并非随机瑕疵,而是暴露了大量数学机制所依赖的网格。
每一代编解码器可能在质量相当的情况下将码率降低约 30%,但 Kunhya 补充了隐藏成本:实现这项提升可能需要多 1 个、甚至 2 个数量级的编码 CPU。更高效的压缩本质上是基础设施权衡——以更多前置算力换取更低的存储、网络分发、电池消耗和重复解码成本。
4. 编解码器通过跨空间、时间和观众摊薄冗余来变现
Kunhya 将编解码器的任务定义为去除空间和时间冗余,通常压缩所需的算力远高于解压。只要一次昂贵编码可以服务大量观众,这种不对称就具有经济合理性;但它也限制了实时编码、交互系统和小功率设备。
Kempf 描绘的具体画面是镜头扫过云层或静止背景:物体只编码一次,后续帧再告诉系统复用它。向更远处搜索——例如在 4K 视频的 200 帧范围内寻找匹配——可能找到更好的结果,但内存和算力会把理论上无限的复用变成现实中的优化问题。
AV1、AV2 和 VVC 这类现代名称,代表的是一组编码工具,而不是一种统一技术。类似 Zoom 的视频流可能在 PowerPoint 画面和实时视频之间切换,因此需要不同的预测和压缩工具;编码器的负担,是为每个区域、每个时刻选出最优工具组合。
5. 容器负责组织轨道,但文件名经常撒谎
容器也称 muxer,是承载多条轨道的结构;解复用则负责将它们分开。AVI 来自 Microsoft 早期生态,MOV 来自 Apple,后来演化出 MP4;Matroska 则由开源社区设计,目标是成为更具扩展性、面向未来的容器。
MP4 和 H.264 的混淆,部分是行业自己造成的。H.264 也称 AVC 和 MPEG-4 Part 10,而 MPEG-4 本身涵盖容器、音频和多种视频规范;在实际使用中,Kunhya 称 MP4 有 99% 的时候是 H.264 加 AAC,因此日常口语中的混用也可以理解。
VLC 和 FFmpeg 把
.mp4当作提示,而不是事实依据。文件扩展名会提高 MP4 解复用器的探测优先级,但软件仍会检查字节并尝试其他选项,因为文件经常被错误命名、格式损坏,或由不严格遵循规范的工具生成。VLC 不信任输入的理念,继承自 1990 年代末的 UDP 流媒体时代,当时丢包和损坏都是预期情况。同一理念也让它在部分下载场景中广受欢迎:AVI 元数据可能位于文件末尾,但 VLC 仍会用 Kempf 的话说:“这个文件坏了,但我还是要试试。”
6. FFmpeg 把专业媒体处理变成可编程的商品
Kempf 将 FFmpeg 描述为一组用于编解码器、复用器、解复用器和滤镜的底层库,以及把它们组合成流水线的命令行工具。核心库包括 libavcodec、libavformat 和 libavfilter,同时也整合 x264、libvpx 等外部项目和专用组件。
命令行接口实际上“就是一门真正的语言”。简单任务只需一个输入、一个输出和一种格式,但生产环境中的命令可能长达数千字符,也可能由程序生成;如今用户会让 AI 系统生成这些命令,因为可用的滤镜图和参数空间已经超出大多数人的记忆范围。
Fridman 自己展示的例子,将片头、节目和片尾拼接起来;把视频压暗至黑色;对音频进行交叉淡化;将带样式的字幕烧录进画面;同时接受彼此不同的输入格式。Kempf 将其比作从 shell 中完成 Adobe After Effects 工作——对动态图像而言,这是异常完整的自动化接口。
Fridman 认为,FFmpeg 帮助促成了播客、流媒体和 YouTube 革命。1990 年代售价数十万美元、占据汽车大小机架的压缩设备,最终变成个人即可使用的软件,让个人在技术能力上几乎与大型公司站在同一条起跑线上。
7. 开源许可是社区的宪法
Kempf 用芝士蛋糕作比喻,让源代码开放变得具体:开源不仅给出做好的蛋糕,还给出配方、建造烤箱的说明,以及修改和转售配方的法律许可。软件并非几道厨房步骤,而是许多作者积累的数十亿条微小指令,因此许可尤其重要。
他估计,FFmpeg 历史上有 2,000–3,000 人参与贡献。他们跨越国界、宗教、语言和雇主,围绕一个狭窄的共同目标协作——让多媒体正常运行——除了允许他们协作、分叉和重新合并的许可协议外,几乎什么都可以争论。
MIT 和 BSD 等宽松许可允许广泛复用,有时只需署名;copyleft 许可则要求修改内容以逐步增强的条件回馈社区,从类似 MPL 的方式到 LGPL、GPL 和 AGPL 不等。Kempf 称,这种选择是一份界定商业采用者与社区贡献者关系的“社会契约”。
FFmpeg 和 libVLC 的重要库组件使用 LGPL:专有应用可以链接这些组件,而无需开放整个产品,但对组件的修改必须回馈。其他 VLC 版本仍适合使用 GPL;iOS 和 Apple TV 应用则使用 MPL,因为 Apple App Store 的条款会使 GPL 分发变得复杂。
8. 重新许可揭示了代码库背后的人类所有权
将 libVLC 从 GPL 改为 LGPL,需要获得 350 多名版权持有人的同意,因为 VideoLAN 没有要求版权转让。Kempf 追踪旧邮箱地址、走访工作场所,甚至见到一名工厂工人——他已故的儿子曾贡献过几行有用代码。那场对话最终谈的是一个人的一生和一张照片,而不是行政清理。“把事情做对很重要。”
这次变更让 libVLC 得以进入专有游戏和移动应用,也支持围绕集成开发的咨询业务。但它同样说明,FFmpeg 无法简单改变许可来阻止云服务商:数千名贡献者,包括已经去世的人,仍然拥有其作品的权利,而这些作品的影响可能早已超越最初提交的代码。
9. 项目按代码判断身份,因为维护者要继承后果
Kempf 的精英主义规则非常绝对:“也许你是一条狗。我不在乎。”国籍、雇主、年龄和学历都不能证明技术质量;即使补丁来自知名公司的工程师,也可能因为不符合保护社区的代码标准而被拒绝。
严苛门槛反映的是维护算术。Kempf 统计,VLC 约有 5 名核心开发者,FFmpeg 有 10–15 名,而历史贡献者达数千人;如果一个贡献者留下来的概率只有约 1%,核心团队就必须在工作、家庭、意外和兴趣变化让作者离开后继续维护代码。
Linus Torvalds 代表了更极端的表达方式,不过 Kempf 指出,他最强烈的批评通常针对已经认识他的子系统维护者。理想的区分,是攻击一个人和宣布代码“糟透了”;这种文化可能令人难受,但全球基础设施的可维护性和正确性不能妥协。
语言简短也有现实原因:志愿者往往在完成一天的本职工作后审查补丁,且多语种沟通以欧洲为中心。英语中的语气细节并非所有贡献者都掌握,因此一句让美国读者感到敌意的话,可能只是疲惫或直译,而非针对个人的轻蔑。
10. VLC 起源于学生在校园内转发卫星电视
École Centrale Paris 的校园由学生大规模管理,因为校友非营利组织拥有这块场地。学生负责房间、公用设施、商店、广播、电视和网络。这种罕见的责任,让年轻工程师既有权力,也有必要亲自建设基础设施,而不是等待学校安排。
其 1980 年代的令牌环网络,在 Doom 和 Duke Nukem 让延迟变得明显后,终于无法忍受。约在 1994–1995 年,寻求更快网络的学生找到 Bouygues;该公司的 CIO 提议安装一面大型卫星天线和解码器,通过网络向约 1,500 名学生分发信号,而不是给每个人配独立接收器。
“Network 2000”通过 155 Mbps 的 ATM 网络传输 MPEG-2 传输流、视频和音频。被破解的原型机运行 45 秒后崩溃,但演示持续了 40 秒;由于内存泄漏,团队安装了 64 MB 内存,而不是常见的 8 MB 或 16 MB。一场本应一次性使用的展示,最终成为基础。
Christophe Massiot 和另一名学生后来创建 VideoLAN,用于网络视频,并花了约 3 年说服学校将其开源,最终在 2001 年成功。Kempf 于 2003 年加入,成立独立的 VideoLAN 非营利组织,并在 2005 年 VLC 只剩 2 名活跃开发者时将项目维持下来。
11. 拒绝掠夺式变现,保住了 VLC 的信任与生存
Kempf 确认自己不止一次拒绝过数千万美元,但他否认自己反对金钱的神话。这些报价涉及捆绑工具栏、类似间谍软件的浏览器改动、劫持搜索或广告——这些商业模式会伤害用户、引发分叉,并很可能让项目在 3 年后死亡。
他的诚实反事实很有启发性:如果 Netflix 这类合法服务提出有用的集成方案,答案可能不同。界线并不是商业与纯粹之间的二选一,而是以合乎伦理的方式赚钱,还是通过用户没有明确请求的机制利用分发信任。
最难缠的出价者声称,其“下流”的付款可以资助另一个开源项目。Kempf 看出了这种道德漂白:“这不是这么运作的。”出卖项目还会侵占许多其他贡献者共同创造的成果;对他个人而言,关键是晚上睡觉时仍能为自己的选择感到自豪。
12. AI 安全发现,变成了对志愿者注意力的拒绝服务攻击
Kunhya 的批评始于一个让步:Google 是开源最大的支持者之一,也雇用了能力很强的安全研究人员。冲突在于,Google 使用 AI 生成 FFmpeg 漏洞报告,给志愿者标准的 90 天期限,只提供有限资金,却在修复尚未准备好时就公开宣传 AI 的成果。
报告中的目标可能只是一个 1990 年代的冷门游戏编解码器,但安全流程说得仿佛每一把锁都守着 Fort Knox。Kunhya 的类比是:用工业规模的设备撬开业余爱好者家里的挂锁,然后要求这名爱好者紧急重新设计锁具,而发现者既不提供资金,也不参与施工。
自动化报告篇幅很长、数量很多,而且全部令人警觉——“高、高、高、存在漏洞、可怕、可怕、可怕”。另一名研究人员将一个可能让单个像素变色的整数溢出评为 7.5 严重度;Kunhya 认为,这种反复升级会训练维护者和用户忽略警报,成为安全领域的“狼来了”。
Alex Strange 对激励机制的批评之所以有力,是因为发现者可以获得奖金、会议声望、署名、Logo 和宣传,而“你修复它时,没有人会替你做这些事”。争议之后,Google 开始提交补丁,并为修复问题设立奖励,部分纠正了发现与修复之间的不平衡。
13. 企业经常要求服务级别的紧迫性,却不购买服务
Microsoft Teams 的例子发生在 XZ 争议之后:一名经理因为某个 FFmpeg 问题影响到 Microsoft 的显眼产品,便将其标为高优先级。当志愿者建议签订长期维护合同后,Microsoft 只提供了几千美元的一次性付款,尽管其企业规模十分庞大。
Kempf 的边界很简单:“我们不是你的供应商。”公开 Bug Tracker 不是签约供应商的 Jira;除非公司购买,否则就不存在 SLA。那些本应教会企业理解这一点的开源项目办公室,往往没能把产品团队和其技术栈底层的社区联系起来。
舆论压力仍然有效。捐款大幅增加,但 Kunhya 称,依旧不足以支持 1 名 FFmpeg 全职开发者;尖锐发帖也迫使相关方回应:VLC 曾超过 1 年无法在 Google Play 更新,VideoLAN 作为 Windows 前 10 大应用之一,却没有普通的联系渠道。
14. FFmpeg 账号把冲突转化为招募、教育和杠杆
Kunhya 将网络争吵称为“说唱对战”或 WWE:攻击可以带有戏剧性,却不必演变成永久的个人敌意。这个账号的目的不只是嘲讽,而是让人看到 FFmpeg 并不是拥有数百或数千名带薪开发者的 Kubernetes,而主要是一群下班后在地下室工作的人。
最有效的挑衅,是为被行业忽视的贡献者正名。“FFmpeg 里的青少年写过比 Google 工程师更多的汇编代码”,指向 Daniel Kang 和 16 岁的 Ruikai Peng 等人。他们发现并修复问题,没有把一个 3 天就能解决的开发 Bug 变成带品牌的 CVE 宣传秀。
Kempf 承认,账号的语气偶尔越界,包括涉及 Theo 的争议期间;他打电话给 Theo,让参与者冷静下来,并划定界线。但开源社区自建项目的知名度因此大幅上升,Tim Sweeney、John Carmack、Andrej Karpathy 和 Fridman 等知名支持者也放大了这些工作。
15. 贡献者因视频而来,因精通、影响力和乐趣而留下
Kempf 给潜在贡献者的建议是“做你喜欢的东西”。电影、动漫、字幕,以及让图像显示出来的满足感,会吸引人入场;而 16 毫秒的帧预算会迫使他们学习 C、汇编、SIMD、CPU 流水线、内存层级、I/O 和实时系统纪律。
FFmpeg 之所以成为“有史以来最好的学校”,是因为世界级审查者会暴露代码的每一个缺陷,而代码没有任何藏身之处。回报是异常清晰的影响力:程序员可以告诉祖母,“我做这些,是为了让你能播放视频”,而不必描述某个雇主之外没人会见到的内部发票门户。
16. VLC 和 FFmpeg 像二元星系统一样彼此增强
Kunhya 的简洁类比是:“VLC 之于 FFmpeg,就像 Android 之于 Linux。”VLC 依赖 FFmpeg 的解码广度;FFmpeg 则通过 VLC 接触损坏和异常文件;两边开发者重叠,捐款也曾跨项目流动,一个环境发现的故障会强化另一个环境。
x264 让这种耦合不仅是技术性的,也是商业性的。Kunhya 估计,许多 FFmpeg 流水线中超过 80% 依赖 VideoLAN 的编码器;他还称,很多公司采用 FFmpeg,正是为了获得 x264——这个开源实现让 H.264 编码变得异常优秀。
依赖图远大于每个品牌自己的代码库。Kempf 称,在 Windows 上编译 VLC 涉及约 1,600 万行代码,其中 VLC 自身只有约 100 万行,FFmpeg 约 200 万行;而 FFmpeg 又整合了 x264、Opus 以及许多其他独立库。
VideoLAN 更广泛的项目组合包括 libdvdcss、libdvdnav、libdvdpsi、libbluray、libVLC、x264、dav1d、空间音频项目和 checkasm。因此,生态没有单一中心:“提醒一下,里面是 FFmpeg”低估了项目之间相互提供能力、测试、触达和贡献者的架构。
17. FFmpeg 的历史,是一代代人解决不可能兼容问题的历史
Fabrice Bellard 提供了最初概念。Kunhya 将 2000 年代称为 Michael Niedermayer 的时代:在 Windows Media Player、RealPlayer 和各种独立编解码器包割裂播放世界的时期,全面支持 DivX、Xvid 以及无数 MPEG-4 Part 2 变体。
原生解码取代了臃肿的专有播放器和可疑 DLL 软件包,但真正的工作近乎西西弗斯式。一套中国 CCTV 系统可能实现了某种古怪的 MPEG-4 ASP 变体;要在不破坏其他所有变体的情况下支持它,就意味着将问题复制到数百万个边界案例中。
逆向工程始于对 Windows Media 和 RealMedia 的专有实现,参与者包括 Benjamin Larsson 和 Kostya Shishkov 等人。约在 2008 年,H.264 成熟和高清视频兴起,开启了另一个时代;Paul Mahol 和 Kostya 等专家开始处理那些供应商从未提供可用开源实现的编解码器。
VLC 1.0 约在 2009–2010 年到来,此时兼容性栈逐渐成熟。它的承诺——无需编解码器包、没有间谍软件、直接播放——并不只是界面上的简洁,而是多年重建彼此不兼容的专有格式、同时维持所有早期解码器运行的消费端结果。
18. 逆向工程师把可执行二进制当作规范
Kostya Shishkov 的标志性说法是“二进制规范”:文档并非必需,因为可执行文件本身会揭示编解码器的行为。Kempf 称他接近天才,能够重建 20–30 MB 的二进制数据;Kunhya 估计,即使只有 1 MB,也可能代表约 1 个月的工作。
GoToMeeting 成为 VLC 用户的重要需求,是因为旧录音需要专有解码器,否则 VLC 无法播放。Kempf 发起悬赏;约 2 个月后,Kostya 带着优雅的代码回归,还开了几个涉及 Kempf 姓名的玩笑,并提供了能够让这些会议记录在未来 ARM、RISC-V 或移动系统上继续播放的支持。
Kunhya 描述了这场考古工作:找到解压模块并挂钩,导出参考 YUV 输出,打开反汇编器,通过模式识别熵解码和变换,然后逐条机器指令跟踪。很长时间里,屏幕上看不到任何熟悉的东西;一个错误的系数缓冲区,就可能把推理带进完全错误的分支。
他的 CineForm 工作始于一个幸运的动画样本:画面包含平坦色块,复杂工具很少。更多样本逐步揭示新的分支,直到实现完全匹配;一个企业档案中 10 万个文件,可能成为验证的“金矿”。现代编解码器的逐比特精确定义,要求独立解码器对每个样本输出完全相同的结果。
19. FATE 保护组合硬件矩阵中的可移植性
FFmpeg 的自动化测试环境 FATE 持续在志愿者托管的机器上测试编解码器、滤镜、编译器、操作系统和指令集。其面板覆盖 Apple Clang、GCC、Visual Studio、Intel 编译器、macOS、iOS、tvOS、ARM、x86、PowerPC、RISC-V,以及过去的 DEC Alpha 等冷门平台。
这套矩阵捕捉到的不只是程序员回归问题。编译器有时会错误编译有效的 C 代码,而解码器中 1 个比特或 1 个像素的错误,可能沿着依赖帧扩散成大面积画面损坏;在本地运行正常的改动,仍可能在 GCC 11 或某个旧 Apple 平台上失败。
Kempf 所面对的可移植性负担,横跨 Windows XP 到 Windows 11、macOS 10.7 到节目中所说的 macOS 26、iOS 9 到 iOS 26,以及 Linux、BSD、Solaris 和 OS/2。支持 iOS 9 需要混用旧版 Xcode 和 SDK 组件,像一台“弗兰肯斯坦”,以便在 Apple 放弃 ARM32 后仍保留 ARM32 输出。
这种向后兼容具有直接的用户价值:有人可以继续把 iPad 2 当作正常的播放器,而不用购买新硬件。Kempf 将汇编和旧系统支持连接到一门逐渐失传的技艺——充分优化软件,让仍能工作的设备不会仅仅因为上游工具链前进就变得过时。
20. 汇编把架构知识直接转化为吞吐量
汇编表达的是处理器自身的指令,而不是让编译器把更高层的意图翻译出来。FFmpeg 关键使用的是 SIMD,即单指令多数据:一条操作可以同时将一个值加到约 16 个元素上,这天然适合视频像素的块和向量。
Kunhya 报告称,常见的函数级提升为 10–50 倍,明确不是 10%–50%;其中一个函数被称为比 C 快 62 倍。他的公司 Open Broadcast Systems 将 FFmpeg 的理念用于体育直播系统,包括一套手写汇编矩阵,将每一代 CPU 上的各种打包 10-bit 视频格式相互转换。
Kempf 将低层工作的重新升值归因于硬件限制:AI、视频、内存和网络需求的增长速度,已经超过单核性能提升。增加核心数只能解决部分问题,而优化那些每秒执行数十亿次的小型内核,可以实现“每一美元投入获得更多算力”——节目中提到的 FP8、FP4 量化和 Microsoft Phi-1.5 也体现了同样的约束驱动思路。
专家程序员还会“滥用机器”,例如用加密指令执行无关的视频操作,或在受控库内部绕过操作系统调用约定。这些收益要求掌握寄存器、缓存流量、指令延迟、ALU、流水线和数据布局,而普通 C 抽象无法将这些信息传递给编译器。
21. dav1d 证明手写优化仍然重要
AV1 出现时,甚至 Alliance for Open Media 的参与者也认为其复杂度要求硬件解码。Kunhya 和合作者坚持认为,在硬件部署前的多年过渡期内,软件解码不可或缺,并围绕“每一个周期都重要”打造 dav1d。
Kunhya 给出的规模对比非常鲜明:dav1d 约有 3 万行 C 和 24 万行手写汇编,而 FFmpeg 全部编解码器的汇编代码约 10 万行。一份代码构成统计——79.9% 汇编、19.6% C、0.5% 其他——成为“巅峰视频编解码器应有的样子”的挑衅性图景。
优化目标覆盖约 30 亿台设备;Kunhya 称,Netflix 视频约 30%、YouTube 视频约 50% 已经采用 AV1。dav1d 可以只用 1–2 个 CPU 核心解码 720p,把原本被认为必须依赖专用芯片的规范,变成可部署在现有机器上的软件。
实现会在运行时检测硬件能力,并为不同 x86 代际、AVX、AVX-512、ARM64、Neon、SVE、SME 和 RISC-V 选择不同内核。尽管已有多年实际案例,批评者仍认为编译器自动向量化或 intrinsics 足够;反驳仍然来自经验:“差得远。”
22. 汇编必须通过真实问题传授,否则这门技艺会消失
Kunhya 拒绝按指令逐条编写教材,因为那是在用语法而不是对话的方式教编程。他的汇编课程从高中数学、指针、寄存器和实际向量问题出发;贡献者学习后提交了可运行的 FFmpeg 补丁,说明这门技艺不必依靠师徒式传承。
他的审美类比是驾驶 Spitfire:“只有你和处理器。”操纵杆与控制面物理相连,飞行员可以把飞机推到设计师预期之外。LLM 对汇编的理解超出他的预期,但训练数据稀缺,导致它们即使被要求修复,也会反复生成无法逐比特一致的修改。
23. Rust 能改进新系统,但无法抹去成熟 C 或不安全汇编
Kunhya 重视内存安全,但认为“Rust 单独取代现有基础设施”的说法带有“非常强的世界语氛围”。如果重写项目只能实现 coreutils 的 85% 或 90%,并不等于成功,因为“最后的 1% 需要 99% 的时间”;生产采用要求功能等价、ABI 稳定、测试无缺陷和广泛编译器支持。
Kempf 已为 VLC 编写 Rust 模块,Kyber 也主要用 Rust 构建。他认可 Rust 在从零开始的解析和网络系统中的价值:所有权和边界检查,使 Rust 成为内存敏感型新系统中“更好的 C++”,尤其当整个项目可以共享一种语言和安全模型时。
他的默认规则仍是“不要重写”。写代码比读代码容易一个数量级;新人看不到未记录的业务逻辑或历史边界案例,往往能迅速重现 80%–90%,随后才发现剩余行为承载着大部分累积智慧。
用 Rust 重写 dav1d 的 C 代码,并不能让手写汇编变得安全,因为汇编仍可访问任意内存。Kempf 更倾向于研究“安全汇编”:类似 checkasm 的编译期插桩,检查优化内核是否始终处于允许的内存区域内,而不是在性能边界上摧毁 Rust 的安全保证。
24. 分叉可以强化项目,但维护压力也会击垮个人
Fridman 转述称,FFmpeg 于 2011 年从 Libav 分叉,起因是治理、领导和开发流程冲突,而不是编解码器本身存在根本分歧。一些 Linux 发行版似乎曾在一段时间内转向 Libav;随着时间推移,FFmpeg 吸收了 Libav 的大量工作,贡献者回归,审查流程稳定下来,留下的项目成为更广泛的超集。
Kempf 认为,分叉是开源改变僵局的合法方式,并举出 GCC/EGCS 以及 KHTML/WebKit/Blink 的例子。Fridman 的反驳来自人的层面,而非技术层面:即使机构冲突最终有助于项目,也可能耗尽最初凭热情维持项目的少数个人。
如今更大的倦怠威胁还包括“AI 垃圾”——糟糕的报告和补丁把审查成本转嫁给维护者。Kempf 将其与 XZ 联系起来:攻击者不断向一名孤独维护者施压,甚至在不合时宜的时间骚扰,直到他把提交权限交给一个有条件破坏项目的人。
滥用甚至可能演变成肢体威胁。VLC 在 2009–2010 年左右停止支持新的 PowerPC 后,Kempf 收到过装有粉末、写着“PowerPC forever”的死亡威胁;粉末最终证明是面粉,不是炭疽,但警方和受惊的家人都是真实存在的。他称,这段经历锻造了厚脸皮,而任何志愿者都不应被迫拥有这种东西。
25. x264 击败神圣指标,优化的是观众真正看到的内容
早期编解码器研究重视由均方误差推导出的 PSNR,即使它会激励系统把小误差均匀铺满画面,造成明显的细节模糊。x264 开发者则直接在普通笔记本上用眼睛判断输出,关心人的视频是否看起来好,而不是实验室指标是否上升。
两项创新推动了这次转向:感知率失真将人类感知和块能量纳入考量,自适应量化则根据视觉复杂度重新分配比特。ParkJoy 片段包含跑步者、水面、草地、树叶、倒影和运动;它显示,启用这些工具后,即使 PSNR 更低,画面也可以明显更好。
Kempf 还提供了来自 Planet Earth 的更严苛样本:画面被鸟群填满,数百万个运动形状会压垮普通编码器。动漫则增加了渐变、色带、特殊数字纹理、多层日语读法和复杂字幕;缺乏官方发行渠道的字幕组社区开发了类似 Aegisub 的工具,并提供了改善开源编解码器的反馈循环。
专业用户最终也押注同一套逻辑。Kunhya 提到 Warner Brothers 工程师 Chris Henderson 将 x264 用于 Fringe 盒装套装,也提到一名工程师在 Cinema Paradiso 上进行比较;不过对于高度电影化的作品,他仍偏好实体光盘,因为精心制作的 Blu-ray 在不需要奢华电视的情况下也可能更好看。
26. 新一代编解码器通过扩大搜索空间节省带宽
从 MPEG-2 到 DivX 时代的 MPEG-4、H.264、HEVC 或 VP9,再到 AV1,基本组件始终是变换、帧内预测、运动补偿和熵编码。节目给出的粗略规律是每代提升 25%–50%,概括为 30%;但 AV1 编码所需 CPU 可能约为 H.264 的 2 个数量级。
额外算力用于搜索更大的块、更多分区、更多预测方向和更多面向具体内容的工具。因此 YouTube 会广泛编码 H.264,但对热门内容重新编码 AV1:只有当交付体积减半、且覆盖数十万或数百万观众时,昂贵的服务器工作才具有经济合理性。
I 帧是完整画面;P 帧依赖更早的画面;B 帧可能同时依赖过去和未来的画面,因此解码顺序与显示顺序不同。一个 GOP 可以跨越约 250 帧,而帧内刷新可以逐步重建干净区域,避免之后插入完整 I 帧。这种压缩之所以像魔术,是因为观众从未看到它背后的依赖图。
27. 自适应流媒体在本地很简单,端到端却极其复杂
流媒体播放器下载编码片段,判断它们是否足够快地到达,再在约 7 种预制分辨率之间切换。Kempf 称,降低画质可以简单到:当一个片段的下载时间超过其播放时长的一半,就立即反应;而如何在不来回震荡的情况下重新升档,才是更难的控制问题。
Kempf 认为,音频切换可能比视频变化更刺耳:从完整 AAC 切换到 Spectral Band Replication 配置,会让声音突然变得像罐头;视觉质量变化则可能被忽略。观众能容忍 30 FPS 的体育视频画质相当差,但音频出现故障,立刻就会意识到发生了变化。
系统规模带来新的复杂度:一场直播活动必须采集内容、路由、在没有 QA 时间的情况下编码多种分辨率、加上 DRM、通过 CDN 分发,并在浏览器和异构设备上解码。接受 10–20 秒延迟可以简化网络问题;一旦要求互动控制,这种余地就消失了。
28. VLC 的安全模型同时假设媒体和分发渠道都可能恶意
WikiLeaks 的 Vault 7 文件描述过一个被植入额外 DLL 的修改版 VLC:受害者观看电影时,它收集、加密并传输文档。攻击并没有利用官方 VLC,而是利用了用户对假冒版本的信任;播放 2 小时期间正常的风扇噪音和 CPU 占用,恰好成了掩护。
中国攻击者针对印度用户的类似滥用,也曾促使印度封锁 VLC,直到 VideoLAN 发起抗辩。据报道,一个德国假分发网站已经存在 12 年:其安装程序会等待约 3 周才下载间谍软件或广告软件,从而逃避简单分析,而搜索排名却让它排在官网之前。
VideoLAN 的官方应对异常严格:不收集遥测数据,不知道用户观看什么;构建机器离线运行,并先编译自己的编译器;发布采用双重签名。两家情报机构曾要求留下后门,Kempf 的回答是“不”,并补充说,如果被强制要求接受入侵,“我们会关闭它”。
沙箱仍必须隔离 VLC 约 500 个插件、FFmpeg、着色器和供应商 GPU 驱动中的正常 Bug。团队正在像 Chrome 一样,将解复用、解码和滤镜拆分到不同的受限进程中,但多媒体沙箱必须在不复制数据、从而牺牲性能优势的情况下,传输每秒数百兆甚至数十亿比特的数据。
29. Kyber 将编解码器纪律应用到机器控制回路
Kempf 的新公司瞄准的是远程操控:此时视频是反馈,而不是娱乐,应用包括机器人、无人机、远程车辆、潜艇、云游戏、手术,以及最终对自主机器进行远程观察。其承诺是通过“让距离消失”,实现技能投射或力量投射。
Kyber 通过一条加密 QUIC 连接复用视频、音频、鼠标、键盘、游戏手柄指令和传感器流。它还校正时钟漂移,让多台摄像机、GPS、控制事件和训练记录保持同步;否则,机器人模型可能从彼此不对应的观察和动作时间戳中学习。
可靠性部分来自前向纠错:传输几个百分点的冗余数据,由接收端重建丢失数据包,避免等待会增加延迟的确认信号。CES 展示中,一辆 3D 打印的小型探测车位于拉斯维加斯附近,通过法国的摄像头和一块小型主板进行控制。
目标是 4 毫秒的玻璃到玻璃延迟,相当于约 240 Hz。Kunhya 报告称,Windows 到 Windows 或 Windows 到 Mac 的延迟为 7 毫秒;其中约 3.5 毫秒来自 NVIDIA 硬件编码器,2 毫秒来自 Intel 解码器,因此剩余预算的大部分由编解码器本身的延迟占据。
30. AV2 的竞争,既是压缩效率之争,也是专利经济学之争
AV2 是 Alliance for Open Media 继 2018 年 AV1 规范之后推出的下一代标准,目标是在质量相同的情况下将带宽降低约 30%。Kempf 预计会有 AVM 编码器,也可能有 SVT-AV2 等其他实现,以及 VideoLAN 的 dav2d 解码器——拼写为 D-A-V-2-D,被描述为“dav1d 2”,延续 dav1d 的递归命名玩笑。
平行的标准线包括 H.264 或 AVC、H.265 或 HEVC,以及 H.266 或 VVC;ITU 和 ISO 的命名反映了共同的机构历史。节目有意将每代 30% 作为实用化简,同时承认屏幕内容或其他高度匹配的场景可能获得 70%–80% 的提升。
专利经济学将两大阵营分开。H.264 的许可相对可控,但 HEVC 集合了 MPEG LA、HEVC Advance、独立权利人、无上限索赔以及大量主要用于建立专利地位的工具;Netflix、Google 和 Meta 可能需要每年考虑数亿美元,转而资助免版税替代方案。
Alliance for Open Media 在标准化过程中必须考虑专利,迫使团队进行“双重创造”:一边提升压缩效率,一边避开受保护工具,有时甚至创造出类似“我不敢相信这不是 B 帧”的东西。法国拒绝软件和数学专利,也让 VLC 可以实现某些格式;Kempf 估计,如果合并计算许可费,每位用户的成本将超过 200 欧元。
31. 档案工作者把 FFmpeg 当作未来文明的罗塞塔石碑
Kunhya 强调了与 Dave Rice 及 British Film Institute 等机构相关的档案社区。成员重视开源,不只是因为预算有限,更因为播放软件必须在机构、供应商和硬件更替后继续存活;相比之下,英国 New Domesday 项目在几十年内就变得难以读取。
FFmpeg 的 C 实现是这项押注的核心。Kunhya 预测,1,000 年后 C 仍然会像拉丁语一样可理解:“也许不再是日常语言,但与逻辑和数学足够接近,未来工程师仍能重建编译器,并理解历史比特流如何变成图像。”
档案工作者资助了 FFV1,这是一种无损编解码器,目标是快速软件编码、抗损坏,以及存储位翻转时将损害限制在局部;他们也支持 GPU 加速。他们的要求是不丢失整个 GOP,并用数学证明细微的历史证据没有被压缩掉。
他们的领域知识也回流到软件:1950 年代磁带色度学、电影扫描仪、老化胶片、过时磁带磁头和存储恢复。面对多到机构无法全部保存的资料,决定哪些电影和磁带能够存续,成为 Kunhya 所称的“数字监护”;他还特别指出,这个词是自己创造的。开放工作流也让没有富裕档案馆的国家能够由志愿者教授基于 FFmpeg 的保存方法。
32. 多媒体将从图像和声音扩展到所有同步感官
Kempf 对多媒体的定义很宽:它是面向人类感官的多条数字化数据流。FFmpeg 和 VLC 已经要处理点云、体积视频、RGBD 深度、XR、空间音频和 3D 资产;VLC 甚至支持过液压“4D 影院”系统中的同步触觉控制。
合乎逻辑的延伸,是加入触摸、运动、气味或神经接口轨道的容器;Fridman 开玩笑说可以有立体气味,以及面向人脑的
ffmpeg -i。Kempf 毫不讽刺地回答:只要一种定时数据流代表了人能够感知的东西,架构最终就应该能够为它接入模块。因此,维护者的职责不是亲自实现所有未来设备,而是保持架构的可扩展性。Kunhya 称,VLC 每年约有 150 名贡献者,FFmpeg 约有 300 名;核心团队创建第一个模块和接口,之后的专家便能添加第二、第三种实现,而不必重做整个框架。
现有部署已经足以拓展想象:FFmpeg 为 Mars 2020 探测车压缩图像,VLC 监控 CERN 长达 27 公里的加速器环,Formula 1、SpaceX 和 European Space Agency 都使用过这些工具。Kunhya 最喜欢的总结是“FFmpeg,没有什么超出我们的能力范围”;他最后留下的纪律同样持久:“从错误中学习,但不要后悔。”