You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 04:55:03