macOS Catalina下安装ffmpeg失败的问题处理

更新记录

  • 2024-07: 升级ffmpeg安装不上rubberband问题处理
  • 2022-12: 安装ffmpeg失败,libx11出错问题处理

问题起因

主要是因为穷,所以一直在用一台2015MBP丐版,128G硬盘早就不够用了,所以某次清理硬盘空间的时候把ffmpeg给删除了。

后来自己动手换了硬盘,加到1T以后,某天想要用ffmpeg时发现装不上。错误是安装一个依赖(libx11)时出错:

checking for sys/param.h... yes
checking for getpagesize... yes
checking for working mmap... yes
checking for nl_langinfo... yes
checking for X11... no
configure: error: Package requirements (xproto >= 7.0.25 xextproto xtrans xcb >= 1.11.1 kbproto inputproto) were not met:

Package 'pthread-stubs', required by 'xcb', not found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables X11_CFLAGS
and X11_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

Do not report this issue to Homebrew/brew or Homebrew/homebrew-core!


Error: You are using macOS 10.15.
We (and Apple) do not provide support for this old version.
It is expected behaviour that some formulae will fail to build in this old version.
It is expected behaviour that Homebrew will be buggy and slow.
Do not create any issues about this on Homebrew's GitHub repositories.
Do not create any issues even if you think this message is unrelated.
Any opened issues will be immediately closed without response.
Do not ask for help from MacHomebrew on Twitter.
You may ask for help in Homebrew's discussions but are unlikely to receive a response.
Try to figure out the problem yourself and submit a fix as a pull request.
We will review it but may or may not accept it.

最后这个提示一直让我误以为是系统版本问题,但这是macOS 10的最后一个小版本,不想升到11以上,还是得想别的办法。

问题处理

尝试安装旧版的ffmpeg@4,也一样错误。

看了一下brew list,系统里已经存在了libx11,只是版本低一点而已,于是试图用brew pin libx11锁定版本,但是安装ffmpeg又必须依赖最新版。

搜到homebrew的一个讨论帖,加上了

env PKG_CONFIG_PATH=`pkg-config --variable pc_path pkg-config`

仍然不行。

最后是在一个回复里看到解决方案:强制重装libxcb:

brew reinstall libxcb

这样会把它的依赖一起重装一遍,再安装libx11就成功了,安装ffmpeg也没问题了。

更新问题

买了个action4,拍出来4K HEVC视频在电脑上看太卡了,所以想用ffmpeg转一下1080p,用brew更新ffmpeg结果又失败了。这次有两个问题。

libjpeg-xl安装失败问题处理

先是libjpeg-xl安装失败,搜到这个Issue,用fefe79提供的这句解决:

brew install gcc
brew install jpeg-xl --force --cc gcc-13

估计是因为这个源码跟clang不兼容,换成gcc就通过了。

rubberband安装失败问题处理

然后是rubberband安装失败,这个要麻烦得多,用上面两个方法(强制更新依赖和换gcc编译)都不行,网上搜了,也问了gpt,没有一个能解决的。

现象是这样的:

通过brew安装rubberband,在执行到:

meson compile -C build --verbose

的时候,有一句clang++的编译命令失败了,错误为:

fatal error: 'jni.h' file not found

但是在clang++的参数里有

  • -I/Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home/include
  • -I/Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home/include/darwin

而这些路径下有jni.h文件和jni_md.h文件。用:

/usr/libexec/java_home -V

看了安装的java版本,并且配置了JAVA_HOME都没错,但始终报这个错误。

也尝试过用--cc=gcc把编译器换成gcc,但错误一样。也试过gpt提供的各种环境变量配置方法,一点用都没有。

最后只能研究手工安装方法,利用命令:

brew install rubberband --keep-tmp

/private/tmp下面保留了brew安装过程中用到的rubberband源码,在其中执行那个出错的clang++命令居然不报错,再试:

meson compile -C build --verbose

居然也成功了。然后就手工安装了:

meson install -C build

再看一下结果:

brew list | grep rubberband

确实成功了,把link加上:

brew link rubberband

然后手工把tmp下面的源码删除即可。

推送到[go4pro.org]