Mac High Sierra 10.13构建FFmpeg报错:找不到workspace/bin/ffmpeg文件
MacOS 10.13下FFmpeg构建脚本执行失败问题排查
问题描述
我编写了名为buildffmpeg.sh的Shell脚本,用于自动下载并构建FFmpeg,生成ffmpeg和ffprobe可执行文件。该脚本在新版Mac及Linux系统上运行正常,但在MacOS 10.13上测试时,先是原FFmpeg快照URL过旧报错,更新为FFmpeg 6.0的快照URL后,执行脚本输出'11'后失败,提示'/Users/apple/Documents/projects/buildffmpeghighsierra/workspace/bin/ffmpeg': No such file or directory。请问脚本的构建流程是否存在问题?
脚本代码
#!/bin/bash set -e CWD=$(pwd) PACKAGES="$CWD/packages" WORKSPACE="$CWD/workspace" ADDITIONAL_CONFIGURE_OPTIONS="" mkdir -p "$PACKAGES" mkdir -p "$WORKSPACE" echo '~0~' FFMPEG_TAG="$1" FFMPEG_URL="https://git.ffmpeg.org/gitweb/ffmpeg.git/snapshot/adb4688bfb0652b2ffa5bc29e53761e27e1a3b3e.tar.gz" echo '~1~' FFMPEG_ARCHIVE="$PACKAGES/ffmpeg.tar.gz" echo '~2~' if [ ! -f "$FFMPEG_ARCHIVE" ]; then echo "Downloading tag ${FFMPEG_TAG}..." echo "~2.1~ FFMPEG_ARCHIVE=$FFMPEG_ARCHIVE" echo "~2.2~ FFMPEG_URL=$FFMPEG_URL" curl -L -k -o "$FFMPEG_ARCHIVE" "$FFMPEG_URL" fi echo '~3~' EXTRACTED_DIR="$PACKAGES/extracted" echo '~4~' mkdir -p "$EXTRACTED_DIR" echo '~5~' echo "Extracting..." tar -xf "$FFMPEG_ARCHIVE" --strip-components=1 -C "$EXTRACTED_DIR" echo '~6~' cd "$EXTRACTED_DIR" echo '~7~' echo "Building..." echo '~8~' # Min electron supported version MACOS_MIN="10.10" echo '~9~' ./configure $ADDITIONAL_CONFIGURE_OPTIONS \ --pkgconfigdir="$WORKSPACE/lib/pkgconfig" \ --pkg-config-flags="--static" \ --extra-cflags="-I$WORKSPACE/include -mmacosx-version-min=${MACOS_MIN}" \ --extra-ldflags="-L$WORKSPACE/lib -mmacosx-version-min=${MACOS_MIN}" \ --extra-libs="-lpthread -lm" \ --enable-static \ --disable-securetransport \ --disable-debug \ --disable-shared \ --disable-ffplay \ --disable-lzma \ --disable-doc \ --enable-version3 \ --enable-pthreads \ --enable-runtime-cpudetect \ --enable-avfilter \ --enable-filters \ --disable-libxcb \ --enable-gpl \ --disable-libass \ --enable-libmp3lame \ --enable-libx264 echo '~10~' make -j 4 echo '~11~' make install echo '~11~' otool -L "$WORKSPACE/bin/ffmpeg" echo '~12~' otool -L "$WORKSPACE/bin/ffprobe" echo '~13~' echo "Building done. The binaries can be found here: $WORKSPACE/bin/ffmpeg $WORKSPACE/bin/ffprobe" echo '~14~' mkdir ffmpeg-mac/ echo '~15~' cp -r "$WORKSPACE/bin/" "$CWD/ffmpeg-mac/" echo '~16~' rm -rf "$PACKAGES" echo '~17~' rm -rf "$WORKSPACE" echo '~18~' exit 0
问题排查与修复方案
1. 核心问题:缺失安装前缀参数
脚本中仅指定了--pkgconfigdir,但未设置--prefix参数,导致make install默认将编译产物安装到系统路径(如/usr/local),而非你指定的$WORKSPACE目录。这是$WORKSPACE/bin/ffmpeg不存在的直接原因。
2. MacOS 10.13兼容性适配
FFmpeg 6.0对老版本MacOS支持有限,需调整编译参数:
- 将
MACOS_MIN从10.10改为10.13,避免编译出的二进制依赖更高版本系统API - 添加
--disable-videotoolbox,老系统的VideoToolbox实现与FFmpeg 6.0存在兼容性问题 - 检查依赖库(libmp3lame、libx264)是否已安装,新版系统可能自带,但MacOS 10.13大概率缺失,需手动安装或在脚本中新增自动编译逻辑
3. 脚本关键修改点
# 调整最小系统版本适配10.13 MACOS_MIN="10.13" ./configure $ADDITIONAL_CONFIGURE_OPTIONS \ --prefix="$WORKSPACE" \ # 新增:指定安装路径到工作目录 --pkgconfigdir="$WORKSPACE/lib/pkgconfig" \ --pkg-config-flags="--static" \ --extra-cflags="-I$WORKSPACE/include -mmacosx-version-min=${MACOS_MIN}" \ --extra-ldflags="-L$WORKSPACE/lib -mmacosx-version-min=${MACOS_MIN}" \ --extra-libs="-lpthread -lm" \ --enable-static \ --disable-securetransport \ --disable-debug \ --disable-shared \ --disable-ffplay \ --disable-lzma \ --disable-doc \ --enable-version3 \ --enable-pthreads \ --enable-runtime-cpudetect \ --enable-avfilter \ --enable-filters \ --disable-libxcb \ --enable-gpl \ --disable-libass \ --enable-libmp3lame \ --enable-libx264 \ --disable-videotoolbox # 新增:禁用老系统不兼容的组件
4. 额外优化建议
- 移除重复的
echo '~11~',避免日志混淆 - 在
make install后添加目录存在检查,再执行otool命令,防止脚本因文件不存在直接中断:echo '~11~' make install if [ -d "$WORKSPACE/bin" ]; then otool -L "$WORKSPACE/bin/ffmpeg" echo '~12~' otool -L "$WORKSPACE/bin/ffprobe" else echo "Error: Install directory $WORKSPACE/bin not found" exit 1 fi - 确保MacOS 10.13的Xcode版本至少为9.4.1,满足FFmpeg 6.0的编译要求
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

