8月,开源多媒体框架 FFmpeg 9.0 “Lei” 正式释出。听起来只是一次常规版本号更新,但这次不一样:所有底层核心库的主版本号全面升级,是一次 API/ABI 跨代级别的大版本。知乎换句话说,凡是直接调用 FFmpeg 接口的代码、凡是依赖它编译出来的工具,都有可能要跟着变。
不过社区里的反应两极分化。有人逐条梳理新特性,认为这是近年最值得记录的一次大版本;也有老用户直接泼冷水,觉得这次更新几乎没啥意义,因为 FFmpeg 里绝大部分功能用户根本感知不到。知乎两边其实都没说错,一个在谈功能,一个在谈感知。真正有用的问题是:你属于哪类用户,这版对你到底意味着什么。
先说结论:四类人,四种答案
纯看片党,别动。 如果你只是拿 PotPlayer、Kmplayer、VLC 这类播放器看视频,这次更新基本与你无关。播放器只是个壳,更新时会顺带更新底层解码库,你几乎无感。知乎不需要做任何事,等播放器自己更新就行。
脚本和批处理用户,先验证再动。 平时靠 ffmpeg 命令跑批量转码,或者用 PyAV 这类封装库写管线的,9.0 的 API/ABI 跳变对你就是实打实的影响。不用恐慌,但千万别原地覆盖升级:装一个新环境并行跑一遍常用任务,确认输出、参数、报错都正常,再切换。
GPU 编解码用户,这次的主场。 9.0 里相当一部分改进是写给硬件加速管线的,验证之后可以放心升,下面细说。
HandBrake、Jellyfin、Emby 这类下游软件的用户,等就行。 这次更新的是底层库,你手里的转码工具和媒体服务器什么时候吃到新特性,取决于上游适配进度,没必要自己抢跑。

真正值得看的变化,其实就三个
更新日志列了几十条,但对大多数人来说,值得认真看的就三个。
第一,动态 WebP 终于原生支持了。 用 FFmpeg 处理动图 WebP 只能拿到第一帧,这个十多年的历史悬案在 9.0 解决:动态 WebP 的解码与解复用改为原生实现,不再强制依赖外部 libwebp 库。知乎这事其实拖了很多年:静态 WebP 十多年前就支持了,中间耽搁的原因,一是需求少没动力,二是技术路线争议——社区坚持要用内置解码器实现,而不是直接接 libwebp。知乎
第二,GPU 加速全面深化,Vulkan 是藏起来的主线。 明面上的新增不少:NVIDIA 新增 transpose_cuda,帧旋转可以直接在 GPU 上做;AMD AMF 新增帧率转换器和视频质量增强器,HDR 色彩转换也扩展了。知乎Vulkan 侧的动静更大:360 度全景视频滤镜 v360_vulkan、三星专业格式 APV 的 Vulkan 硬件解码,运行时 GLSL 编译也被全面替换成预编译的 SPIR-V。
FFmpeg 的 Vulkan 维护者已经在用 Vulkan Compute 在消费级 GPU 上加速专业级视频的编解码。Khronos用圈内人的话说,这一堆更新的重点都不是前面的编码格式,而是后面的 vulkan hwaccel。知乎这条路线已经有看得见的产出:就在最近,hevc_vulkan 编码器得到优化,通过 Vulkan 调用 GPU 硬件加速后,H.265 编码速度基本追平了 H.264。知乎
第三,libswscale 重写,这是最容易被忽略的一条。 swscale 负责像素格式转换和图像缩放,几乎每条转码管线都要经过它。9.0 开放了 SwsBackend 选择器,引入全新的 C 参考实现、快速 memcpy 通道,以及 x86 AVX2 和 ARM NEON 的优化汇编内核。知乎有资深用户判断,Changelog 里的内容不代表每个版本最重要的改动,9.0 最重要的改动应该就是这个 swscale 重写,这次连编译时汇编代码生成都用上了。知乎如果你的管线对缩放画质和速度敏感,升级后建议做一轮画质与性能的回归对比,新实现不保证和旧版行为完全一致。
三个顺带提一嘴的消息
AI 滤镜这条线有个实用进展:DNN 后端支持通过 ONNX Runtime 运行 GPU 执行提供程序,超分辨率、画质提升这类 AI 滤镜可以直接在 GPU 上跑,不用再纯靠 CPU 硬磨。知乎

专业格式这边也有动作:MP4 复用器支持 LCEVC 增强层音轨复用,杜比视界多层 HEVC 流可以拆分,Apple ProRes RAW 引入了 VideoToolbox 硬件解码,还补上了线性化曲线解析和 Bayer 原始色彩参数导出。知乎这三条对普通用户影响不大,但做商业交付或摄影后期的话,都是实打实省事的改进。
升级前的三个坑
坑一:API/ABI 跳变,别原地覆盖。 这次所有核心库主版本号都变了,老二进制和老绑定不一定能直接跑。正确姿势是并行安装新版本,把常用任务跑一遍回归,再决定切换时间。
坑二:旧版 NVIDIA 环境被直接砍了。 9.0 删除了对 NVIDIA Video Codec SDK 11.1 以下老旧版本的支持,顺带清理了部分旧版 NVENC 选项。知乎如果你的编码管线还在老显卡、老驱动、老 SDK 上跑,升级前先核对手里 SDK 的版本,不然硬编码可能直接罢工。

坑三:CELT 被彻底移除。 独立的 CELT 解码和 Ogg/CELT 解析支持已经删掉,常规的 Opus 音频不受影响。知乎手里如果还有早年的 Ogg/CELT 音频资产,建议先播放确认、做好转存再升级。
接下来看什么
还有一个值得留意的动向:FFmpeg 马上要引入 JIT 支持。知乎配合这个版本的 Vulkan 主线,方向很清楚:把更多活儿挪到 GPU 上,把框架本身做得更快更轻。不急着升级的话,也可以先观望几个补丁版本,看看首批踩坑反馈。
一句话收尾:看片党不动,脚本党验证完再动,GPU 党放心动。你现在用的 FFmpeg 是什么版本,这次打算升吗?评论区聊聊你的环境和踩过的坑。