FFmpeg 9.0 发布:七个库全部 major bump,动画 WebP 支持,Claude 参与开发

FFmpeg 9.0 发布:七个库全部 major bump,动画 WebP 支持,Claude 参与开发

FFmpeg 9.0 代号 "Lei",距上一版本 8.1 约 4 个半月,包含来自 160 多位贡献者的 2200 多次提交,修改了 1781 个文件,新增约 85000 行代码,删除超过 33000 行。这是一次大版本升级,七个库(libavutil、libavcodec、libavformat、libavdevice、libavfilter、libswscale、libswresample)全部 major version bump,意味着全面的 ABI break,发行版和依赖 FFmpeg 的应用需要时间迁移。

动画 WebP:十年老票关单

FFmpeg 9.0 原生支持动画 WebP 解码器和分离器(demuxer),关闭了 2015 年就提出的 ticket #4907。过去十年里,"为什么 FFmpeg 只能解码 WebP 的第一帧"是社区论坛的常驻问题。补丁最初由 Josef Zlomek 发起,最终由 Ramiro Polla 完成,过程中 RGB 和 YUV 两种颜色空间的处理比预期复杂。

swscale 架构重写

这个版本最长期的工程不在功能列表上显眼,但影响深远:Niklas Haas 主导的 swscale(图像缩放和颜色空间转换模块)架构重写。他在这个周期提交了 300 多次代码,Ramiro Polla 负责 ARM 端。

旧 swscale 是二十年积累的格式特定转换代码。新架构完全不同:每次转换被分解为一系列基本操作(读取、重排、线性变换、缩放、打包),一个优化器简化并拆分操作列表,然后由后端编译成内核链。9.0 暴露了 SwsBackend 选择器,后端包括基于模板的 C 参考实现、快速 memcpy 路径、x86 SIMD 内核链、AArch64 NEON 内核链,以及 Vulkan SPIR-V 后端——同一套转换图可以在 CPU 或 GPU 上运行。

精度方面,驱动每次转换的常量计算迁移到 64 位有理数类型,精确计算替代浮点运算,消除了溢出风险。请求 SWS_BITEXACT 时,连 Vulkan 后端都会用 SPIR-V NoContraction 装饰线性运算,禁止 GPU 合并乘加操作。新路径目前仍标记为 SWS_UNSTABLE,旧代码作为稳定默认值保留。

Vulkan 和 GPU 加速

Vulkan 工作持续扩展到编解码和滤镜层:

  • 新增 v360_vulkan 滤镜,用计算着色器做 360 度投影重映射,GPU 加速了 FFmpeg 中最耗时的滤镜之一
  • 三星的专业制作编解码器 APV 获得 Vulkan GPU 加速解码
  • 运行时着色器编译被移除,所有 Vulkan 着色器现在在构建时编译为 SPIR-V
  • AMD AMF 新增帧率转换滤镜(frc_amf)和 HDR 色彩转换能力
  • CUDA 新增 transpose_cuda 滤镜,端到端支持 10/12-bit 4:2:2 和 4:4:4 格式

其他重要特性

特性说明
HE-AAC 960 解码支持 DAB+ 数字广播使用的 960 采样帧
Playdate 视频编码器为 Playdate 掌机生成 1-bit 400x240 视频,delta 编码 + zlib 压缩
ONNX Runtime DNN 后端支持 CUDA 和 DirectML 执行提供者,可直接在滤镜链中运行 ONNX 模型
Dolby Vision Profile 7新增 dovi_split 比特流滤镜,可分离增强层和基础层
ProRes RAW与参考实现对齐,新增 VideoToolbox 硬件加速和 Vulkan GPU 解码
FFV1 Bayer 编码无损压缩原始传感器马赛克数据,含 Vulkan GPU 编解码器
SMPTE 2094-50动态 HDR 元数据的解析、写入和透传
TLS 证书默认验证FFmpeg 现在默认验证 TLS 对端证书(8.0 宣布,9.0 生效)

大清理

所有在 8.x 周期废弃的功能都已移除:-vsync 命令行参数(改用 -fps_mode)、OpenMAX 编码器、NPP 滤镜系列、CELT 独立解码器(自 2014 年就已损坏但无人注意)、Sonic 编解码器族。

Claude 参与开发

FFmpeg 在其官方社交媒体账号上表示,通过 Anthropic 的 Claude for Open Source Program,开发团队获得了六个月免费 Claude Max 计划。在 9.0 发布中,Claude 主要用于帮助查找缺失的向后移植(backports)——即将主分支的修复补丁同步到旧版本分支的工作。这是一项重复性高、需要跨分支比对的维护任务。

在 Hacker News 的讨论中,社区对此反应不一。支持者认为,AI 工具用于差异分析和填补样板代码不会替代手写汇编优化,FFmpeg 的核心性能代码仍由人工编写。批评者则关注 AI 辅助开发对代码审查流程和贡献者文化的长期影响。一位评论者指出,"find missing backports"听起来更像是定位工作而非编写代码。

FFmpeg

总结

FFmpeg 9.0 是一次实质性的大版本更新。swscale 架构重写为未来几代的图像处理奠定了基础;Vulkan 后端的扩展让更多计算密集型操作可以在 GPU 上运行;动画 WebP、Dolby Vision 分层处理、ONNX Runtime DNN 后端等新功能覆盖了从格式兼容到 AI 推理的多个层面。Claude 在本次发布中的角色限于 backport 查找,社区对 AI 辅助开源开发的讨论仍在继续。

参考来源:jbkempf.comHacker News 讨论