FFmpeg 更新至 4.0 后导致 bs1770gain 工作不能

2018/07/15

BS1770GAIN 是一个可以计算音乐文件响度并给出一个建议的偏移值, 即回放增益 (RePlayGain) 的工具.

因为官方好像是没有对 macOS 提供支持的, 然后搜索 “compile bs1770gain on mac” 得到的条目也基本是风马牛不相及, 所以第一次编译安装的时候也是费了不少功夫 (主要原因还是太菜, 连依赖都装不全…) 每次用的时候都抱着一种感激而又小心翼的态度, 可惜好景不长.

前段时间我去官网查 Python 手册的时候, 发现最新的 3.7 版本已释出, 尽管最新特性肯定用不上, 也还是要果断更新一波啊 🙆‍♂. 想到其他包也很久没更新了, 就直接 brew upgrade 全更新了吧.

刚更新完就发现 beets 出问题了, 看了一下报错, 是插件的依赖项缺失. 一个个安装解决, 最后只有一个使用 bs1770gain 作为后端的插件始终无法启动. 尝试直接运行 bs1770gain, 报错也是让本萌新一头雾水: Image not loaded, "dyld: Library not loaded: /usr/local/opt/ffmpeg/lib/libavutil.55.dylib".

找来找去也没有办法, 只知道是 FFmpeg 的问题, 算了, 大不了重新编译啰, 谁怕谁. 天真的我以为只要在项目里再 make 一次就好了, 谁知 紧接着又甩出一个我完全看不懂的错误, "ffsox_frame.c:51:41: error: use of undeclared identifier 'CODEC_CAP_VARIABLE_FRAME_SIZE'" , 乍一看以为是依赖项缺失, 但是 configure 的时候并没有任何问题啊?

再搜一下, 这次结果就多了, 果然 FFmpeg 的用户基数就是大啊. 挑几个看了一下, 好像是 FFmpeg 4.x 的锅, 新版本里删除了很多宏, 其中可能就包括 bs1770gain 需要的这个吧.

既然自己没有修改源码的能力, 那还是直接回退吧

brew ls --versions ffmpeg  # 列出已安装的 FFmpeg 的版本
brew switch ffmpeg 3.4.2  # 切换到老版本
brew pin ffmpeg  # 防止自动更新
# 有人提到但是用 brew upgrade <package> 指定包名的时候还是会被更新
# 但新版的文档中并未提到这一点, 可能是已经改进了:
# "If formulae are given, upgrade only the specified brews (unless they are pinned; see pin, unpin"

那个让人又爱又恨的 bs1770gain 回来了.

依赖真是一种因捉摸不清而可惧的东西.

最后还是想吐槽一下自己, 闲着没事玩这种小众工具 (beets) 里的小众插件 (replaygain) 的小众依赖作什么…