FFmpeg编译

这里写自定义目录标题

FFmpeg的编译

  • 整理ffmpeg的编译相关

相关前置库

openssl

bash 复制代码
 # Unix / Linux / macOS
 $ ./config
 $ make && sudo make install

lame库

bash 复制代码
build_lame()
{
    echo "Build lame"
    if [ -f "${INSTALL_DIR}/lib/libmp3lame.a" ]; then
        echo "Use built static libmp3lame.a"
    else
        if [ -f "${THIRD_PARTY_DIR}/lame-3.100.tar.gz" ]; then
            echo "exist lame source in 3rd dir, use it"
            tar -zxvf ${THIRD_PARTY_DIR}/lame-3.100.tar.gz -C $INSTALL_DIR
        else
            echo "do not have lame source, need download"
            wget https://jaist.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz -P ${THIRD_PARTY_DIR}
        fi
        pushd $INSTALL_DIR/lame*
        os_type=$(uname)
        if [[ "$os_type" == "Darwin" ]]; then
            XCRUN_SDK=`echo macosx | tr '[:upper:]' '[:lower:]'`
            CC="xcrun -sdk $XCRUN_SDK clang -arch x86_64"
            CFLAGS="-arch x86_64 $SIMULATOR"
            if ! xcodebuild -version | grep "Xcode [1-6]\."
            then
                CFLAGS="$CFLAGS -fembed-bitcode"
            fi
            CXXFLAGS="$CFLAGS"
            LDFLAGS="$CFLAGS"
            CC=$CC ./configure --disable-shared --disable-frontend --host=x86_64-apple-darwin \
                               --prefix=$INSTALL_DIR CC="$CC" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS"
        elif [[ "$os_type" == "Linux" ]]; then
            LDFLAGS="-fPIC" ./configure --prefix=$INSTALL_DIR --build=BUILD --enable-static --enable-nasm --with-pic
        else
            echo "Unknown operating system"
        fi
        make -j
        make install
        popd
    fi
}

x264库

bash 复制代码
build_x264()
{
    pushd $INSTALL_DIR
    echo "Build x264"
    if [ -d x264 ]; then 
        echo "Use exists x264."
    else
        git clone -b master git@github.com:mirror/x264.git
    fi
    pushd x264
    if [ -f "${INSTALL_DIR}/lib/libx264.a" ]; then
        echo "Use built static libx264.a"
    else
        ./configure --prefix=$INSTALL_DIR \
         --enable-static \
         --enable-pic
    fi
    make -j
    make install
    popd
    popd
}

x265库

bash 复制代码
build_x265()
{
    pushd $INSTALL_DIR
    echo "Build x265"
    if [ -d x265 ]; then 
        echo "Use exists x265."
    else
        if [ -f "${THIRD_PARTY_DIR}/x265_v3.3.tar.gz" ]; then
            echo "exist x265 in 3rd dir, use it"
            tar -zxvf $THIRD_PARTY_DIR/x265_v3.3.tar.gz -C $INSTALL_DIR
        else
            echo "download x265 source code from https://www.x265.org/downloads/ and save it to 3rd dir, for example: 3rd/x265_v3.3.tar.gz"
        fi 
    fi
    pushd x265_3.3
    ln -sf $INSTALL_DIR/../scripts/x265_multilib.sh build/linux/x265_multilib.sh
    if [ -f "${INSTALL_DIR}/lib/libx265.a" ]; then
        echo "Use built static libx265.a"
    else
        pushd build/linux
            sh x265_multilib.sh $INSTALL_DIR
        popd
    fi
    popd
    popd
}

build ffmpeg

bash 复制代码
# for debug, add --enable-debug --disable-stripping
build_ffmpeg()
{
    if [ -f "${INSTALL_DIR}/lib/libavcodec.so" ]; then
        echo "Use built libavcodec.so"
    else
        pushd $ROOT_DIR
        echo "check ffmpeg source"
        if [ -d FFmpeg ]; then 
            echo "Use exists ffmpeg."
        else
            git clone -b feature/support_hevc_base_rc4.4 git@github.com:yagerfgcs/FFmpeg.git
        fi
        pushd FFmpeg
        # configure
        export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:$INSTALL_DIR/lib/pkgconfig
        ./configure --pkg-config=$(which pkg-config) \
                --pkg-config-flags="--static" \
                --enable-static --enable-pic \
                --prefix=${INSTALL_DIR} \
                --enable-openssl --enable-nonfree \
                --enable-libmp3lame \
                --disable-encoders --enable-encoder=aac --enable-encoder=libx264 --enable-gpl --enable-libx264 --enable-encoder=libx265  --enable-libx265 \
                --disable-decoders --enable-decoder=aac --enable-decoder=h264 --enable-decoder=hevc  \
                --disable-demuxers --enable-demuxer=aac --enable-demuxer=mov --enable-demuxer=mpegts --enable-demuxer=flv --enable-demuxer=h264 --enable-demuxer=hevc --enable-demuxer=hls  \
                --disable-muxers --enable-muxer=h264  --enable-muxer=flv --enable-muxer=f4v  --enable-muxer=mp4 \
                --disable-doc --extra-cflags="-I${INSTALL_DIR}/include -fno-stack-check"\
                --extra-ldflags="-L${INSTALL_DIR}/lib -ldl -lpthread"
        # make
        make -j16
        make install
        popd
        popd
    fi
}

备注

相关推荐
可乐鸡翅yeah_11 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
redfred20 小时前
HyperFrames 部署教程:5.6 万 Star 开源「写 HTML 出视频」框架,Windows 从零上手(CLI 三条命令 + 7 个避坑)
ffmpeg·开源·自动化·html·音视频
Arcai10241 天前
PostgreSQL数据备份和恢复完全指南
数据库·postgresql·ffmpeg·备份一体机·备份软件·smartstor·智备科技
可乐鸡翅yeah_1 天前
FFmpeg 生成 HLS 独立分片 independent‑segments 参数到底有什么用
javascript·ffmpeg·音视频·safari·m3u8
企业数字化笔记2 天前
视觉处理为什么会慢?解码、预处理、模型推理、后处理和编码的性能拆解
ffmpeg·gpu算力
Maynor9963 天前
6张商品图→17秒带货短视频:开源12个Claude Skills,配音、字幕花字、BGM本地一条命令出片
ffmpeg·ai编程·claude·电商·agent skills
AIGC小尼3 天前
8G 显存零基础本地部署 AI 漫剧全流程|ComfyUI+Wan2.2+FFmpeg 离线成片完整方案(含代码 / 指令 / 排坑)
人工智能·ffmpeg·php·comfyui·ai漫剧
开开心心就好3 天前
以图搜图找重复图片,本地工具离线就能用
javascript·智能手机·ffmpeg·c#·ocr·word·音视频
可乐鸡翅yeah_4 天前
AES‑128 加密 M3U8,IV 初始化向量新手容易踩坑
前端·网络·数据库·ffmpeg·音视频·m3u8在线
企业数字化笔记5 天前
视频视觉任务怎样选择媒体处理技术?FFmpeg、OpenCV、GStreamer 的职责与适用场景
ffmpeg·音视频·媒体